Remove support for editing shared addresses while request to join is pending approval (#19623)

This PR completely removes support for editing shared addresses while a user's
request to join is pending approval.

The reason for the removal is that, in status-go, the control node that will
process the message
protobuf.ApplicationMetadataMessage_COMMUNITY_EDIT_SHARED_ADDRESSES verifies
the user is already a member of the community, but a user waiting for approval
to join is not yet a member. Removing this check doesn't sound like a good idea
and we want to avoid bugs/complications for the next release. The feature isn't
working anyway, so the purpose of this PR is also to cleanup code that doesn't
work and won't be re-done anytime soon.
This commit is contained in:
Icaro Motta 2024-04-23 10:08:31 -03:00 committed by GitHub
parent 01a503f3bf
commit 54b2e0e678
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 27 additions and 153 deletions

View File

@ -7,10 +7,8 @@
(defn initialize-permission-addresses (defn initialize-permission-addresses
[{:keys [db]} [community-id]] [{:keys [db]} [community-id]]
(let [{:keys [joined]} (get-in db [:communities community-id]) (let [{:keys [joined]} (get-in db [:communities community-id])]
pending-requests (get-in db [:communities/my-pending-requests-to-join community-id]) {:fx [(if joined
init-using-revealed-accounts? (or joined (seq pending-requests))]
{:fx [(if init-using-revealed-accounts?
[:dispatch [:dispatch
[:communities/get-revealed-accounts community-id [:communities/get-revealed-accounts community-id
[:communities/do-init-permission-addresses community-id]]] [:communities/do-init-permission-addresses community-id]]]

View File

@ -36,25 +36,15 @@
:reveal? false}]) :reveal? false}])
(deftest initialize-permission-addresses-test (deftest initialize-permission-addresses-test
(testing "fetches revealed accounts when pending and not joined" (testing "fetches revealed accounts when joined"
(let [cofx {:db {:communities {community-id {:joined false}} (let [cofx {:db {:communities {community-id {:joined true}}}}]
:communities/my-pending-requests-to-join {community-id [:anything]}}}]
(is (match? (is (match?
{:fx [[:dispatch {:fx [[:dispatch
[:communities/get-revealed-accounts community-id [:communities/get-revealed-accounts community-id
[:communities/do-init-permission-addresses community-id]]]]} [:communities/do-init-permission-addresses community-id]]]]}
(sut/initialize-permission-addresses cofx [community-id]))))) (sut/initialize-permission-addresses cofx [community-id])))))
(testing "fetches revealed accounts when not pending and joined" (testing "does not fetch revealed accounts when not joined"
(let [cofx {:db {:communities {community-id {:joined true}}
:communities/my-pending-requests-to-join {}}}]
(is (match?
{:fx [[:dispatch
[:communities/get-revealed-accounts community-id
[:communities/do-init-permission-addresses community-id]]]]}
(sut/initialize-permission-addresses cofx [community-id])))))
(testing "does not fetch revealed accounts when not pending and not joined"
(let [cofx {:db {:communities {community-id {:joined false}} (let [cofx {:db {:communities {community-id {:joined false}}
:communities/my-pending-requests-to-join {}}}] :communities/my-pending-requests-to-join {}}}]
(is (match? (is (match?

View File

@ -68,7 +68,8 @@
[:communities/request-to-join-with-addresses [:communities/request-to-join-with-addresses
{:community-id id {:community-id id
:password password}]))}]) :password password}]))}])
(navigate-back))) (navigate-back))
[can-edit-addresses?])
open-permission-sheet open-permission-sheet
(rn/use-callback (fn [] (rn/use-callback (fn []

View File

@ -40,34 +40,6 @@
:token (:symbol balance) :token (:symbol balance)
:token-img-src (images-by-symbol sym))))) :token-img-src (images-by-symbol sym)))))
(defn- cancel-join-request-drawer
[community-id]
(let [{:keys [name logo color]} (rf/sub [:communities/for-context-tag community-id])
request-id (rf/sub [:communities/my-pending-request-to-join community-id])]
[:<>
[quo/drawer-top
{:type :context-tag
:context-tag-type :community
:title (i18n/label :t/cancel-request?)
:community-name name
:community-logo logo
:customization-color color}]
[rn/view {:style style/drawer-body}
[quo/text (i18n/label :t/pending-join-request-farewell)]]
[quo/bottom-actions
{:actions :two-actions
:button-one-label (i18n/label :t/confirm-and-cancel)
:button-one-props {:customization-color color
:on-press
(fn []
(rf/dispatch [:communities/addresses-for-permissions-cancel-request
request-id]))}
:button-two-label (i18n/label :t/cancel)
:button-two-props {:type :grey
:on-press #(rf/dispatch [:hide-bottom-sheet])}}]]))
(defn- confirm-discard-drawer (defn- confirm-discard-drawer
[community-id] [community-id]
(let [{:keys [name logo color]} (rf/sub [:communities/for-context-tag community-id])] (let [{:keys [name logo color]} (rf/sub [:communities/for-context-tag community-id])]
@ -206,11 +178,6 @@
joined (rf/sub [:communities/community-joined id]) joined (rf/sub [:communities/community-joined id])
checking? (rf/sub [:communities/permissions-check-for-selection-checking? id]) checking? (rf/sub [:communities/permissions-check-for-selection-checking? id])
cancel-join-request
(rn/use-callback
(fn []
(rf/dispatch [:show-bottom-sheet
{:content (fn [] [cancel-join-request-drawer id])}])))
leave-community leave-community
(rn/use-callback (rn/use-callback
(fn [] (fn []
@ -237,7 +204,6 @@
(rf/dispatch [:hide-bottom-sheet]))}]))}]) (rf/dispatch [:hide-bottom-sheet]))}]))}])
(rf/dispatch [:communities/set-share-all-addresses id flag-share-all-addresses])) (rf/dispatch [:communities/set-share-all-addresses id flag-share-all-addresses]))
(rf/dispatch [:communities/set-addresses-to-reveal id addresses-to-reveal]))) (rf/dispatch [:communities/set-addresses-to-reveal id addresses-to-reveal])))
pending? (rf/sub [:communities/has-pending-request-to-join? id])
highest-role (rf/sub [:communities/highest-role-for-selection id]) highest-role (rf/sub [:communities/highest-role-for-selection id])
[unmodified-role _] (rn/use-state highest-role)] [unmodified-role _] (rn/use-state highest-role)]
@ -255,38 +221,20 @@
can-edit-addresses? can-edit-addresses?
(-> (->
(assoc :actions :one-action (assoc :actions :one-action
:button-one-label (cond :button-one-label (if (and joined (not highest-role))
(and pending? (not highest-role))
(i18n/label :t/cancel-request)
(and joined (not highest-role))
(i18n/label :t/leave-community) (i18n/label :t/leave-community)
:else
(i18n/label :t/confirm-changes)) (i18n/label :t/confirm-changes))
:description-top-text (cond :description-top-text (cond
(and pending? highest-role)
(i18n/label :t/eligible-to-join-as)
(and joined (= highest-role unmodified-role)) (and joined (= highest-role unmodified-role))
(i18n/label :t/you-are-a) (i18n/label :t/you-are-a)
(and joined (not= highest-role unmodified-role)) (and joined (not= highest-role unmodified-role))
(i18n/label :t/you-will-be-a)) (i18n/label :t/you-will-be-a))
:error-message (cond :error-message (when (and joined (not highest-role))
(and pending? (not highest-role))
(i18n/label :t/community-join-requirements-not-met)
(and joined (not highest-role))
(i18n/label :t/membership-requirements-not-met))) (i18n/label :t/membership-requirements-not-met)))
(update :button-one-props (update :button-one-props
merge merge
(cond (and pending? (not highest-role)) (cond (and joined (not highest-role))
{:type :danger
:disabled? false
:on-press cancel-join-request}
(and joined (not highest-role))
{:type :danger {:type :danger
:disabled? false :disabled? false
:on-press leave-community}))) :on-press leave-community})))
@ -372,13 +320,8 @@
:data wallet-accounts}] :data wallet-accounts}]
[selection-bottom-actions id [selection-bottom-actions id
{:flag-share-all-addresses {:flag-share-all-addresses flag-share-all-addresses
flag-share-all-addresses :addresses-to-reveal addresses-to-reveal
:addresses-to-reveal :cancel-selection cancel-selection
addresses-to-reveal :can-edit-addresses? can-edit-addresses?
:cancel-selection :identical-choices? identical-choices?}]]))
cancel-selection
:can-edit-addresses?
can-edit-addresses?
:identical-choices?
identical-choices?}]]))

View File

@ -131,25 +131,22 @@
request-id])}])}) request-id])}])})
(defn not-joined-options (defn not-joined-options
[id token-gated? pending? intro-message] [id token-gated? intro-message]
[[(when-not token-gated? (view-members id)) [[(when-not token-gated? (view-members id))
(when-not token-gated? (view-rules id intro-message)) (when-not token-gated? (view-rules id intro-message))
(invite-contacts id) (invite-contacts id)
(when token-gated? (view-token-gating id)) (when token-gated? (view-token-gating id))
(when (and pending? (ff/enabled? ::ff/community.edit-account-selection))
(edit-shared-addresses id))
(show-qr id) (show-qr id)
(share-community id)]]) (share-community id)]])
(defn join-request-sent-options (defn join-request-sent-options
[id token-gated? request-id intro-message] [id token-gated? request-id intro-message]
[(conj (first (not-joined-options id token-gated? request-id intro-message)) [(conj (first (not-joined-options id token-gated? intro-message))
(assoc (cancel-request-to-join id request-id) :add-divider? true))]) (assoc (cancel-request-to-join id request-id) :add-divider? true))])
(defn banned-options (defn banned-options
[id token-gated? intro-message] [id token-gated? intro-message]
(let [pending? false] (not-joined-options id token-gated? intro-message))
(not-joined-options id token-gated? pending? intro-message)))
(defn joined-options (defn joined-options
[id token-gated? muted? muted-till color intro-message] [id token-gated? muted? muted-till color intro-message]
@ -189,7 +186,7 @@
joined (joined-options id role-permissions? muted muted-till color intro-message) joined (joined-options id role-permissions? muted muted-till color intro-message)
request-id (join-request-sent-options id role-permissions? request-id intro-message) request-id (join-request-sent-options id role-permissions? request-id intro-message)
banList (banned-options id role-permissions? intro-message) banList (banned-options id role-permissions? intro-message)
:else (not-joined-options id role-permissions? request-id intro-message)))) :else (not-joined-options id role-permissions? intro-message))))
(defn community-options-bottom-sheet (defn community-options-bottom-sheet
[id] [id]

View File

@ -374,9 +374,8 @@
(defn get-revealed-accounts (defn get-revealed-accounts
[{:keys [db]} [community-id on-success]] [{:keys [db]} [community-id on-success]]
(let [{:keys [joined fetching-revealed-accounts] (let [{:keys [joined fetching-revealed-accounts]
:as community} (get-in db [:communities community-id]) :as community} (get-in db [:communities community-id])]
pending? (get-in db [:communities/my-pending-requests-to-join community-id])] (when (and community joined (not fetching-revealed-accounts))
(when (and community (or pending? joined) (not fetching-revealed-accounts))
{:db (assoc-in db [:communities community-id :fetching-revealed-accounts] true) {:db (assoc-in db [:communities community-id :fetching-revealed-accounts] true)
:json-rpc/call :json-rpc/call
[{:method "wakuext_getRevealedAccounts" [{:method "wakuext_getRevealedAccounts"

View File

@ -167,26 +167,7 @@
(:db effects))) (:db effects)))
(is (match? {:method "wakuext_getRevealedAccounts" (is (match? {:method "wakuext_getRevealedAccounts"
:params [community-id "profile-public-key"]} :params [community-id "profile-public-key"]}
(-> effects :json-rpc/call first (select-keys [:method :params])))))) (-> effects :json-rpc/call first (select-keys [:method :params]))))))))
(testing "given there is a pending request"
(let [pub-key "profile-public-key"
community (assoc community :joined false)
db {:communities {community-id community}
:profile/profile {:public-key pub-key}
:communities/my-pending-requests-to-join {community-id [:anything]}}
on-success [:some-event-id]
actual (events/get-revealed-accounts {:db db} [community-id on-success])
expected {:db (assoc-in db
[:communities community-id :fetching-revealed-accounts]
true)
:json-rpc/call [{:method "wakuext_getRevealedAccounts"
:params [community-id pub-key]
:js-response true
:on-success [:communities/get-revealed-accounts-success
community-id on-success]
:on-error fn?}]}]
(is (match? expected actual))))))
(deftest handle-community (deftest handle-community
(let [community {:id community-id :clock 2}] (let [community {:id community-id :clock 2}]

View File

@ -30,18 +30,16 @@
(re-frame/reg-sub :communities/can-edit-shared-addresses? (re-frame/reg-sub :communities/can-edit-shared-addresses?
(fn [[_ community-id]] (fn [[_ community-id]]
[(re-frame/subscribe [:communities/community community-id]) (re-frame/subscribe [:communities/community community-id]))
(re-frame/subscribe [:communities/my-pending-request-to-join community-id])]) (fn [{:keys [joined]}]
(fn [[{:keys [joined]} pending-requests]] joined))
(boolean (or joined (seq pending-requests)))))
(re-frame/reg-sub :communities/permissions-check-for-selection (re-frame/reg-sub :communities/permissions-check-for-selection
:<- [:communities/permissions-checks-for-selection] :<- [:communities/permissions-checks-for-selection]
(fn [permissions [_ id]] (fn [permissions [_ id]]
(get permissions id))) (get permissions id)))
(re-frame/reg-sub (re-frame/reg-sub :communities/permissions-check-for-selection-checking?
:communities/permissions-check-for-selection-checking?
(fn [[_ community-id]] (fn [[_ community-id]]
(re-frame/subscribe [:communities/permissions-check-for-selection community-id])) (re-frame/subscribe [:communities/permissions-check-for-selection community-id]))
(fn [check] (fn [check]

View File

@ -1,6 +1,6 @@
(ns status-im.subs.community.account-selection-test (ns status-im.subs.community.account-selection-test
(:require (:require
[cljs.test :refer [is testing]] [cljs.test :refer [is]]
matcher-combinators.test matcher-combinators.test
[re-frame.db :as rf-db] [re-frame.db :as rf-db]
status-im.subs.communities status-im.subs.communities
@ -22,36 +22,6 @@
:color :orange} :color :orange}
(rf/sub [sub-name community-id])))) (rf/sub [sub-name community-id]))))
(h/deftest-sub :communities/can-edit-shared-addresses?
[sub-name]
(testing "joined community and there are pending requests"
(reset! rf-db/app-db
{:communities {community-id {:id community-id :joined true}}
:communities/my-pending-request-to-join {community-id {:id :request-id-1}}})
(is (true? (rf/sub [sub-name community-id]))))
(testing "joined community and there are no pending requests"
(reset! rf-db/app-db
{:communities {community-id {:id community-id :joined true}}
:communities/my-pending-request-to-join {community-id {}}})
(is (true? (rf/sub [sub-name community-id]))))
(testing "not joined community and there are pending requests"
(reset! rf-db/app-db
{:communities {community-id {:id community-id :joined false}}
:communities/my-pending-request-to-join {community-id {:id :request-id-1}}})
(is (false? (rf/sub [sub-name community-id]))))
(testing "not joined community and there are no pending requests"
(reset! rf-db/app-db
{:communities {community-id {:id community-id :joined false}}
:communities/my-pending-request-to-join {community-id {}}})
(is (false? (rf/sub [sub-name community-id])))))
(h/deftest-sub :communities/airdrop-account (h/deftest-sub :communities/airdrop-account
[sub-name] [sub-name]
(let [airdrop-account {:address "0xA" :position 1}] (let [airdrop-account {:address "0xA" :position 1}]

View File

@ -2287,12 +2287,9 @@
"membership-requirements-not-met": "Membership requirements not met", "membership-requirements-not-met": "Membership requirements not met",
"edit-shared-addresses": "Edit shared addresses", "edit-shared-addresses": "Edit shared addresses",
"leave-community-farewell": "Well be sad to see you go but remember, you can come back at any time! All shared addresses will be unshared.", "leave-community-farewell": "Well be sad to see you go but remember, you can come back at any time! All shared addresses will be unshared.",
"pending-join-request-farewell": "Well be sad to see you go but remember, you can request to join this community at any point. All shared addresses will be unshared.",
"all-changes-will-be-discarded": "All changes in shared addresses for permissions will be discarded.", "all-changes-will-be-discarded": "All changes in shared addresses for permissions will be discarded.",
"cancel-request": "Cancel request",
"discard": "Discard", "discard": "Discard",
"discard-changes?": "Discard changes?", "discard-changes?": "Discard changes?",
"confirm-and-cancel": "Confirm and cancel",
"you-will-be-a": "Youll be a", "you-will-be-a": "Youll be a",
"you-are-a": "Youre a", "you-are-a": "Youre a",
"you-are-a-role": "Youre a {{role}}", "you-are-a-role": "Youre a {{role}}",