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