From 61e07805da982f22a814d4779108faf5e4de09ba Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 1 May 2025 12:33:46 +0530 Subject: [PATCH 01/20] fix: confirmation drawer context tag --- .../common/confirmation_drawer/style.cljs | 15 +---------- .../common/confirmation_drawer/view.cljs | 27 ++++++------------- 2 files changed, 9 insertions(+), 33 deletions(-) diff --git a/src/status_im/common/confirmation_drawer/style.cljs b/src/status_im/common/confirmation_drawer/style.cljs index 581235183e3..8bcaecbbeaf 100644 --- a/src/status_im/common/confirmation_drawer/style.cljs +++ b/src/status_im/common/confirmation_drawer/style.cljs @@ -1,17 +1,4 @@ -(ns status-im.common.confirmation-drawer.style - (:require - [quo.foundations.colors :as colors])) - -(defn context-container - [theme] - {:flex-direction :row - :background-color (colors/theme-colors colors/neutral-10 colors/neutral-80 theme) - :border-radius 20 - :align-items :center - :align-self :flex-start - :padding 2 - :margin-top 4 - :margin-bottom 16}) +(ns status-im.common.confirmation-drawer.style) (def buttons-container {:flex-direction :row diff --git a/src/status_im/common/confirmation_drawer/view.cljs b/src/status_im/common/confirmation_drawer/view.cljs index 808a4cf2811..e3dad9b7e4f 100644 --- a/src/status_im/common/confirmation_drawer/view.cljs +++ b/src/status_im/common/confirmation_drawer/view.cljs @@ -9,18 +9,6 @@ [utils.i18n :as i18n] [utils.re-frame :as rf])) -(defn avatar - [group-chat color display-name photo-path] - (if group-chat - [quo/group-avatar - {:customization-color color - :size :size-20}] - [quo/user-avatar - {:full-name display-name - :profile-picture photo-path - :size :xxs - :status-indicator? false}])) - (defn extra-action-view [extra-action extra-text extra-action-selected?] (when extra-action @@ -38,7 +26,6 @@ (let [{:keys [group-chat chat-id public-key color chat-type profile-picture name]} context id (or chat-id public-key) - theme (quo.context/use-theme) [primary-name _] (when-not (or group-chat (= chat-type constants/public-chat-type)) (rf/sub [:contacts/contact-two-names-by-identity id])) @@ -56,12 +43,14 @@ [quo/text {:weight :semi-bold :size :heading-2} title] - [rn/view {:style (style/context-container theme)} - [avatar group-chat color display-name photo-path] - [quo/text - {:weight :medium - :size :paragraph-2 - :style {:margin-left 4}} display-name]] + [quo/context-tag + {:type (if group-chat :group :default) + :profile-picture photo-path + :full-name display-name + :group-name display-name + :customization-color color + :container-style {:margin-bottom 12 :margin-top 4} + :size 24}] [quo/text description] [extra-action-view extra-action extra-text extra-action-selected?] [rn/view {:style style/buttons-container} From 56b34a180ee5d7c133fc645c908344c5adf20212 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 1 May 2025 12:34:39 +0530 Subject: [PATCH 02/20] wip: mark as untrusted option & drawer --- src/status_im/common/home/actions/view.cljs | 32 +++++++++++++------ .../profile/contact/actions/view.cljs | 14 ++++---- translations/en.json | 4 ++- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index 397cb20623b..cf1d74921b0 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -130,6 +130,20 @@ :on-press #(hide-sheet-and-dispatch [:contact/block-contact public-key])}])}])) +(defn mark-as-untrusted-action + [{:keys [public-key] :as item}] + (hide-sheet-and-dispatch + [:show-bottom-sheet + {:content (fn [] + [confirmation-drawer/confirmation-drawer + {:title (i18n/label :t/mark-as-untrusted) + :description (i18n/label :t/mark-as-untrusted-description + {:username (:primary-name item)}) + :context item + :accessibility-label :block-user + :button-text (i18n/label :t/mark-as-untrusted-button) + :on-press #(print "Not implemented")}])}])) + (defn mute-chat-entry [chat-id chat-type muted-till] (let [muted? (rf/sub [:chats/muted chat-id])] @@ -260,7 +274,7 @@ (entry {:icon :i/remove-user :label (i18n/label :t/remove-from-contacts) :on-press #(hide-sheet-and-dispatch [:contact.ui/remove-contact-pressed contact]) - :danger? false + :danger? true :accessibility-label :remove-from-contacts :sub-label nil :chevron? false})) @@ -300,14 +314,14 @@ :sub-label nil :chevron? false})) -;; TODO(OmarBasem): Requires status-go impl. (defn mark-untrustworthy-entry - [] - (entry {:icon :i/alert - :label (i18n/label :t/mark-untrustworthy) - :on-press #(js/alert "TODO: to be implemented, requires status-go impl.") + [item] + (entry {:icon :i/untrustworthy + :label (i18n/label :t/mark-as-untrusted) + ;; :on-press #(js/alert "TODO: to be implemented, requires status-go impl.") + :on-press #(mark-as-untrusted-action item) :danger? true - :accessibility-label :mark-untrustworthy + :accessibility-label :mark-as-untrusted :sub-label nil :chevron? false :add-divider? true})) @@ -437,6 +451,7 @@ (defn contact-actions [{:keys [public-key added?] :as contact} {:keys [chat-id admin?] :as extra-data}] + (tap> contact) (let [current-pub-key (rf/sub [:multiaccount/public-key])] [quo/action-drawer [[(view-profile-entry public-key) @@ -445,8 +460,7 @@ (show-qr-entry public-key) (share-profile-entry public-key)] [(when-not (= current-pub-key public-key) - (when config/show-not-implemented-features? - (mark-untrustworthy-entry))) + (mark-untrustworthy-entry contact)) (when added? (remove-from-contacts-entry contact)) (when-not (= current-pub-key public-key) (block-user-entry contact))] (when (and admin? chat-id) diff --git a/src/status_im/contexts/profile/contact/actions/view.cljs b/src/status_im/contexts/profile/contact/actions/view.cljs index 808a158a8f2..326f526dbf2 100644 --- a/src/status_im/contexts/profile/contact/actions/view.cljs +++ b/src/status_im/contexts/profile/contact/actions/view.cljs @@ -3,7 +3,6 @@ [quo.core :as quo] [react-native.core :as rn] [status-im.common.not-implemented :as not-implemented] - [status-im.config :as config] [status-im.constants :as constants] [status-im.contexts.profile.contact.add-nickname.view :as add-nickname] [status-im.contexts.profile.contact.block-contact.view :as block-contact] @@ -87,13 +86,12 @@ :add-divider? true :accessibility-label :remove-nickname :danger? true}) - (when config/show-not-implemented-features? - {:icon :i/untrustworthy - :label (i18n/label :t/mark-untrustworthy) - :on-press not-implemented/alert - :accessibility-label :mark-untrustworthy - :add-divider? (when-not has-nickname? true) - :danger? true}) + {:icon :i/untrustworthy + :label (i18n/label :t/mark-as-untrusted) + :on-press not-implemented/alert + :accessibility-label :mark-as-untrusted + :add-divider? (when-not has-nickname? true) + :danger? true} (when (= constants/contact-request-state-mutual contact-request-state) {:icon :i/remove-user :label (i18n/label :t/remove-contact) diff --git a/translations/en.json b/translations/en.json index 352d8137d00..6ebf891bffb 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1623,7 +1623,9 @@ "mark-all-notifications-as-read": "Mark all notifications as read", "mark-all-read": "Mark all read", "mark-as-read": "Mark as read", - "mark-untrustworthy": "Mark as Untrustworthy", + "mark-as-untrusted": "Mark as untrusted", + "mark-as-untrusted-button": "Mark", + "mark-as-untrusted-description": "{{username}} will be marked as untrusted. This mark will only be visible to you.", "mark-user-untrustworthy": "Mark {{username}} as untrustworthy", "market": "Market", "market-cap": "Market cap", From bb31ef46a8216ce2a3f222be0618b575f5a2ebdb Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 1 May 2025 14:12:25 +0530 Subject: [PATCH 03/20] Implement trust status actions --- src/status_im/common/home/actions/view.cljs | 39 +++++++++++------ src/status_im/constants.cljs | 5 +++ .../contexts/chat/contacts/events.cljs | 1 + .../contexts/contact/trust/events.cljs | 43 +++++++++++++++++++ src/status_im/events.cljs | 1 + translations/en.json | 3 ++ 6 files changed, 78 insertions(+), 14 deletions(-) create mode 100644 src/status_im/contexts/contact/trust/events.cljs diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index cf1d74921b0..5ed32f0e8db 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -131,7 +131,7 @@ public-key])}])}])) (defn mark-as-untrusted-action - [{:keys [public-key] :as item}] + [{:keys [public-key primary-name] :as item}] (hide-sheet-and-dispatch [:show-bottom-sheet {:content (fn [] @@ -142,7 +142,13 @@ :context item :accessibility-label :block-user :button-text (i18n/label :t/mark-as-untrusted-button) - :on-press #(print "Not implemented")}])}])) + :on-press #(hide-sheet-and-dispatch + [:contact/mark-as-untrusted + public-key primary-name])}])}])) + +(defn remove-untrusted-mark-action + [{:keys [public-key primary-name]}] + (hide-sheet-and-dispatch [:contact/remove-trust-status public-key primary-name])) (defn mute-chat-entry [chat-id chat-type muted-till] @@ -314,17 +320,22 @@ :sub-label nil :chevron? false})) -(defn mark-untrustworthy-entry - [item] - (entry {:icon :i/untrustworthy - :label (i18n/label :t/mark-as-untrusted) - ;; :on-press #(js/alert "TODO: to be implemented, requires status-go impl.") - :on-press #(mark-as-untrusted-action item) - :danger? true - :accessibility-label :mark-as-untrusted - :sub-label nil - :chevron? false - :add-divider? true})) +(defn change-trust-status-entry + [{:keys [trust-status] :as item}] + (let [handle-press (if (= trust-status + constants/contact-trust-status-untrustworthy) + remove-untrusted-mark-action + mark-as-untrusted-action)] + (entry {:icon :i/untrustworthy + :label (i18n/label (if (= trust-status + constants/contact-trust-status-untrustworthy) + :t/remove-untrusted-mark + :t/mark-as-untrusted)) + :on-press #(handle-press item) + :danger? true + :accessibility-label :mark-as-untrusted + :sub-label nil + :chevron? false}))) (defn block-user-entry [item] @@ -460,7 +471,7 @@ (show-qr-entry public-key) (share-profile-entry public-key)] [(when-not (= current-pub-key public-key) - (mark-untrustworthy-entry contact)) + (change-trust-status-entry contact)) (when added? (remove-from-contacts-entry contact)) (when-not (= current-pub-key public-key) (block-user-entry contact))] (when (and admin? chat-id) diff --git a/src/status_im/constants.cljs b/src/status_im/constants.cljs index 90ca9497148..d9b276069b8 100644 --- a/src/status_im/constants.cljs +++ b/src/status_im/constants.cljs @@ -495,3 +495,8 @@ ;; Community help links (def ^:const create-community-help-url "https://status.app/help/communities/create-a-status-community#create-a-status-community") + +;; Contact trust status +(def ^:const contact-trust-status-unknown 0) +(def ^:const contact-trust-status-trusted 1) +(def ^:const contact-trust-status-untrustworthy 2) diff --git a/src/status_im/contexts/chat/contacts/events.cljs b/src/status_im/contexts/chat/contacts/events.cljs index 046166035d0..80f5d9f7c32 100644 --- a/src/status_im/contexts/chat/contacts/events.cljs +++ b/src/status_im/contexts/chat/contacts/events.cljs @@ -22,6 +22,7 @@ :last-updated (oops/oget js-contact "lastUpdated") :active? (oops/oget js-contact "active") :blocked? (oops/oget js-contact "blocked") + :trust-status (oops/oget js-contact "trustStatus") :added? (oops/oget js-contact "added") :has-added-us? (oops/oget js-contact "hasAddedUs") :mutual? (oops/oget js-contact "mutual") diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs new file mode 100644 index 00000000000..e443a49c40b --- /dev/null +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -0,0 +1,43 @@ +(ns status-im.contexts.contact.trust.events + (:require + [re-frame.core :as re-frame] + [status-im.constants :as constants] + [taoensso.timbre :as log] + [utils.i18n :as i18n] + [utils.re-frame :as rf])) + +(rf/reg-event-fx :contact/mark-as-untrusted-success + (fn [{:keys [db]} [contact-id name]] + {:db (update-in db + [:contacts/contacts contact-id] + #(assoc % :trust-status constants/contact-trust-status-untrustworthy)) + :dispatch + [:toasts/upsert + {:type :positive + :text (i18n/label :t/marked-as-untrusted {:username name})}]})) + +(rf/reg-event-fx :contact/mark-as-untrusted + (fn [_ [contact-id name]] + {:json-rpc/call + [{:method "wakuext_markAsUntrustworthy" + :params [contact-id] + :on-success #(re-frame/dispatch [:contact/mark-as-untrusted-success contact-id name]) + :on-error #(log/error "failed mark contact as untrusted" % contact-id)}]})) + +(rf/reg-event-fx :contact/remove-trust-status-success + (fn [{:keys [db]} [contact-id name]] + {:db (update-in db + [:contacts/contacts contact-id] + #(assoc % :trust-status constants/contact-trust-status-unknown)) + :dispatch + [:toasts/upsert + {:type :positive + :text (i18n/label :t/trust-mark-removed {:username name})}]})) + +(rf/reg-event-fx :contact/remove-trust-status + (fn [_ [contact-id name]] + {:json-rpc/call + [{:method "wakuext_removeTrustStatus" + :params [contact-id] + :on-success #(re-frame/dispatch [:contact/remove-trust-status-success contact-id name]) + :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) diff --git a/src/status_im/events.cljs b/src/status_im/events.cljs index 4d0dd09e4e9..bd432b70c2e 100644 --- a/src/status_im/events.cljs +++ b/src/status_im/events.cljs @@ -27,6 +27,7 @@ status-im.contexts.communities.overview.events status-im.contexts.communities.sharing.events status-im.contexts.contact.blocking.events + status-im.contexts.contact.trust.events status-im.contexts.keycard.change-pin.events status-im.contexts.keycard.effects status-im.contexts.keycard.events diff --git a/translations/en.json b/translations/en.json index 6ebf891bffb..e952026fb45 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1627,6 +1627,7 @@ "mark-as-untrusted-button": "Mark", "mark-as-untrusted-description": "{{username}} will be marked as untrusted. This mark will only be visible to you.", "mark-user-untrustworthy": "Mark {{username}} as untrustworthy", + "marked-as-untrusted": "{{username}} is marked as untrusted", "market": "Market", "market-cap": "Market cap", "master-account": "Master account", @@ -2259,6 +2260,7 @@ "remove-saved-address": "Remove saved address", "remove-saved-address-description": "Transaction history relating to this address will no longer be labelled ‘{{name}}’.", "remove-token": "Remove token", + "remove-untrusted-mark": "Remove untrusted mark", "remove-user-from-group": "Remove {{username}} from the group", "remove-watched-address-desc": "The watched address will be removed from all of your synced devices.", "remove-watched-address-title": "Remove watched address", @@ -2781,6 +2783,7 @@ "tribute-to-talk-tribute-received2": " are now contacts and can securely chat with each other.", "tribute-to-talk-you-require-snt": "You require SNT for new people to start a chat.", "trip-accounts": "Trip accounts", + "trust-mark-removed": "Trust mark removed for {{username}}", "try-again": "Try again", "try-keeping-the-card-still": "Try keeping the card still", "try-to-search-something-else": "Try to search something else", From cc72533c113fb3ba87ad7a9bb20b1ec086c6cba2 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 1 May 2025 14:16:28 +0530 Subject: [PATCH 04/20] Show trust mark in contacts --- src/status_im/common/contact_list_item/view.cljs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/status_im/common/contact_list_item/view.cljs b/src/status_im/common/contact_list_item/view.cljs index 90b88c5589c..d9dfe1acfef 100644 --- a/src/status_im/common/contact_list_item/view.cljs +++ b/src/status_im/common/contact_list_item/view.cljs @@ -1,16 +1,18 @@ (ns status-im.common.contact-list-item.view (:require [quo.core :as quo] + [status-im.constants :as constants] [utils.address :as address] [utils.re-frame :as rf])) (defn contact-list-item [{:keys [on-press on-long-press accessory allow-multiple-presses? disabled?]} {:keys [primary-name secondary-name public-key compressed-key ens-verified added? - container-style]} + container-style trust-status]} theme] (let [photo-path (rf/sub [:chats/photo-path public-key]) online? (rf/sub [:visibility-status-updates/online? public-key]) + untrustworthy? (= constants/contact-trust-status-untrustworthy trust-status) customization-color (rf/sub [:profile/customization-color])] [quo/user {:customization-color customization-color @@ -23,6 +25,7 @@ :online? online? :verified? ens-verified :contact? added? + :untrustworthy? untrustworthy? :on-press on-press :on-long-press on-long-press :accessory accessory From 491e25e526c3bf46974ea6e1f3870b05b3d5d1e1 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 1 May 2025 14:37:59 +0530 Subject: [PATCH 05/20] Add divider --- src/status_im/common/home/actions/view.cljs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index 5ed32f0e8db..0e1778f9cf2 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -333,6 +333,7 @@ :t/mark-as-untrusted)) :on-press #(handle-press item) :danger? true + :add-divider? true :accessibility-label :mark-as-untrusted :sub-label nil :chevron? false}))) From ef38681155db49a07b59d5c02b964fa488c50bc2 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Mon, 5 May 2025 14:01:38 +0530 Subject: [PATCH 06/20] remove from contacts option --- src/status_im/common/home/actions/view.cljs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index 0e1778f9cf2..349978e579c 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -132,6 +132,7 @@ (defn mark-as-untrusted-action [{:keys [public-key primary-name] :as item}] + (tap> item) (hide-sheet-and-dispatch [:show-bottom-sheet {:content (fn [] @@ -139,6 +140,15 @@ {:title (i18n/label :t/mark-as-untrusted) :description (i18n/label :t/mark-as-untrusted-description {:username (:primary-name item)}) + :extra-action (fn [] + (rf/dispatch [:toasts/upsert + {:id :remove-contact + :type :positive + :text (->> (i18n/label :t/removed-from-contacts) + (string/lower-case) + (str primary-name " "))}]) + (rf/dispatch [:contact.ui/remove-contact-pressed item])) + :extra-text (i18n/label :t/remove-contact) :context item :accessibility-label :block-user :button-text (i18n/label :t/mark-as-untrusted-button) From b13567074c940e9297c9dd00d6b5243e91f8f0f2 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 12:42:35 +0530 Subject: [PATCH 07/20] move mark as untrusted confirmation drawer to event --- src/status_im/common/home/actions/view.cljs | 25 ++-------------- .../contexts/contact/trust/events.cljs | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index 349978e579c..0d84605dbb8 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -131,30 +131,9 @@ public-key])}])}])) (defn mark-as-untrusted-action - [{:keys [public-key primary-name] :as item}] - (tap> item) + [item] (hide-sheet-and-dispatch - [:show-bottom-sheet - {:content (fn [] - [confirmation-drawer/confirmation-drawer - {:title (i18n/label :t/mark-as-untrusted) - :description (i18n/label :t/mark-as-untrusted-description - {:username (:primary-name item)}) - :extra-action (fn [] - (rf/dispatch [:toasts/upsert - {:id :remove-contact - :type :positive - :text (->> (i18n/label :t/removed-from-contacts) - (string/lower-case) - (str primary-name " "))}]) - (rf/dispatch [:contact.ui/remove-contact-pressed item])) - :extra-text (i18n/label :t/remove-contact) - :context item - :accessibility-label :block-user - :button-text (i18n/label :t/mark-as-untrusted-button) - :on-press #(hide-sheet-and-dispatch - [:contact/mark-as-untrusted - public-key primary-name])}])}])) + [:contact/mark-as-untrusted-sheet item])) (defn remove-untrusted-mark-action [{:keys [public-key primary-name]}] diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index e443a49c40b..f0a30f06914 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -1,6 +1,8 @@ (ns status-im.contexts.contact.trust.events (:require + [clojure.string :as string] [re-frame.core :as re-frame] + [status-im.common.confirmation-drawer.view :as confirmation-drawer] [status-im.constants :as constants] [taoensso.timbre :as log] [utils.i18n :as i18n] @@ -41,3 +43,30 @@ :params [contact-id] :on-success #(re-frame/dispatch [:contact/remove-trust-status-success contact-id name]) :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) + +(rf/reg-event-fx :contact/mark-as-untrusted-sheet + (fn [_ [public-key primary-name] :as item] + {:dispatch + [:show-bottom-sheet + {:content (fn [] + [confirmation-drawer/confirmation-drawer + {:title (i18n/label :t/mark-as-untrusted) + :description (i18n/label :t/mark-as-untrusted-description + {:username (:primary-name item)}) + :extra-action (fn [] + (rf/dispatch [:toasts/upsert + {:id :remove-contact + :type :positive + :text (->> (i18n/label :t/removed-from-contacts) + (string/lower-case) + (str primary-name " "))}]) + (rf/dispatch [:contact.ui/remove-contact-pressed item])) + :extra-text (i18n/label :t/remove-contact) + :context item + :accessibility-label :block-user + :button-text (i18n/label :t/mark-as-untrusted-button) + :on-press (fn [] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch + [:contact/mark-as-untrusted + public-key primary-name]))}])}]})) From bca695a133fae5b91b71112715cfd3d7c0cb072e Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 13:13:33 +0530 Subject: [PATCH 08/20] show trust status in chat list --- src/status_im/contexts/chat/home/chat_list_item/view.cljs | 5 ++++- src/status_im/contexts/contact/trust/events.cljs | 2 +- src/status_im/subs/contact.cljs | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/status_im/contexts/chat/home/chat_list_item/view.cljs b/src/status_im/contexts/chat/home/chat_list_item/view.cljs index 567b7bb2394..9b215356b58 100644 --- a/src/status_im/contexts/chat/home/chat_list_item/view.cljs +++ b/src/status_im/contexts/chat/home/chat_list_item/view.cljs @@ -249,7 +249,9 @@ (rf/sub [:contacts/contact-two-names-by-identity chat-id])) {:keys [ens-verified added?] :as contact} (when-not group-chat (rf/sub [:contacts/contact-by-address chat-id])) - unread-messages? (pos? unviewed-messages-count)] + unread-messages? (pos? unviewed-messages-count) + trust-status (rf/sub [:contacts/contact-trust-status chat-id]) + untrustworthy? (= constants/contact-trust-status-untrustworthy trust-status)] [rn/view {:style {:flex-direction :row}} [avatar-view {:contact contact @@ -266,6 +268,7 @@ :verified? ens-verified :contact? added? :muted? muted + :untrustworthy? untrustworthy? :time-str (datetime/to-short-str timestamp) :style {:flex-shrink 1}}] [last-message-preview group-chat last-message muted unread-messages?]]] diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index f0a30f06914..72609ed9f7b 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -45,7 +45,7 @@ :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) (rf/reg-event-fx :contact/mark-as-untrusted-sheet - (fn [_ [public-key primary-name] :as item] + (fn [_ {:keys [public-key primary-name] :as item}] {:dispatch [:show-bottom-sheet {:content (fn [] diff --git a/src/status_im/subs/contact.cljs b/src/status_im/subs/contact.cljs index 093a4630674..a65131e644d 100644 --- a/src/status_im/subs/contact.cljs +++ b/src/status_im/subs/contact.cljs @@ -302,3 +302,10 @@ (seq admins) (assoc :owner {:title (i18n/label :t/owner) :data admins}) (seq online) (assoc :online {:title (i18n/label :t/online) :data online}) (seq offline) (assoc :offline {:title (i18n/label :t/offline) :data offline})))))) + +(re-frame/reg-sub + :contacts/contact-trust-status + (fn [[_ chat-id]] + [(re-frame/subscribe [:contacts/contact-by-identity chat-id])]) + (fn [[contact]] + (get contact :trust-status constants/contact-trust-status-unknown))) From 8757c5fd6ff2246e17396c1b548ce119bbb75ef1 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 13:40:59 +0530 Subject: [PATCH 09/20] trust mark in profile page --- .../text_combinations/username/view.cljs | 14 ++++++------- .../profile/contact/actions/view.cljs | 7 +++++-- .../contexts/profile/contact/header/view.cljs | 20 ++++++++++++------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/quo/components/text_combinations/username/view.cljs b/src/quo/components/text_combinations/username/view.cljs index 33529d9c997..81dea268fb6 100644 --- a/src/quo/components/text_combinations/username/view.cljs +++ b/src/quo/components/text_combinations/username/view.cljs @@ -40,17 +40,17 @@ :color (colors/resolve-color color theme)}])) (defn status-icon - [{:keys [theme name-type status] + [{:keys [name-type status] :or {name-type :default}}] [rn/view {:style (style/status-icon-container name-type status)} (case status - :verified [icon-20 :i/verified theme :success] - :contact [icon-20 :i/contact theme :blue] - :untrustworthy [icon-20 :i/untrustworthy theme :danger] - :blocked [icon-20 :i/block theme :danger] + :verified [icon-20 :i/verified :success] + :contact [icon-20 :i/contact :blue] + :untrustworthy [icon-20 :i/untrustworthy :danger] + :blocked [icon-20 :i/block :danger] :untrustworthy-contact [:<> - [icon-20 :i/untrustworthy theme :danger] - [icon-20 :i/contact theme :blue]] + [icon-20 :i/untrustworthy :danger] + [icon-20 :i/contact :blue]] nil)]) (defn view diff --git a/src/status_im/contexts/profile/contact/actions/view.cljs b/src/status_im/contexts/profile/contact/actions/view.cljs index 326f526dbf2..5dc16aa2e48 100644 --- a/src/status_im/contexts/profile/contact/actions/view.cljs +++ b/src/status_im/contexts/profile/contact/actions/view.cljs @@ -24,7 +24,7 @@ (defn view [] - (let [{:keys [nickname public-key contact-request-state blocked?] + (let [{:keys [nickname public-key contact-request-state blocked? trust-status] :as contact} (rf/sub [:contacts/current-contact]) full-name (profile.utils/displayed-name contact) on-remove-nickname (rn/use-callback @@ -87,7 +87,10 @@ :accessibility-label :remove-nickname :danger? true}) {:icon :i/untrustworthy - :label (i18n/label :t/mark-as-untrusted) + :label (i18n/label (if (= trust-status + constants/contact-trust-status-untrustworthy) + :t/remove-untrusted-mark + :t/mark-as-untrusted)) :on-press not-implemented/alert :accessibility-label :mark-as-untrusted :add-divider? (when-not has-nickname? true) diff --git a/src/status_im/contexts/profile/contact/header/view.cljs b/src/status_im/contexts/profile/contact/header/view.cljs index 462ee764b7f..1cda0c303ee 100644 --- a/src/status_im/contexts/profile/contact/header/view.cljs +++ b/src/status_im/contexts/profile/contact/header/view.cljs @@ -26,7 +26,7 @@ (defn view [{:keys [scroll-y]}] (let [{:keys [public-key customization-color ens-name nickname secondary-name - emoji-hash bio blocked? contact-request-state] + emoji-hash bio blocked? contact-request-state trust-status] :as contact} (rf/sub [:contacts/current-contact]) customization-color (or customization-color constants/profile-default-color) full-name (profile.utils/displayed-name contact) @@ -35,12 +35,18 @@ theme (quo.context/use-theme) contact-status (rn/use-memo (fn [] - (cond - (= contact-request-state - constants/contact-request-state-mutual) :contact - blocked? :blocked - :else nil)) - [blocked? contact-request-state]) + (let [is-contact? (= contact-request-state + constants/contact-request-state-mutual) + is-untrustworthy? (= trust-status + constants/contact-trust-status-untrustworthy)] + (cond + (and is-contact? + is-untrustworthy?) :untrustworthy-contact + blocked? :blocked + is-contact? :contact + is-untrustworthy? :untrustworthy + :else nil))) + [blocked? contact-request-state trust-status]) on-start-chat (rn/use-callback #(rf/dispatch [:chat.ui/start-chat public-key ens-name]) [ens-name public-key]) From bbfdd7fc2f95b6d10381950460a1c96e06fd633d Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 14:05:35 +0530 Subject: [PATCH 10/20] mark untrusted option in contact screen --- .../contexts/contact/trust/events.cljs | 3 +- .../profile/contact/actions/view.cljs | 96 +++++++++++-------- 2 files changed, 57 insertions(+), 42 deletions(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 72609ed9f7b..e9c273febb4 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -45,10 +45,11 @@ :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) (rf/reg-event-fx :contact/mark-as-untrusted-sheet - (fn [_ {:keys [public-key primary-name] :as item}] + (fn [_ [{:keys [public-key primary-name] :as item}]] {:dispatch [:show-bottom-sheet {:content (fn [] + (tap> item) [confirmation-drawer/confirmation-drawer {:title (i18n/label :t/mark-as-untrusted) :description (i18n/label :t/mark-as-untrusted-description diff --git a/src/status_im/contexts/profile/contact/actions/view.cljs b/src/status_im/contexts/profile/contact/actions/view.cljs index 5dc16aa2e48..9085949f5b6 100644 --- a/src/status_im/contexts/profile/contact/actions/view.cljs +++ b/src/status_im/contexts/profile/contact/actions/view.cljs @@ -2,7 +2,6 @@ (:require [clojure.string :as string] [quo.core :as quo] [react-native.core :as rn] - [status-im.common.not-implemented :as not-implemented] [status-im.constants :as constants] [status-im.contexts.profile.contact.add-nickname.view :as add-nickname] [status-im.contexts.profile.contact.block-contact.view :as block-contact] @@ -10,6 +9,11 @@ [utils.i18n :as i18n] [utils.re-frame :as rf])) +(defn hide-sheet-and-dispatch + [event] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch event)) + (defn on-add-nickname [] (rf/dispatch [:show-bottom-sheet @@ -25,43 +29,54 @@ (defn view [] (let [{:keys [nickname public-key contact-request-state blocked? trust-status] - :as contact} (rf/sub [:contacts/current-contact]) - full-name (profile.utils/displayed-name contact) - on-remove-nickname (rn/use-callback - (fn [] - (rf/dispatch [:hide-bottom-sheet]) - (rf/dispatch [:toasts/upsert - {:id :remove-nickname - :type :positive - :text (i18n/label :t/nickname-removed)}]) - (rf/dispatch [:contacts/update-nickname public-key ""])) - [public-key]) - on-show-qr (rn/use-callback - (fn [] - (rf/dispatch [:universal-links/generate-profile-url - {:public-key public-key - :on-success #(rf/dispatch [:open-modal - :screen/share-contact])}])) - [public-key]) - has-nickname? (rn/use-memo (fn [] (not (string/blank? nickname))) [nickname]) - on-share-profile (rn/use-callback - (fn [] - (rf/dispatch [:universal-links/generate-profile-url - {:public-key public-key - :on-success #(rf/dispatch [:open-share - {:options {:message %}}])}])) - [public-key]) - on-remove-contact (rn/use-callback - (fn [] - (rf/dispatch [:hide-bottom-sheet]) - (rf/dispatch [:toasts/upsert - {:id :remove-contact - :type :positive - :text (->> (i18n/label :t/removed-from-contacts) - (string/lower-case) - (str full-name " "))}]) - (rf/dispatch [:contact.ui/remove-contact-pressed contact])) - [public-key full-name])] + :as contact} (rf/sub [:contacts/current-contact]) + full-name (profile.utils/displayed-name contact) + on-remove-nickname (rn/use-callback + (fn [] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch [:toasts/upsert + {:id :remove-nickname + :type :positive + :text (i18n/label :t/nickname-removed)}]) + (rf/dispatch [:contacts/update-nickname public-key ""])) + [public-key]) + on-show-qr (rn/use-callback + (fn [] + (rf/dispatch [:universal-links/generate-profile-url + {:public-key public-key + :on-success #(rf/dispatch [:open-modal + :screen/share-contact])}])) + [public-key]) + has-nickname? (rn/use-memo (fn [] (not (string/blank? nickname))) [nickname]) + on-share-profile (rn/use-callback + (fn [] + (rf/dispatch [:universal-links/generate-profile-url + {:public-key public-key + :on-success #(rf/dispatch [:open-share + {:options {:message %}}])}])) + [public-key]) + untrustworthy? (rn/use-memo (fn [] + (= trust-status + constants/contact-trust-status-untrustworthy)) + [trust-status]) + on-trust-mark-press (rn/use-callback + (fn [] + (hide-sheet-and-dispatch + (if untrustworthy? + [:contact/remove-trust-status public-key full-name] + [:contact/mark-as-untrusted-sheet contact]))) + [untrustworthy? contact]) + on-remove-contact (rn/use-callback + (fn [] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch [:toasts/upsert + {:id :remove-contact + :type :positive + :text (->> (i18n/label :t/removed-from-contacts) + (string/lower-case) + (str full-name " "))}]) + (rf/dispatch [:contact.ui/remove-contact-pressed contact])) + [public-key full-name])] [quo/action-drawer [(concat [{:icon :i/edit @@ -87,11 +102,10 @@ :accessibility-label :remove-nickname :danger? true}) {:icon :i/untrustworthy - :label (i18n/label (if (= trust-status - constants/contact-trust-status-untrustworthy) + :label (i18n/label (if untrustworthy? :t/remove-untrusted-mark :t/mark-as-untrusted)) - :on-press not-implemented/alert + :on-press on-trust-mark-press :accessibility-label :mark-as-untrusted :add-divider? (when-not has-nickname? true) :danger? true} From 048b7ac81cc06e46ca2c9394be3f5fcd8a545673 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 14:28:12 +0530 Subject: [PATCH 11/20] self reivew changes --- .../common/confirmation_drawer/style.cljs | 4 ++ .../common/confirmation_drawer/view.cljs | 2 +- .../common/contact_list_item/view.cljs | 6 ++- src/status_im/common/home/actions/view.cljs | 39 ++++++++----------- .../chat/home/chat_list_item/view.cljs | 5 ++- .../contexts/contact/trust/events.cljs | 3 +- .../profile/contact/actions/view.cljs | 2 +- .../contexts/profile/contact/header/view.cljs | 20 +++++----- 8 files changed, 43 insertions(+), 38 deletions(-) diff --git a/src/status_im/common/confirmation_drawer/style.cljs b/src/status_im/common/confirmation_drawer/style.cljs index 8bcaecbbeaf..a4086a5b77e 100644 --- a/src/status_im/common/confirmation_drawer/style.cljs +++ b/src/status_im/common/confirmation_drawer/style.cljs @@ -4,3 +4,7 @@ {:flex-direction :row :justify-content :space-between :margin-top 25}) + +(def context-tag + {:margin-bottom 12 + :margin-top 4}) diff --git a/src/status_im/common/confirmation_drawer/view.cljs b/src/status_im/common/confirmation_drawer/view.cljs index e3dad9b7e4f..20a3e4ab813 100644 --- a/src/status_im/common/confirmation_drawer/view.cljs +++ b/src/status_im/common/confirmation_drawer/view.cljs @@ -49,7 +49,7 @@ :full-name display-name :group-name display-name :customization-color color - :container-style {:margin-bottom 12 :margin-top 4} + :container-style style/context-tag :size 24}] [quo/text description] [extra-action-view extra-action extra-text extra-action-selected?] diff --git a/src/status_im/common/contact_list_item/view.cljs b/src/status_im/common/contact_list_item/view.cljs index d9dfe1acfef..33d1a67ea64 100644 --- a/src/status_im/common/contact_list_item/view.cljs +++ b/src/status_im/common/contact_list_item/view.cljs @@ -1,6 +1,7 @@ (ns status-im.common.contact-list-item.view (:require [quo.core :as quo] + [react-native.core :as rn] [status-im.constants :as constants] [utils.address :as address] [utils.re-frame :as rf])) @@ -12,7 +13,10 @@ theme] (let [photo-path (rf/sub [:chats/photo-path public-key]) online? (rf/sub [:visibility-status-updates/online? public-key]) - untrustworthy? (= constants/contact-trust-status-untrustworthy trust-status) + untrustworthy? (rn/use-memo + (fn [] + (= constants/contact-trust-status-untrustworthy trust-status)) + [trust-status]) customization-color (rf/sub [:profile/customization-color])] [quo/user {:customization-color customization-color diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index 0d84605dbb8..e9784ff37d0 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -130,14 +130,13 @@ :on-press #(hide-sheet-and-dispatch [:contact/block-contact public-key])}])}])) -(defn mark-as-untrusted-action - [item] +(defn handle-trust-mark-action + [{:keys [public-key primary-name trust-status] :as item}] (hide-sheet-and-dispatch - [:contact/mark-as-untrusted-sheet item])) - -(defn remove-untrusted-mark-action - [{:keys [public-key primary-name]}] - (hide-sheet-and-dispatch [:contact/remove-trust-status public-key primary-name])) + (if (= trust-status + constants/contact-trust-status-untrustworthy) + [:contact/remove-trust-status public-key primary-name] + [:contact/mark-as-untrusted-sheet item]))) (defn mute-chat-entry [chat-id chat-type muted-till] @@ -311,21 +310,17 @@ (defn change-trust-status-entry [{:keys [trust-status] :as item}] - (let [handle-press (if (= trust-status - constants/contact-trust-status-untrustworthy) - remove-untrusted-mark-action - mark-as-untrusted-action)] - (entry {:icon :i/untrustworthy - :label (i18n/label (if (= trust-status - constants/contact-trust-status-untrustworthy) - :t/remove-untrusted-mark - :t/mark-as-untrusted)) - :on-press #(handle-press item) - :danger? true - :add-divider? true - :accessibility-label :mark-as-untrusted - :sub-label nil - :chevron? false}))) + (entry {:icon :i/untrustworthy + :label (i18n/label (if (= trust-status + constants/contact-trust-status-untrustworthy) + :t/remove-untrusted-mark + :t/mark-as-untrusted)) + :on-press #(handle-trust-mark-action item) + :danger? true + :add-divider? true + :accessibility-label :mark-as-untrusted + :sub-label nil + :chevron? false})) (defn block-user-entry [item] diff --git a/src/status_im/contexts/chat/home/chat_list_item/view.cljs b/src/status_im/contexts/chat/home/chat_list_item/view.cljs index 9b215356b58..42f8965b1ea 100644 --- a/src/status_im/contexts/chat/home/chat_list_item/view.cljs +++ b/src/status_im/contexts/chat/home/chat_list_item/view.cljs @@ -251,7 +251,10 @@ (rf/sub [:contacts/contact-by-address chat-id])) unread-messages? (pos? unviewed-messages-count) trust-status (rf/sub [:contacts/contact-trust-status chat-id]) - untrustworthy? (= constants/contact-trust-status-untrustworthy trust-status)] + untrustworthy? (rn/use-memo + (fn [] + (= constants/contact-trust-status-untrustworthy trust-status)) + [trust-status])] [rn/view {:style {:flex-direction :row}} [avatar-view {:contact contact diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index e9c273febb4..3a08f10df7b 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -49,7 +49,6 @@ {:dispatch [:show-bottom-sheet {:content (fn [] - (tap> item) [confirmation-drawer/confirmation-drawer {:title (i18n/label :t/mark-as-untrusted) :description (i18n/label :t/mark-as-untrusted-description @@ -64,7 +63,7 @@ (rf/dispatch [:contact.ui/remove-contact-pressed item])) :extra-text (i18n/label :t/remove-contact) :context item - :accessibility-label :block-user + :accessibility-label :mark-as-untrustworthy :button-text (i18n/label :t/mark-as-untrusted-button) :on-press (fn [] (rf/dispatch [:hide-bottom-sheet]) diff --git a/src/status_im/contexts/profile/contact/actions/view.cljs b/src/status_im/contexts/profile/contact/actions/view.cljs index 9085949f5b6..48f7b058c92 100644 --- a/src/status_im/contexts/profile/contact/actions/view.cljs +++ b/src/status_im/contexts/profile/contact/actions/view.cljs @@ -65,7 +65,7 @@ (if untrustworthy? [:contact/remove-trust-status public-key full-name] [:contact/mark-as-untrusted-sheet contact]))) - [untrustworthy? contact]) + [untrustworthy? contact full-name public-key]) on-remove-contact (rn/use-callback (fn [] (rf/dispatch [:hide-bottom-sheet]) diff --git a/src/status_im/contexts/profile/contact/header/view.cljs b/src/status_im/contexts/profile/contact/header/view.cljs index 1cda0c303ee..2360b5a23fd 100644 --- a/src/status_im/contexts/profile/contact/header/view.cljs +++ b/src/status_im/contexts/profile/contact/header/view.cljs @@ -35,17 +35,17 @@ theme (quo.context/use-theme) contact-status (rn/use-memo (fn [] - (let [is-contact? (= contact-request-state - constants/contact-request-state-mutual) - is-untrustworthy? (= trust-status - constants/contact-trust-status-untrustworthy)] + (let [contact? (= contact-request-state + constants/contact-request-state-mutual) + untrustworthy? (= trust-status + constants/contact-trust-status-untrustworthy)] (cond - (and is-contact? - is-untrustworthy?) :untrustworthy-contact - blocked? :blocked - is-contact? :contact - is-untrustworthy? :untrustworthy - :else nil))) + (and contact? + untrustworthy?) :untrustworthy-contact + blocked? :blocked + contact? :contact + untrustworthy? :untrustworthy + :else nil))) [blocked? contact-request-state trust-status]) on-start-chat (rn/use-callback #(rf/dispatch [:chat.ui/start-chat public-key ens-name]) From 0c2beac4c7de2fc811e9609675f2e2fda9830a6f Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 14:46:43 +0530 Subject: [PATCH 12/20] handle names properly --- src/status_im/common/home/actions/view.cljs | 8 +-- .../contexts/contact/trust/events.cljs | 55 ++++++++++--------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index e9784ff37d0..0960f7ebf88 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -11,7 +11,8 @@ [status-im.contexts.chat.contacts.drawers.nickname-drawer.view :as nickname-drawer] [status-im.contexts.communities.actions.chat.view :as communities-chat-actions] [utils.i18n :as i18n] - [utils.re-frame :as rf])) + [utils.re-frame :as rf] + [status-im.contexts.profile.utils :as profile.utils])) (defn- entry [{:keys [icon label on-press danger? sub-label chevron? add-divider? accessibility-label]}] @@ -131,11 +132,11 @@ public-key])}])}])) (defn handle-trust-mark-action - [{:keys [public-key primary-name trust-status] :as item}] + [{:keys [public-key trust-status] :as item}] (hide-sheet-and-dispatch (if (= trust-status constants/contact-trust-status-untrustworthy) - [:contact/remove-trust-status public-key primary-name] + [:contact/remove-trust-status public-key (profile.utils/displayed-name item)] [:contact/mark-as-untrusted-sheet item]))) (defn mute-chat-entry @@ -447,7 +448,6 @@ (defn contact-actions [{:keys [public-key added?] :as contact} {:keys [chat-id admin?] :as extra-data}] - (tap> contact) (let [current-pub-key (rf/sub [:multiaccount/public-key])] [quo/action-drawer [[(view-profile-entry public-key) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 3a08f10df7b..72cc5d496f1 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -6,7 +6,8 @@ [status-im.constants :as constants] [taoensso.timbre :as log] [utils.i18n :as i18n] - [utils.re-frame :as rf])) + [utils.re-frame :as rf] + [status-im.contexts.profile.utils :as profile.utils])) (rf/reg-event-fx :contact/mark-as-untrusted-success (fn [{:keys [db]} [contact-id name]] @@ -45,28 +46,30 @@ :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) (rf/reg-event-fx :contact/mark-as-untrusted-sheet - (fn [_ [{:keys [public-key primary-name] :as item}]] - {:dispatch - [:show-bottom-sheet - {:content (fn [] - [confirmation-drawer/confirmation-drawer - {:title (i18n/label :t/mark-as-untrusted) - :description (i18n/label :t/mark-as-untrusted-description - {:username (:primary-name item)}) - :extra-action (fn [] - (rf/dispatch [:toasts/upsert - {:id :remove-contact - :type :positive - :text (->> (i18n/label :t/removed-from-contacts) - (string/lower-case) - (str primary-name " "))}]) - (rf/dispatch [:contact.ui/remove-contact-pressed item])) - :extra-text (i18n/label :t/remove-contact) - :context item - :accessibility-label :mark-as-untrustworthy - :button-text (i18n/label :t/mark-as-untrusted-button) - :on-press (fn [] - (rf/dispatch [:hide-bottom-sheet]) - (rf/dispatch - [:contact/mark-as-untrusted - public-key primary-name]))}])}]})) + (fn [_ [{:keys [public-key] :as contact}]] + (let [name (profile.utils/displayed-name contact)] + {:dispatch + [:show-bottom-sheet + {:content (fn [] + [confirmation-drawer/confirmation-drawer + {:title (i18n/label :t/mark-as-untrusted) + :description (i18n/label :t/mark-as-untrusted-description + {:username (:primary-name contact)}) + :extra-action (fn [] + (rf/dispatch [:toasts/upsert + {:id :remove-contact + :type :positive + :text (->> (i18n/label + :t/removed-from-contacts) + (string/lower-case) + (str name " "))}]) + (rf/dispatch [:contact.ui/remove-contact-pressed contact])) + :extra-text (i18n/label :t/remove-contact) + :context contact + :accessibility-label :mark-as-untrustworthy + :button-text (i18n/label :t/mark-as-untrusted-button) + :on-press (fn [] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch + [:contact/mark-as-untrusted + public-key name]))}])}]}))) From 93a61d5e2e64dd6072959d77e96f63f38e70fcd0 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 15:29:55 +0530 Subject: [PATCH 13/20] Decline contact request option --- .../contexts/contact/trust/events.cljs | 57 +++++++++++-------- translations/en.json | 1 + 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 72cc5d496f1..6348c806526 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -46,30 +46,41 @@ :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) (rf/reg-event-fx :contact/mark-as-untrusted-sheet - (fn [_ [{:keys [public-key] :as contact}]] - (let [name (profile.utils/displayed-name contact)] + (fn [_ [{:keys [public-key contact-request-state] :as contact}]] + (let [name (profile.utils/displayed-name contact) + contact? (= contact-request-state + constants/contact-request-state-mutual) + request? (= contact-request-state + constants/contact-request-state-received)] {:dispatch [:show-bottom-sheet {:content (fn [] [confirmation-drawer/confirmation-drawer - {:title (i18n/label :t/mark-as-untrusted) - :description (i18n/label :t/mark-as-untrusted-description - {:username (:primary-name contact)}) - :extra-action (fn [] - (rf/dispatch [:toasts/upsert - {:id :remove-contact - :type :positive - :text (->> (i18n/label - :t/removed-from-contacts) - (string/lower-case) - (str name " "))}]) - (rf/dispatch [:contact.ui/remove-contact-pressed contact])) - :extra-text (i18n/label :t/remove-contact) - :context contact - :accessibility-label :mark-as-untrustworthy - :button-text (i18n/label :t/mark-as-untrusted-button) - :on-press (fn [] - (rf/dispatch [:hide-bottom-sheet]) - (rf/dispatch - [:contact/mark-as-untrusted - public-key name]))}])}]}))) + (merge {:title (i18n/label :t/mark-as-untrusted) + :description (i18n/label :t/mark-as-untrusted-description + {:username (:primary-name contact)}) + :context contact + :accessibility-label :mark-as-untrustworthy + :button-text (i18n/label :t/mark-as-untrusted-button) + :on-press (fn [] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch + [:contact/mark-as-untrusted + public-key name]))} + (cond + contact? + {:extra-action (fn [] + (rf/dispatch [:toasts/upsert + {:id :remove-contact + :type :positive + :text (->> (i18n/label + :t/removed-from-contacts) + (string/lower-case) + (str name " "))}]) + (rf/dispatch [:contact.ui/remove-contact-pressed contact])) + :extra-text (i18n/label :t/remove-contact)} + request? + {:extra-action (fn [] + (rf/dispatch [:activity-center.contact-requests/decline + public-key])) + :extra-text (i18n/label :t/decline-contact-request)}))])}]}))) diff --git a/translations/en.json b/translations/en.json index e952026fb45..1177bbba0a1 100644 --- a/translations/en.json +++ b/translations/en.json @@ -760,6 +760,7 @@ "dec": "Dec", "decimals": "Decimals", "decline": "Decline", + "decline-contact-request": "Decline contact request", "declined": "Declined", "decryption-failed-content": "An error occured decrypting your data. You might need to erase your old data and generate a new account. Tap “Apply” to erase or “Cancel” to try again", "default": "Default", From 980690001198c51f045aeefa31b90846f70d8a01 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 16:18:24 +0530 Subject: [PATCH 14/20] fix: decline contact request logic --- src/status_im/contexts/contact/trust/events.cljs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 6348c806526..9658cffd40c 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -47,11 +47,14 @@ (rf/reg-event-fx :contact/mark-as-untrusted-sheet (fn [_ [{:keys [public-key contact-request-state] :as contact}]] - (let [name (profile.utils/displayed-name contact) - contact? (= contact-request-state - constants/contact-request-state-mutual) - request? (= contact-request-state - constants/contact-request-state-received)] + (let [name (profile.utils/displayed-name contact) + contact? (= contact-request-state + constants/contact-request-state-mutual) + request? (= contact-request-state + constants/contact-request-state-received) + contact-request (when request? + (rf/sub [:activity-center/pending-contact-request-from-contact-id + public-key]))] {:dispatch [:show-bottom-sheet {:content (fn [] @@ -82,5 +85,5 @@ request? {:extra-action (fn [] (rf/dispatch [:activity-center.contact-requests/decline - public-key])) + (:id contact-request)])) :extra-text (i18n/label :t/decline-contact-request)}))])}]}))) From cca3c6bf949fe8f694e2accf2d0fe5d18206833c Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 16:34:34 +0530 Subject: [PATCH 15/20] lint-fix --- src/status_im/common/home/actions/view.cljs | 4 ++-- src/status_im/contexts/contact/trust/events.cljs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/status_im/common/home/actions/view.cljs b/src/status_im/common/home/actions/view.cljs index 0960f7ebf88..78de71a6583 100644 --- a/src/status_im/common/home/actions/view.cljs +++ b/src/status_im/common/home/actions/view.cljs @@ -10,9 +10,9 @@ [status-im.contexts.chat.actions.view :as chat-actions] [status-im.contexts.chat.contacts.drawers.nickname-drawer.view :as nickname-drawer] [status-im.contexts.communities.actions.chat.view :as communities-chat-actions] + [status-im.contexts.profile.utils :as profile.utils] [utils.i18n :as i18n] - [utils.re-frame :as rf] - [status-im.contexts.profile.utils :as profile.utils])) + [utils.re-frame :as rf])) (defn- entry [{:keys [icon label on-press danger? sub-label chevron? add-divider? accessibility-label]}] diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 9658cffd40c..a15a8d9a510 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -4,10 +4,10 @@ [re-frame.core :as re-frame] [status-im.common.confirmation-drawer.view :as confirmation-drawer] [status-im.constants :as constants] + [status-im.contexts.profile.utils :as profile.utils] [taoensso.timbre :as log] [utils.i18n :as i18n] - [utils.re-frame :as rf] - [status-im.contexts.profile.utils :as profile.utils])) + [utils.re-frame :as rf])) (rf/reg-event-fx :contact/mark-as-untrusted-success (fn [{:keys [db]} [contact-id name]] From 9f968b5c3ad2624ce01426fac9d661309e4bc32f Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 16:41:38 +0530 Subject: [PATCH 16/20] self review improvements --- src/status_im/contexts/contact/trust/events.cljs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index a15a8d9a510..85d76304e20 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -73,13 +73,6 @@ (cond contact? {:extra-action (fn [] - (rf/dispatch [:toasts/upsert - {:id :remove-contact - :type :positive - :text (->> (i18n/label - :t/removed-from-contacts) - (string/lower-case) - (str name " "))}]) (rf/dispatch [:contact.ui/remove-contact-pressed contact])) :extra-text (i18n/label :t/remove-contact)} request? From 464d3f7af285ebf084fa687dd2dc1d590512d0c9 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Thu, 15 May 2025 17:10:53 +0530 Subject: [PATCH 17/20] lint-fix --- src/status_im/contexts/contact/trust/events.cljs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 85d76304e20..0ff79f27817 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -1,6 +1,5 @@ (ns status-im.contexts.contact.trust.events (:require - [clojure.string :as string] [re-frame.core :as re-frame] [status-im.common.confirmation-drawer.view :as confirmation-drawer] [status-im.constants :as constants] From e0af643237e6e025d68bbfb6ba92350dfcc60822 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Mon, 19 May 2025 19:33:52 +0530 Subject: [PATCH 18/20] untrusted toast copy update --- src/status_im/contexts/contact/trust/events.cljs | 8 ++++---- translations/en.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 0ff79f27817..dfa53dc5f2b 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -9,14 +9,14 @@ [utils.re-frame :as rf])) (rf/reg-event-fx :contact/mark-as-untrusted-success - (fn [{:keys [db]} [contact-id name]] + (fn [{:keys [db]} [contact-id]] {:db (update-in db [:contacts/contacts contact-id] #(assoc % :trust-status constants/contact-trust-status-untrustworthy)) :dispatch [:toasts/upsert {:type :positive - :text (i18n/label :t/marked-as-untrusted {:username name})}]})) + :text (i18n/label :t/marked-as-untrusted)}]})) (rf/reg-event-fx :contact/mark-as-untrusted (fn [_ [contact-id name]] @@ -27,14 +27,14 @@ :on-error #(log/error "failed mark contact as untrusted" % contact-id)}]})) (rf/reg-event-fx :contact/remove-trust-status-success - (fn [{:keys [db]} [contact-id name]] + (fn [{:keys [db]} [contact-id]] {:db (update-in db [:contacts/contacts contact-id] #(assoc % :trust-status constants/contact-trust-status-unknown)) :dispatch [:toasts/upsert {:type :positive - :text (i18n/label :t/trust-mark-removed {:username name})}]})) + :text (i18n/label :t/untrusted-mark-removed)}]})) (rf/reg-event-fx :contact/remove-trust-status (fn [_ [contact-id name]] diff --git a/translations/en.json b/translations/en.json index 1177bbba0a1..adb0b03142d 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1628,7 +1628,7 @@ "mark-as-untrusted-button": "Mark", "mark-as-untrusted-description": "{{username}} will be marked as untrusted. This mark will only be visible to you.", "mark-user-untrustworthy": "Mark {{username}} as untrustworthy", - "marked-as-untrusted": "{{username}} is marked as untrusted", + "marked-as-untrusted": "Marked as untrusted", "market": "Market", "market-cap": "Market cap", "master-account": "Master account", @@ -2784,7 +2784,6 @@ "tribute-to-talk-tribute-received2": " are now contacts and can securely chat with each other.", "tribute-to-talk-you-require-snt": "You require SNT for new people to start a chat.", "trip-accounts": "Trip accounts", - "trust-mark-removed": "Trust mark removed for {{username}}", "try-again": "Try again", "try-keeping-the-card-still": "Try keeping the card still", "try-to-search-something-else": "Try to search something else", @@ -2851,6 +2850,7 @@ "unsupported-file": "Unsupported file", "until": "until", "until-you-turn-it-back-on": "you turn it back on", + "untrusted-mark-removed": "Untrusted mark removed", "untrustworthy": "Untrustworthy", "update": "Update", "update-account-name": "Update account name", From 9e996c13946297eadaeefd4e8c70c80a0b892cd3 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Tue, 20 May 2025 08:39:07 +0530 Subject: [PATCH 19/20] pr review changes --- .../common/contact_list_item/view.cljs | 6 +- .../chat/home/chat_list_item/view.cljs | 5 +- .../contexts/contact/trust/events.cljs | 88 +++++++++++-------- .../profile/contact/actions/view.cljs | 18 ++-- 4 files changed, 58 insertions(+), 59 deletions(-) diff --git a/src/status_im/common/contact_list_item/view.cljs b/src/status_im/common/contact_list_item/view.cljs index 33d1a67ea64..d9dfe1acfef 100644 --- a/src/status_im/common/contact_list_item/view.cljs +++ b/src/status_im/common/contact_list_item/view.cljs @@ -1,7 +1,6 @@ (ns status-im.common.contact-list-item.view (:require [quo.core :as quo] - [react-native.core :as rn] [status-im.constants :as constants] [utils.address :as address] [utils.re-frame :as rf])) @@ -13,10 +12,7 @@ theme] (let [photo-path (rf/sub [:chats/photo-path public-key]) online? (rf/sub [:visibility-status-updates/online? public-key]) - untrustworthy? (rn/use-memo - (fn [] - (= constants/contact-trust-status-untrustworthy trust-status)) - [trust-status]) + untrustworthy? (= constants/contact-trust-status-untrustworthy trust-status) customization-color (rf/sub [:profile/customization-color])] [quo/user {:customization-color customization-color diff --git a/src/status_im/contexts/chat/home/chat_list_item/view.cljs b/src/status_im/contexts/chat/home/chat_list_item/view.cljs index 42f8965b1ea..9b215356b58 100644 --- a/src/status_im/contexts/chat/home/chat_list_item/view.cljs +++ b/src/status_im/contexts/chat/home/chat_list_item/view.cljs @@ -251,10 +251,7 @@ (rf/sub [:contacts/contact-by-address chat-id])) unread-messages? (pos? unviewed-messages-count) trust-status (rf/sub [:contacts/contact-trust-status chat-id]) - untrustworthy? (rn/use-memo - (fn [] - (= constants/contact-trust-status-untrustworthy trust-status)) - [trust-status])] + untrustworthy? (= constants/contact-trust-status-untrustworthy trust-status)] [rn/view {:style {:flex-direction :row}} [avatar-view {:contact contact diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index dfa53dc5f2b..9b6b075232b 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -1,6 +1,5 @@ (ns status-im.contexts.contact.trust.events (:require - [re-frame.core :as re-frame] [status-im.common.confirmation-drawer.view :as confirmation-drawer] [status-im.constants :as constants] [status-im.contexts.profile.utils :as profile.utils] @@ -12,37 +11,47 @@ (fn [{:keys [db]} [contact-id]] {:db (update-in db [:contacts/contacts contact-id] - #(assoc % :trust-status constants/contact-trust-status-untrustworthy)) - :dispatch - [:toasts/upsert - {:type :positive - :text (i18n/label :t/marked-as-untrusted)}]})) + assoc + :trust-status + constants/contact-trust-status-untrustworthy) + :fx [[:dispatch + [:toasts/upsert + {:type :positive + :text (i18n/label :t/marked-as-untrusted)}]]]})) (rf/reg-event-fx :contact/mark-as-untrusted (fn [_ [contact-id name]] {:json-rpc/call [{:method "wakuext_markAsUntrustworthy" :params [contact-id] - :on-success #(re-frame/dispatch [:contact/mark-as-untrusted-success contact-id name]) - :on-error #(log/error "failed mark contact as untrusted" % contact-id)}]})) + :on-success [:contact/mark-as-untrusted-success contact-id name] + :on-error #(log/error "failed mark contact as untrusted" + {:event :contact/mark-as-untrusted + :contact-id contact-id + :error %})}]})) (rf/reg-event-fx :contact/remove-trust-status-success (fn [{:keys [db]} [contact-id]] {:db (update-in db [:contacts/contacts contact-id] - #(assoc % :trust-status constants/contact-trust-status-unknown)) - :dispatch - [:toasts/upsert - {:type :positive - :text (i18n/label :t/untrusted-mark-removed)}]})) + assoc + :trust-status + constants/contact-trust-status-unknown) + :fx [[:dispatch + [:toasts/upsert + {:type :positive + :text (i18n/label :t/untrusted-mark-removed)}]]]})) (rf/reg-event-fx :contact/remove-trust-status (fn [_ [contact-id name]] {:json-rpc/call [{:method "wakuext_removeTrustStatus" :params [contact-id] - :on-success #(re-frame/dispatch [:contact/remove-trust-status-success contact-id name]) - :on-error #(log/error "failed remove contact trust status" % contact-id)}]})) + :on-success [:contact/remove-trust-status-success contact-id name] + :on-error #(log/error "failed remove contact trust status" + {:event :contact/remove-trust-status + :contact-id contact-id + :error %})}]})) (rf/reg-event-fx :contact/mark-as-untrusted-sheet (fn [_ [{:keys [public-key contact-request-state] :as contact}]] @@ -54,28 +63,29 @@ contact-request (when request? (rf/sub [:activity-center/pending-contact-request-from-contact-id public-key]))] - {:dispatch - [:show-bottom-sheet - {:content (fn [] - [confirmation-drawer/confirmation-drawer - (merge {:title (i18n/label :t/mark-as-untrusted) - :description (i18n/label :t/mark-as-untrusted-description - {:username (:primary-name contact)}) - :context contact - :accessibility-label :mark-as-untrustworthy - :button-text (i18n/label :t/mark-as-untrusted-button) - :on-press (fn [] - (rf/dispatch [:hide-bottom-sheet]) + {:fx [[:dispatch + [:show-bottom-sheet + {:content (fn [] + [confirmation-drawer/confirmation-drawer + (cond-> {:title (i18n/label :t/mark-as-untrusted) + :description (i18n/label :t/mark-as-untrusted-description + {:username (:primary-name contact)}) + :context contact + :accessibility-label :mark-as-untrustworthy + :button-text (i18n/label :t/mark-as-untrusted-button) + :on-press (fn [] + (rf/dispatch [:hide-bottom-sheet]) + (rf/dispatch + [:contact/mark-as-untrusted + public-key name]))} + contact? + (assoc :extra-action (fn [] + (rf/dispatch [:contact.ui/remove-contact-pressed + contact])) + :extra-text (i18n/label :t/remove-contact)) + request? + (assoc :extra-action (fn [] (rf/dispatch - [:contact/mark-as-untrusted - public-key name]))} - (cond - contact? - {:extra-action (fn [] - (rf/dispatch [:contact.ui/remove-contact-pressed contact])) - :extra-text (i18n/label :t/remove-contact)} - request? - {:extra-action (fn [] - (rf/dispatch [:activity-center.contact-requests/decline - (:id contact-request)])) - :extra-text (i18n/label :t/decline-contact-request)}))])}]}))) + [:activity-center.contact-requests/decline + (:id contact-request)])) + :extra-text (i18n/label :t/decline-contact-request)))])}]]]}))) diff --git a/src/status_im/contexts/profile/contact/actions/view.cljs b/src/status_im/contexts/profile/contact/actions/view.cljs index 48f7b058c92..e5c2763fafb 100644 --- a/src/status_im/contexts/profile/contact/actions/view.cljs +++ b/src/status_im/contexts/profile/contact/actions/view.cljs @@ -55,17 +55,13 @@ :on-success #(rf/dispatch [:open-share {:options {:message %}}])}])) [public-key]) - untrustworthy? (rn/use-memo (fn [] - (= trust-status - constants/contact-trust-status-untrustworthy)) - [trust-status]) - on-trust-mark-press (rn/use-callback - (fn [] - (hide-sheet-and-dispatch - (if untrustworthy? - [:contact/remove-trust-status public-key full-name] - [:contact/mark-as-untrusted-sheet contact]))) - [untrustworthy? contact full-name public-key]) + untrustworthy? (= trust-status + constants/contact-trust-status-untrustworthy) + on-trust-mark-press (fn [] + (hide-sheet-and-dispatch + (if untrustworthy? + [:contact/remove-trust-status public-key full-name] + [:contact/mark-as-untrusted-sheet contact]))) on-remove-contact (rn/use-callback (fn [] (rf/dispatch [:hide-bottom-sheet]) From 6fe97f0ef8726b54af1122b2dd163387087d9ff4 Mon Sep 17 00:00:00 2001 From: Ajay Sivan Date: Tue, 20 May 2025 09:01:31 +0530 Subject: [PATCH 20/20] remove use of subs in events --- src/status_im/contexts/contact/trust/events.cljs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/status_im/contexts/contact/trust/events.cljs b/src/status_im/contexts/contact/trust/events.cljs index 9b6b075232b..d31197582c9 100644 --- a/src/status_im/contexts/contact/trust/events.cljs +++ b/src/status_im/contexts/contact/trust/events.cljs @@ -53,16 +53,21 @@ :contact-id contact-id :error %})}]})) +(defn pending-contact-request-from-contact-id + [db contact-id] + (->> (get-in db [:activity-center :contact-requests]) + (filter #(= contact-id (:author %))) + first)) + (rf/reg-event-fx :contact/mark-as-untrusted-sheet - (fn [_ [{:keys [public-key contact-request-state] :as contact}]] + (fn [{:keys [db]} [{:keys [public-key contact-request-state] :as contact}]] (let [name (profile.utils/displayed-name contact) contact? (= contact-request-state constants/contact-request-state-mutual) request? (= contact-request-state constants/contact-request-state-received) contact-request (when request? - (rf/sub [:activity-center/pending-contact-request-from-contact-id - public-key]))] + (pending-contact-request-from-contact-id db public-key))] {:fx [[:dispatch [:show-bottom-sheet {:content (fn []