diff --git a/storybook/qmlTests/tests/tst_PrimaryNavSidebar.qml b/storybook/qmlTests/tests/tst_PrimaryNavSidebar.qml
index 83112af040..caff3ae1f8 100644
--- a/storybook/qmlTests/tests/tst_PrimaryNavSidebar.qml
+++ b/storybook/qmlTests/tests/tst_PrimaryNavSidebar.qml
@@ -134,6 +134,7 @@ Item {
controlUnderTest.statusSupportBotEnabled = true
tryCompare(supportBotButton, "visible", true)
+ compare(supportBotButton.showBadge, false)
}
function test_activity_center_button() {
diff --git a/ui/StatusQ/src/assets/img/icons/status-flat.svg b/ui/StatusQ/src/assets/img/icons/status-flat.svg
new file mode 100644
index 0000000000..3762705fea
--- /dev/null
+++ b/ui/StatusQ/src/assets/img/icons/status-flat.svg
@@ -0,0 +1,4 @@
+
diff --git a/ui/StatusQ/src/assets/img/img.qrc b/ui/StatusQ/src/assets/img/img.qrc
index 43c07adf59..ee67502d58 100644
--- a/ui/StatusQ/src/assets/img/img.qrc
+++ b/ui/StatusQ/src/assets/img/img.qrc
@@ -258,6 +258,7 @@
icons/speech.svg
icons/star-icon-outline.svg
icons/star-icon.svg
+ icons/status-flat.svg
icons/status-logo-icon.png
icons/status-update.svg
icons/status.svg
diff --git a/ui/app/mainui/AppMain.qml b/ui/app/mainui/AppMain.qml
index 11e09bfc41..b1f9c403c6 100644
--- a/ui/app/mainui/AppMain.qml
+++ b/ui/app/mainui/AppMain.qml
@@ -262,6 +262,20 @@ Item {
readonly property var allContacsAdaptor: contactInfrastructureLoader.item?.allContactsAdaptor ?? null
readonly property var contactsModelAdaptor: contactInfrastructureLoader.item?.contactsAdaptor ?? null
+ Loader {
+ id: supportBotContactLoader
+ active: appMain.mainReady
+ && appMain.featureFlagsStore.statusSupportBotEnabled
+ && !!appMain.contactsStore
+ && !!d.supportBotPublicKey
+
+ sourceComponent: ContactModelEntry {
+ publicKey: d.supportBotPublicKey
+ contactsModel: appMain.contactsStore.contactsModel
+ onPopulateContactDetailsRequested: appMain.contactsStore.populateContactDetails(d.supportBotPublicKey)
+ }
+ }
+
Loader {
id: toastsManagerLoader
active: appMain.mainReady
@@ -914,6 +928,24 @@ Item {
id: d
readonly property string myPublicKey: userProfile.pubKey // we need it very soon, before all the stores
+ readonly property string supportBotPublicKey: {
+ const chatKey = Constants.statusSupportBotChatKey
+ return chatKey && appMain.utilsStore ? appMain.utilsStore.getDecompressedPk(chatKey) : ""
+ }
+ readonly property var supportBotContact: supportBotContactLoader.status === Loader.Ready
+ ? supportBotContactLoader.item : null
+ readonly property bool supportBotConversationAvailable: {
+ const contact = d.supportBotContact
+ if (!contact?.available)
+ return false
+
+ const details = contact.contactDetails
+ return details.isBlocked
+ || details.isContact
+ || details.contactRequestState === Constants.ContactRequestState.Mutual
+ || details.contactRequestState === Constants.ContactRequestState.Sent
+ || details.contactRequestState === Constants.ContactRequestState.Received
+ }
property bool messagingNetworkDisconnected: !appMain.rootStore.isMessagingNetworkConnected
property bool doShowMessagingBanner: false
@@ -2645,12 +2677,19 @@ Item {
onSettingsRequested: d.openSettingsRoot()
onSupportBotChatRequested: {
- const publicKey = appMain.utilsStore.getDecompressedPk(Constants.statusSupportBotChatKey)
- if (!publicKey) {
+ if (!d.supportBotPublicKey) {
console.warn("Unable to resolve the Status support bot chat key")
return
}
- appMain.contactsStore.joinPrivateChat(publicKey)
+ if (d.supportBotConversationAvailable) {
+ appMain.contactsStore.joinPrivateChat(d.supportBotPublicKey)
+ return
+ }
+ Global.openContactRequestPopupWithDefaultMessage(
+ d.supportBotPublicKey,
+ null,
+ qsTr("Send the Status Team bot a contact request to get useful Status tips, important updates, and share your feedback, ideas, or issues directly with the Status team.")
+ )
}
onItemActivated: function(sectionType, sectionId) {
diff --git a/ui/app/mainui/Popups.qml b/ui/app/mainui/Popups.qml
index 21ee334c64..cabd8a7995 100644
--- a/ui/app/mainui/Popups.qml
+++ b/ui/app/mainui/Popups.qml
@@ -357,9 +357,13 @@ QtObject {
}, cb)
}
- function openContactRequestPopup(publicKey, cb) {
+ function openContactRequestPopup(publicKey, cb, defaultMessage = "") {
const contactEntry = getContactModelEntry(publicKey)
- const properties = { publicKey, contactDetails: contactEntry.contactDetails }
+ const properties = {
+ publicKey,
+ contactDetails: contactEntry.contactDetails,
+ defaultMessage: defaultMessage || ""
+ }
openPopup(sendContactRequestPopupComponent, properties, cb)
}
diff --git a/ui/app/mainui/panels/PrimaryNavSidebar.qml b/ui/app/mainui/panels/PrimaryNavSidebar.qml
index 03fd37b256..da925f88c1 100644
--- a/ui/app/mainui/panels/PrimaryNavSidebar.qml
+++ b/ui/app/mainui/panels/PrimaryNavSidebar.qml
@@ -280,7 +280,7 @@ Control {
Layout.alignment: Qt.AlignHCenter
visible: root.statusSupportBotEnabled
- icon.name: "chatbot"
+ icon.name: "status-flat"
tooltipText: qsTr("Status Help Bot")
thirdpartyServicesEnabled: root.thirdpartyServicesEnabled
diff --git a/ui/app/mainui/sectionLoaders/PopupsLoader.qml b/ui/app/mainui/sectionLoaders/PopupsLoader.qml
index 9ffdb9b35b..24e55b1d05 100644
--- a/ui/app/mainui/sectionLoaders/PopupsLoader.qml
+++ b/ui/app/mainui/sectionLoaders/PopupsLoader.qml
@@ -183,6 +183,9 @@ Loader {
function onOpenContactRequestPopup(publicKey, cb) {
root.invoke(() => root.item.openContactRequestPopup(publicKey, cb))
}
+ function onOpenContactRequestPopupWithDefaultMessage(publicKey, cb, defaultMessage) {
+ root.invoke(() => root.item.openContactRequestPopup(publicKey, cb, defaultMessage))
+ }
function onOpenReviewContactRequestPopup(publicKey, cb) {
root.invoke(() => root.item.openReviewContactRequestPopup(publicKey, cb))
}
diff --git a/ui/i18n/qml_base_en.ts b/ui/i18n/qml_base_en.ts
index 7d19ef550c..9011a17175 100644
--- a/ui/i18n/qml_base_en.ts
+++ b/ui/i18n/qml_base_en.ts
@@ -1830,6 +1830,10 @@ from "%1" to "%2"
This channel no longer exists
+
+ Send the Status Team bot a contact request to get useful Status tips, important updates, and share your feedback, ideas, or issues directly with the Status team.
+
+
Invite People
diff --git a/ui/i18n/qml_cs.ts b/ui/i18n/qml_cs.ts
index 9c2375b20f..220bea95a1 100644
--- a/ui/i18n/qml_cs.ts
+++ b/ui/i18n/qml_cs.ts
@@ -1842,6 +1842,10 @@ z "%1" na "%2"
This channel no longer exists
+
+ Send the Status Team bot a contact request to get useful Status tips, important updates, and share your feedback, ideas, or issues directly with the Status team.
+
+
Invite People
Pozvat lidi
diff --git a/ui/i18n/qml_es.ts b/ui/i18n/qml_es.ts
index 1c64193ec9..3b92750251 100644
--- a/ui/i18n/qml_es.ts
+++ b/ui/i18n/qml_es.ts
@@ -1831,6 +1831,10 @@ de "%1" a "%2"
This channel no longer exists
+
+ Send the Status Team bot a contact request to get useful Status tips, important updates, and share your feedback, ideas, or issues directly with the Status team.
+
+
Invite People
Invitar personas
diff --git a/ui/i18n/qml_fr.ts b/ui/i18n/qml_fr.ts
index 413a1e72c0..d9bc853700 100644
--- a/ui/i18n/qml_fr.ts
+++ b/ui/i18n/qml_fr.ts
@@ -1831,6 +1831,10 @@ de "%1" à "%2"
This channel no longer exists
Ce canal n’existe plus
+
+ Send the Status Team bot a contact request to get useful Status tips, important updates, and share your feedback, ideas, or issues directly with the Status team.
+
+
Invite People
Inviter des personnes
diff --git a/ui/i18n/qml_ko.ts b/ui/i18n/qml_ko.ts
index deb066fe42..79a9c71cd0 100644
--- a/ui/i18n/qml_ko.ts
+++ b/ui/i18n/qml_ko.ts
@@ -1815,6 +1815,10 @@ from "%1" to "%2"
This channel no longer exists
+
+ Send the Status Team bot a contact request to get useful Status tips, important updates, and share your feedback, ideas, or issues directly with the Status team.
+
+
Invite People
사람들 초대하기
diff --git a/ui/imports/shared/popups/SendContactRequestModal.qml b/ui/imports/shared/popups/SendContactRequestModal.qml
index 4eb0b35de1..9dd346f0ec 100644
--- a/ui/imports/shared/popups/SendContactRequestModal.qml
+++ b/ui/imports/shared/popups/SendContactRequestModal.qml
@@ -21,12 +21,15 @@ CommonContactDialog {
property string labelText: qsTr("Why should they accept your contact request?")
property string challengeText: qsTr("Write a short message telling them who you are...")
property string buttonText: qsTr("Send contact request")
+ property string defaultMessage: ""
signal accepted(string message)
title: qsTr("Send contact request")
onAboutToShow: {
+ if (root.defaultMessage)
+ messageInput.text = root.defaultMessage
messageInput.input.edit.forceActiveFocus()
// (request) update from mailserver
diff --git a/ui/imports/utils/Global.qml b/ui/imports/utils/Global.qml
index 0586d9531c..b4bbcd0c67 100644
--- a/ui/imports/utils/Global.qml
+++ b/ui/imports/utils/Global.qml
@@ -34,6 +34,7 @@ QtObject {
signal openMarkAsIDVerifiedPopup(string publicKey, var cb)
signal openRemoveIDVerificationDialog(string publicKey, var cb)
signal openContactRequestPopup(string publicKey, var cb)
+ signal openContactRequestPopupWithDefaultMessage(string publicKey, var cb, string defaultMessage)
signal openReviewContactRequestPopup(string publicKey, var cb)
signal markAsUntrustedRequested(string publicKey)
signal removeContactRequested(string publicKey)
diff --git a/vendor/status-go b/vendor/status-go
index 33e8ecfc4f..d39761cb7a 160000
--- a/vendor/status-go
+++ b/vendor/status-go
@@ -1 +1 @@
-Subproject commit 33e8ecfc4f24c5c739505c165f05e14cdf8931cd
+Subproject commit d39761cb7afb3aa23308d2f73e89770c3d4007e1