diff --git a/src/quo2/components/dividers/divider_label.cljs b/src/quo2/components/dividers/divider_label.cljs index fa774ff6c3..c8582f4972 100644 --- a/src/quo2/components/dividers/divider_label.cljs +++ b/src/quo2/components/dividers/divider_label.cljs @@ -11,10 +11,21 @@ (defn divider-label "label -> string chevron-position -> :left, :right + chevron-icon -> keyword + on-press -> function + padding-bottom -> number counter-value -> number increase-padding-top? -> boolean blur? -> boolean" - [{:keys [label chevron-position counter-value increase-padding-top? blur? container-style]}] + [{:keys [label + chevron-position + chevron-icon + counter-value + increase-padding-top? + padding-bottom + blur? + container-style + on-press]}] (let [dark? (colors/dark?) border-and-counter-bg-color (if dark? (if blur? colors/white-opa-5 colors/neutral-70) @@ -22,50 +33,53 @@ padding-top (if increase-padding-top? 16 8) text-and-icon-color (if dark? colors/neutral-40 colors/neutral-50) counter-text-color (if dark? colors/white colors/neutral-100)] - [rn/view - {:accessible true - :accessibility-label :divider-label - :style (merge {:border-top-width 1 - :border-top-color border-and-counter-bg-color - :padding-top padding-top - :padding-horizontal 16 - :align-items :center - :flex-direction :row} - container-style)} - (when (= chevron-position :left) - [rn/view - {:test-ID :divider-label-icon-left - :style {:margin-right 4}} - [icons/icon - :main-icons/chevron-down - {:color text-and-icon-color - :width chevron-icon-container-width - :height chevron-icon-container-height}]]) - [markdown.text/text - {:size :paragraph-2 - :weight :medium - :style {:color text-and-icon-color - :flex 1}} - label] - (when (= chevron-position :right) - [rn/view {:test-ID :divider-label-icon-right} - [icons/icon - :main-icons/chevron-down - {:color text-and-icon-color - :size chevron-icon-container-width}]]) - (when (pos? counter-value) - [rn/view - {:style {:border-radius 6 - :height 16 - :width (case (count counter-value) - 1 16 - 2 20 - 28) - :background-color border-and-counter-bg-color - :align-items :center - :justify-content :center}} - [markdown.text/text - {:size :label - :weight :medium - :style {:color counter-text-color}} - counter-value]])])) + [rn/touchable-without-feedback + {:on-press on-press} + [rn/view + {:accessible true + :accessibility-label :divider-label + :style (merge {:border-top-width 1 + :border-top-color border-and-counter-bg-color + :padding-top padding-top + :padding-bottom padding-bottom + :padding-horizontal 16 + :align-items :center + :flex-direction :row} + container-style)} + (when (= chevron-position :left) + [rn/view + {:test-ID :divider-label-icon-left + :style {:margin-right 4}} + [icons/icon + (or chevron-icon :i/chevron-down) + {:color text-and-icon-color + :width chevron-icon-container-width + :height chevron-icon-container-height}]]) + [markdown.text/text + {:size :paragraph-2 + :weight :medium + :style {:color text-and-icon-color + :flex 1}} + label] + (when (= chevron-position :right) + [rn/view {:test-ID :divider-label-icon-right} + [icons/icon + (or chevron-icon :i/chevron-down) + {:color text-and-icon-color + :size chevron-icon-container-width}]]) + (when (pos? counter-value) + [rn/view + {:style {:border-radius 6 + :height 16 + :width (case (count counter-value) + 1 16 + 2 20 + 28) + :background-color border-and-counter-bg-color + :align-items :center + :justify-content :center}} + [markdown.text/text + {:size :label + :weight :medium + :style {:color counter-text-color}} + counter-value]])]])) diff --git a/src/status_im/communities/core.cljs b/src/status_im/communities/core.cljs index 048f15bef0..9d7d3733b5 100644 --- a/src/status_im/communities/core.cljs +++ b/src/status_im/communities/core.cljs @@ -678,12 +678,6 @@ community-id request-id)}]}) -(rf/defn switch-communities-enabled - {:events [:multiaccounts.ui/switch-communities-enabled]} - [{:keys [db]} enabled?] - {::async-storage/set! {:communities-enabled? enabled?} - :db (assoc db :communities/enabled? enabled?)}) - (rf/defn create-category {:events [::create-category-confirmation-pressed]} [_ community-id category-title chat-ids] @@ -860,3 +854,47 @@ :community-id community-id :public-key public-key :role-id role-id})]}) + +(rf/defn fetched-collapsed-community-categories + {:events [:communities/fetched-collapsed-categories-success]} + [{:keys [db]} categories] + {:db (assoc db + :communities/collapsed-categories + (reduce + (fn [acc {:keys [communityId categoryId]}] + (assoc-in acc [communityId categoryId] true)) + {} + categories))}) + +(rf/defn fetch-collapsed-community-categories + [_] + {:json-rpc/call [{:method "wakuext_collapsedCommunityCategories" + :params [] + :on-success #(re-frame/dispatch + [:communities/fetched-collapsed-categories-success %]) + :on-error #(log/error "failed to fetch collapsed community categories" + {:error :%})}]}) + +(rf/defn toggled-collapsed-category + {:events [:communities/toggled-collapsed-category-success]} + [{:keys [db]} community-id category-id collapsed?] + {:db (assoc-in db [:communities/collapsed-categories community-id category-id] collapsed?)}) + +(rf/defn toggle-collapsed-category + {:events [:communities/toggle-collapsed-category]} + [{:keys [db]} community-id category-id collapse?] + {:json-rpc/call [{:method "wakuext_toggleCollapsedCommunityCategory" + :params [{:communityId community-id + :categoryId category-id + :collapsed collapse?}] + :on-success #(re-frame/dispatch + [:communities/toggled-collapsed-category-success + community-id + category-id + collapse?]) + :on-error #(log/error "failed to toggle collapse category" + {:error % + :community-id community-id + :event :communities/toggle-collapsed-category + :category-id category-id + :collapse? collapse?})}]}) diff --git a/src/status_im/multiaccounts/login/core.cljs b/src/status_im/multiaccounts/login/core.cljs index 00724a6069..97c3bffbd4 100644 --- a/src/status_im/multiaccounts/login/core.cljs +++ b/src/status_im/multiaccounts/login/core.cljs @@ -46,16 +46,6 @@ [taoensso.timbre :as log] [utils.security.core :as security])) -(re-frame/reg-fx - ::initialize-communities-enabled - (fn [] - (let [callback #(re-frame/dispatch [:multiaccounts.ui/switch-communities-enabled %])] - (if config/communities-enabled? - (callback true) - (async-storage/get-item - :communities-enabled? - callback))))) - (re-frame/reg-fx ::initialize-transactions-management-enabled (fn [] @@ -358,10 +348,6 @@ [{:method "wakuext_getGroupChatInvitations" :on-success #(re-frame/dispatch [::initialize-invitations %])}]}) -(rf/defn initialize-communities-enabled - [cofx] - {::initialize-communities-enabled nil}) - (rf/defn initialize-transactions-management-enabled [cofx] {::initialize-transactions-management-enabled nil}) @@ -408,10 +394,10 @@ (rf/dispatch [:communities/get-user-requests-to-join]) (re-frame/dispatch [::get-chats-callback]))}) (initialize-appearance) - (initialize-communities-enabled) (initialize-wallet-connect) (get-node-config) (communities/fetch) + (communities/fetch-collapsed-community-categories) (logging/set-log-level (:log-level multiaccount)) (activity-center/notifications-fetch-pending-contact-requests) (activity-center/update-seen-state) @@ -539,7 +525,6 @@ (communities/fetch) (data-store.chats/fetch-chats-rpc {:on-success #(re-frame/dispatch [:chats-list/load-success %])}) - (initialize-communities-enabled) (multiaccounts/switch-preview-privacy-mode-flag) (link-preview/request-link-preview-whitelist) (logging/set-log-level (:log-level multiaccount)) diff --git a/src/status_im/ui/screens/advanced_settings/views.cljs b/src/status_im/ui/screens/advanced_settings/views.cljs index b63f2f1c89..1cd144490e 100644 --- a/src/status_im/ui/screens/advanced_settings/views.cljs +++ b/src/status_im/ui/screens/advanced_settings/views.cljs @@ -2,15 +2,13 @@ (:require [quo.core :as quo] [re-frame.core :as re-frame] [utils.i18n :as i18n] - [status-im.ui.components.list.views :as list] - [status-im2.config :as config]) + [status-im.ui.components.list.views :as list]) (:require-macros [status-im.utils.views :as views])) (defn- normal-mode-settings-data [{:keys [network-name current-log-level waku-bloom-filter-mode - communities-enabled? transactions-management-enabled? wakuv2-flag current-fleet @@ -76,17 +74,6 @@ :on-press #(re-frame/dispatch [:navigate-to :peers-stats]) :chevron true} - ;; If it's enabled in the config, we don't show the option - (when (not config/communities-enabled?) - {:size :small - :title (i18n/label :t/communities-enabled) - :accessibility-label :communities-enabled - :container-margin-bottom 8 - :on-press - #(re-frame/dispatch - [:multiaccounts.ui/switch-communities-enabled (not communities-enabled?)]) - :accessory :switch - :active communities-enabled?}) {:size :small :title (i18n/label :t/transactions-management-enabled) :accessibility-label :transactions-management-enabled @@ -132,7 +119,6 @@ network-name [:network-name] waku-bloom-filter-mode [:waku/bloom-filter-mode] wakuv2-flag [:waku/v2-flag] - communities-enabled? [:communities/enabled?] transactions-management-enabled? [:wallet/transactions-management-enabled?] current-log-level [:log-level/current-log-level] current-fleet [:fleets/current-fleet]] @@ -140,7 +126,6 @@ {:data (flat-list-data {:network-name network-name :current-log-level current-log-level - :communities-enabled? communities-enabled? :transactions-management-enabled? transactions-management-enabled? :current-fleet current-fleet :dev-mode? false diff --git a/src/status_im/ui/screens/communities/views.cljs b/src/status_im/ui/screens/communities/views.cljs index 31025113f3..f554e7ae4f 100644 --- a/src/status_im/ui/screens/communities/views.cljs +++ b/src/status_im/ui/screens/communities/views.cljs @@ -142,28 +142,25 @@ (defn communities [] - (let [communities (rf/sub [:communities/section-list]) - communities-enabled? (rf/sub [:communities/enabled?])] + (let [communities (rf/sub [:communities/section-list])] [:<> [topbar/topbar - (cond-> {:title (i18n/label :t/communities)} - communities-enabled? - (assoc :right-accessories - [{:icon :main-icons/more - :accessibility-label :chat-menu-button - :on-press - #(rf/dispatch [:bottom-sheet/show-sheet - {:content (fn [] - [communities-actions]) - :height 256}])}]))] + {:title (i18n/label :t/communities) + :right-accessories + [{:icon :main-icons/more + :accessibility-label :chat-menu-button + :on-press + #(rf/dispatch [:bottom-sheet/show-sheet + {:content (fn [] + [communities-actions]) + :height 256}])}]}] [communities-list communities] - (when communities-enabled? - [toolbar/toolbar - {:show-border? true - :center [quo/button - {:on-press #(rf/dispatch [::communities/open-create-community]) - :type :secondary} - (i18n/label :t/create-community)]}])])) + [toolbar/toolbar + {:show-border? true + :center [quo/button + {:on-press #(rf/dispatch [::communities/open-create-community]) + :type :secondary} + (i18n/label :t/create-community)]}]])) (defn export-community [] diff --git a/src/status_im/ui/screens/home/sheet/views.cljs b/src/status_im/ui/screens/home/sheet/views.cljs index d03938695d..26bce72c0e 100644 --- a/src/status_im/ui/screens/home/sheet/views.cljs +++ b/src/status_im/ui/screens/home/sheet/views.cljs @@ -51,13 +51,12 @@ :accessibility-label :join-public-chat-button :icon :main-icons/public-chat :on-press #(hide-sheet-and-dispatch [:open-modal :new-public-chat])}] - (when (rf/sub [:communities/enabled?]) - [quo/list-item - {:theme :accent - :title (i18n/label :t/communities-alpha) - :accessibility-label :communities-button - :icon :main-icons/communities - :on-press #(hide-sheet-and-dispatch [:navigate-to :communities])}]) + [quo/list-item + {:theme :accent + :title (i18n/label :t/communities-alpha) + :accessibility-label :communities-button + :icon :main-icons/communities + :on-press #(hide-sheet-and-dispatch [:navigate-to :communities])}] [invite/list-item {:accessibility-label :chats-menu-invite-friends-button}]]) diff --git a/src/status_im/ui2/screens/chat/messages/message.cljs b/src/status_im/ui2/screens/chat/messages/message.cljs index 9be60eadc7..07e71375d3 100644 --- a/src/status_im/ui2/screens/chat/messages/message.cljs +++ b/src/status_im/ui2/screens/chat/messages/message.cljs @@ -354,9 +354,8 @@ (defview community-content [{:keys [community-id] :as message}] - (letsubs [{:keys [name description verified] :as community} [:communities/community community-id] - communities-enabled? [:communities/enabled?]] - (when (and communities-enabled? community) + (letsubs [{:keys [name description verified] :as community} [:communities/community community-id]] + (when community [rn/view {:style (assoc (style/message-wrapper message) :margin-vertical 10 diff --git a/src/status_im2/config.cljs b/src/status_im2/config.cljs index 01f61e7aa8..f6281034e6 100644 --- a/src/status_im2/config.cljs +++ b/src/status_im2/config.cljs @@ -31,7 +31,6 @@ (def keycard-test-menu-enabled? (enabled? (get-config :KEYCARD_TEST_MENU "1"))) (def qr-test-menu-enabled? (enabled? (get-config :QR_READ_TEST_MENU "0"))) (def quo-preview-enabled? (enabled? (get-config :ENABLE_QUO_PREVIEW "0"))) -(def communities-enabled? (enabled? (get-config :COMMUNITIES_ENABLED "0"))) (def database-management-enabled? (enabled? (get-config :DATABASE_MANAGEMENT_ENABLED "0"))) (def debug-webview? (enabled? (get-config :DEBUG_WEBVIEW "0"))) (def collectibles-enabled? (enabled? (get-config :COLLECTIBLES_ENABLED "1"))) diff --git a/src/status_im2/constants.cljs b/src/status_im2/constants.cljs index 3ec517c3aa..7ca5eb8188 100644 --- a/src/status_im2/constants.cljs +++ b/src/status_im2/constants.cljs @@ -290,3 +290,5 @@ (def ^:const local-pair-action-sync-device 3) (def ^:const everyone-mention-id "0x00001") + +(def ^:const empty-category-id :communities/not-categorized) diff --git a/src/status_im2/contexts/communities/overview/view.cljs b/src/status_im2/contexts/communities/overview/view.cljs index 8ed62c3bf2..f52cc52513 100644 --- a/src/status_im2/contexts/communities/overview/view.cljs +++ b/src/status_im2/contexts/communities/overview/view.cljs @@ -60,35 +60,45 @@ (defn add-category-height [categories-heights category height] (swap! categories-heights - (fn [] - (sort-by :height - (conj @categories-heights - {:height height - :label category}))))) + (fn [heights] + (assoc heights category height)))) + +(defn collapse-category + [community-id category-id collapsed?] + (rf/dispatch [:communities/toggle-collapsed-category community-id category-id (not collapsed?)])) (defn channel-list-component - [{:keys [on-categories-heights-changed + [{:keys [on-category-layout + community-id on-first-channel-height-changed]} channels-list] - (let [categories-heights (reagent/atom [])] - [rn/view - {:on-layout #(on-first-channel-height-changed (+ (if platform/ios? - 0 - 38) - (int (Math/ceil (layout-y %))))) - :style {:margin-top 20 :flex 1}} - (map-indexed - (fn [index [category channels-for-category]] - [rn/view - {:flex 1 - :key (str index category) - :on-layout #(do - (add-category-height categories-heights category (int (layout-y %))) - (on-categories-heights-changed @categories-heights))} + [rn/view + {:on-layout #(on-first-channel-height-changed (+ (if platform/ios? + 0 + 38) + (int (Math/ceil (layout-y %)))) + (into #{} (map (comp :name second) channels-list))) + :style {:margin-top 20 :flex 1}} + (map + (fn [[category-id {:keys [chats name collapsed?]}]] + [rn/view + {:flex 1 + :key category-id + ;; on-layout fires only when the component re-renders, so + ;; in case the category hasn't changed, it will not be fired + :on-layout #(on-category-layout name (int (layout-y %)))} + (when-not (= constants/empty-category-id category-id) [quo/divider-label - {:label category - :chevron-position :left}] + {:label name + :on-press #(collapse-category + community-id + category-id + collapsed?) + :chevron-icon (if collapsed? :main-icons/chevron-right :main-icons/chevron-down) + :padding-bottom (if collapsed? 7 0) + :chevron-position :left}]) + (when-not collapsed? [rn/view {:margin-left 8 :margin-top 10 @@ -98,8 +108,8 @@ {:key (:id channel) :margin-top 4} [quo/channel-list-item channel]]) - channels-for-category)]]) - channels-list)])) + chats)])]) + channels-list)]) (defn request-to-join-text [is-open?] @@ -192,10 +202,10 @@ (defn add-on-press-handler-to-categorized-chats [community-id categorized-chats] - (reduce-kv (fn [acc category chats] - (assoc acc category (add-on-press-handler-to-chats community-id chats))) - {} - categorized-chats)) + (let [add-on-press (partial add-on-press-handler-to-chats community-id)] + (map (fn [[category v]] + [category (update v :chats add-on-press)]) + categorized-chats))) (defn community-header [name] @@ -221,8 +231,9 @@ (defn community-content [{:keys [name description locked joined images status tokens tags id] - :as community} pending? - {:keys [on-categories-heights-changed + :as community} + pending? + {:keys [on-category-layout on-first-channel-height-changed]}] (let [thumbnail-image (:thumbnail images) chats-by-category (rf/sub [:communities/categorized-channels id]) @@ -264,13 +275,14 @@ [preview-user-list users] [join-community community pending?]] [channel-list-component - {:on-categories-heights-changed #(on-categories-heights-changed %) - :on-first-channel-height-changed #(on-first-channel-height-changed %)} + {:on-category-layout on-category-layout + :community-id id + :on-first-channel-height-changed on-first-channel-height-changed} (add-on-press-handler-to-categorized-chats id chats-by-category)]])) (defn sticky-category-header [_] - (fn [{:keys [:enabled :label]}] + (fn [{:keys [enabled label]}] (when enabled [blur/view {:style style/blur-channel-header @@ -278,7 +290,7 @@ :blur-type :transparent :overlay-color :transparent} [quo/divider-label - {:label (:label label) + {:label label :chevron-position :left}]]))) (defn page-nav-right-section-buttons @@ -292,9 +304,18 @@ [options/community-options-bottom-sheet id])}])}]) +(defn pick-first-category-by-height + [scroll-height first-channel-height categories-heights] + (->> categories-heights + (sort-by (comp - second)) + (some (fn [[category height]] + (and + (>= scroll-height (+ height first-channel-height)) + category))))) + (defn community-card-page-view [{:keys [name images id]}] - (let [categories-heights (reagent/atom []) + (let [categories-heights (reagent/atom {}) first-channel-height (reagent/atom 0) scroll-height (reagent/atom 0) cover {:uri (get-in images [:banner :uri])} @@ -316,14 +337,21 @@ [sticky-category-header {:enabled (> @scroll-height @first-channel-height) - :label (last (filter (fn [{:keys [height]}] - (>= @scroll-height (+ height @first-channel-height))) - @categories-heights))}] + :label (pick-first-category-by-height + @scroll-height + @first-channel-height + @categories-heights)}] + [community-content community pending? - {:on-categories-heights-changed #(reset! categories-heights %) - :on-first-channel-height-changed #(reset! first-channel-height %)}]]))) + {:on-category-layout (partial add-category-height categories-heights) + :on-first-channel-height-changed + ;; Here we set the height of the component + ;; and we filter out the categories, as some might have been removed + (fn [height categories] + (swap! categories-heights select-keys categories) + (reset! first-channel-height height))}]]))) (defn overview [] diff --git a/src/status_im2/subs/communities.cljs b/src/status_im2/subs/communities.cljs index 6cfbf53b55..d69ac02be5 100644 --- a/src/status_im2/subs/communities.cljs +++ b/src/status_im2/subs/communities.cljs @@ -6,15 +6,6 @@ [status-im2.constants :as constants] [utils.i18n :as i18n])) -(re-frame/reg-sub - :communities - :<- [:raw-communities] - :<- [:communities/enabled?] - (fn [[raw-communities communities-enabled?]] - (if communities-enabled? - raw-communities - []))) - (re-frame/reg-sub :communities/fetching-community :<- [:communities/resolve-community-info] @@ -81,16 +72,13 @@ (re-frame/reg-sub :communities/featured-communities - :<- [:communities/enabled?] :<- [:search/home-filter] :<- [:communities] - (fn [[communities-enabled? search-filter communities]] + (fn [[search-filter communities]] (filterv - (fn [{:keys [name id]}] - (and (or communities-enabled? - (= id constants/status-community-id)) - (or (empty? search-filter) - (string/includes? (string/lower-case (str name)) search-filter)))) + (fn [{:keys [name]}] + (or (empty? search-filter) + (string/includes? (string/lower-case (str name)) search-filter))) (vals communities)))) (re-frame/reg-sub @@ -101,17 +89,13 @@ (re-frame/reg-sub :communities/communities - :<- [:communities/enabled?] :<- [:search/home-filter] :<- [:communities] - (fn [[communities-enabled? search-filter communities]] + (fn [[search-filter communities]] (filterv - (fn [{:keys [name id]}] - (and - (or communities-enabled? - (= id constants/status-community-id)) - (or (empty? search-filter) - (string/includes? (string/lower-case (str name)) search-filter)))) + (fn [{:keys [name]}] + (or (empty? search-filter) + (string/includes? (string/lower-case (str name)) search-filter))) (vals communities)))) (re-frame/reg-sub @@ -151,7 +135,7 @@ (re-frame/reg-sub :communities/home-item (fn [[_ community-id]] - [(re-frame/subscribe [:raw-communities]) + [(re-frame/subscribe [:communities]) (re-frame/subscribe [:communities/unviewed-counts community-id])]) (fn [[communities counts] [_ identity]] (community->home-item @@ -230,31 +214,62 @@ (sort-by :position) (into [])))) +(defn reduce-over-categories + [community-id + joined + categories + collapsed-categories + full-chats-data] + (fn [acc + [_ {:keys [name categoryID position id emoji can-post?]}]] + (let [category-id (if (seq categoryID) categoryID constants/empty-category-id) + {:keys [unviewed-messages-count + unviewed-mentions-count]} (get full-chats-data + (str community-id id)) + acc-with-category (if (get acc category-id) + acc + (assoc acc + category-id + (assoc + (or (get categories category-id) + {:name (i18n/label :t/none)}) + :collapsed? (get collapsed-categories + category-id) + :chats []))) + chat {:name name + :emoji emoji + :unread-messages? (pos? unviewed-messages-count) + :position position + :mentions-count (or unviewed-mentions-count 0) + :locked? (or (not joined) + (not can-post?)) + :id id}] + (update-in acc-with-category [category-id :chats] conj chat)))) + (re-frame/reg-sub :communities/categorized-channels (fn [[_ community-id]] [(re-frame/subscribe [:communities/community community-id]) - (re-frame/subscribe [:chats/chats])]) - (fn [[{:keys [joined categories chats]} full-chats-data] [_ community-id]] - (reduce - (fn [acc [_ {:keys [name categoryID id emoji can-post?]}]] - (let [category (keyword - (get-in categories - [categoryID :name] - (i18n/label :t/none))) - {:keys [unviewed-messages-count unviewed-mentions-count]} (get full-chats-data - (str community-id id))] - (update acc - category - #(vec (conj %1 %2)) - {:name name - :emoji emoji - :unread-messages? (pos? unviewed-messages-count) - :mentions-count (or unviewed-mentions-count 0) - :locked? (or (not joined) (not can-post?)) - :id id}))) - {} - chats))) + (re-frame/subscribe [:chats/chats]) + (re-frame/subscribe [:communities/collapsed-categories-for-community community-id])]) + (fn [[{:keys [joined categories chats]} full-chats-data collapsed-categories] [_ community-id]] + (let [reduce-fn (reduce-over-categories + community-id + joined + categories + collapsed-categories + full-chats-data) + categories-and-chats + (->> + chats + (reduce + reduce-fn + {}) + (sort-by (comp :position second)) + (map (fn [[k v]] + [k (update v :chats #(sort-by :position %))])))] + + categories-and-chats))) (re-frame/reg-sub :communities/users @@ -264,3 +279,9 @@ {:full-name "Marcus C"} {:full-name "MNO PQR"} {:full-name "STU VWX"}])) + +(re-frame/reg-sub + :communities/collapsed-categories-for-community + :<- [:communities/collapsed-categories] + (fn [collapsed-categories [_ community-id]] + (get collapsed-categories community-id))) diff --git a/src/status_im2/subs/communities_test.cljs b/src/status_im2/subs/communities_test.cljs index f0ec230896..ee18f14698 100644 --- a/src/status_im2/subs/communities_test.cljs +++ b/src/status_im2/subs/communities_test.cljs @@ -3,25 +3,22 @@ [re-frame.db :as rf-db] [test-helpers.unit :as h] status-im2.subs.communities + [status-im2.constants :as constants] [utils.re-frame :as rf] [utils.i18n :as i18n])) (use-fixtures :each - {:before #(reset! rf-db/app-db {:communities/enabled? true})}) + {:before #(reset! rf-db/app-db {})}) (def community-id "0x1") (h/deftest-sub :communities [sub-name] - (testing "returns empty vector if flag is disabled" - (swap! rf-db/app-db assoc :communities/enabled? false) - (is (= [] (rf/sub [sub-name])))) - - (testing "returns raw communities if flag is enabled" + (testing "returns raw communities" (let [raw-communities {"0x1" {:id "0x1"}}] (swap! rf-db/app-db assoc - :communities/enabled? true - :communities raw-communities) + :communities + raw-communities) (is (= raw-communities (rf/sub [sub-name])))))) (h/deftest-sub :communities/section-list @@ -85,13 +82,12 @@ [sub-name] (testing "Empty communities list" (swap! rf-db/app-db assoc - :communities/enabled? true - :communities {}) + :communities + {}) (is (= [] (rf/sub [sub-name])))) (testing "communities sorted by name" (swap! rf-db/app-db assoc - :communities/enabled? true :communities {"0x1" {:id "0x1" :name "Civilized monkeys"} "0x2" {:id "0x2" :name "Civilized rats"} @@ -105,56 +101,127 @@ [sub-name] (testing "Channels with categories" (swap! rf-db/app-db assoc - :communities/enabled? true :communities {"0x1" {:id "0x1" - :chats {"0x1" {:id "0x1" :name "chat1" :categoryID 1 :can-post? true} - "0x2" {:id "0x2" :name "chat2" :categoryID 1 :can-post? false} - "0x3" {:id "0x3" :name "chat3" :categoryID 2 :can-post? true}} - :categories {1 {:id 1 :name "category1"} - 2 {:id 2 :name "category2"}} + :chats {"0x1" {:id "0x1" :position 1 :name "chat1" :categoryID "1" :can-post? true} + "0x2" {:id "0x2" :position 2 :name "chat2" :categoryID "1" :can-post? false} + "0x3" {:id "0x3" :position 3 :name "chat3" :categoryID "2" :can-post? true}} + :categories {"1" {:id "1" + :position 2 + :name "category1"} + "2" {:id "2" + :position 1 + :name "category2"}} :joined true}}) (is - (= {:category1 - [{:name "chat1" :emoji nil :locked? false :id "0x1" :unread-messages? false :mentions-count 0} - {:name "chat2" :emoji nil :locked? true :id "0x2" :unread-messages? false :mentions-count 0}] - :category2 - [{:name "chat3" :emoji nil :locked? false :id "0x3" :unread-messages? false :mentions-count 0}]} + (= [["2" + {:id "2" + :name "category2" + :collapsed? nil + :position 1 + :chats [{:name "chat3" + :position 3 + :emoji nil + :locked? false + :id "0x3" + :unread-messages? false + :mentions-count 0}]}] + ["1" + {:id "1" + :name "category1" + :collapsed? nil + :position 2 + :chats [{:name "chat1" + :emoji nil + :position 1 + :locked? false + :id "0x1" + :unread-messages? false + :mentions-count 0} + {:name "chat2" + :emoji nil + :position 2 + :locked? true + :id "0x2" + :unread-messages? false + :mentions-count 0}]}]] (rf/sub [sub-name "0x1"])))) (testing "Channels without categories" (swap! rf-db/app-db assoc - :communities/enabled? true :communities {"0x1" {:id "0x1" - :chats {"0x1" {:id "0x1" :name "chat1" :categoryID 1 :can-post? true} - "0x2" {:id "0x2" :name "chat2" :categoryID 1 :can-post? false} - "0x3" {:id "0x3" :name "chat3" :can-post? true}} - :categories {1 {:id 1 :name "category1"} - 2 {:id 2 :name "category2"}} + :chats {"0x1" {:id "0x1" :position 1 :name "chat1" :categoryID "1" :can-post? true} + "0x2" {:id "0x2" :position 2 :name "chat2" :categoryID "1" :can-post? false} + "0x3" {:id "0x3" :position 3 :name "chat3" :can-post? true}} + :categories {"1" {:id "1" + :position 1 + :name "category1"} + "2" {:id "2" + :position 2 + :name "category2"}} :joined true}}) (is - (= {:category1 - [{:name "chat1" :emoji nil :locked? false :id "0x1" :unread-messages? false :mentions-count 0} - {:name "chat2" :emoji nil :locked? true :id "0x2" :unread-messages? false :mentions-count 0}] - (keyword (i18n/label :t/none)) - [{:name "chat3" :emoji nil :locked? false :id "0x3" :unread-messages? false :mentions-count 0}]} - (rf/sub [sub-name "0x1"])))) + (= + [[constants/empty-category-id + {:name (i18n/label :t/none) + :collapsed? nil + :chats [{:name "chat3" + :emoji nil + :position 3 + :locked? false + :id "0x3" + :unread-messages? false + :mentions-count 0}]}] + ["1" + {:name "category1" + :id "1" + :position 1 + :collapsed? nil + :chats [{:name "chat1" + :emoji nil + :position 1 + :locked? false + :id "0x1" + :unread-messages? false + :mentions-count 0} + {:name "chat2" + :emoji nil + :position 2 + :locked? true + :id "0x2" + :unread-messages? false + :mentions-count 0}]}]] + (rf/sub [sub-name "0x1"])))) (testing "Unread messages" (swap! rf-db/app-db assoc - :communities/enabled? true :communities {"0x1" {:id "0x1" - :chats {"0x1" {:id "0x1" :name "chat1" :categoryID 1 :can-post? true} - "0x2" {:id "0x2" :name "chat2" :categoryID 1 :can-post? false}} - :categories {1 {:id 1 :name "category1"}} + :chats {"0x1" {:id "0x1" :position 1 :name "chat1" :categoryID "1" :can-post? true} + "0x2" {:id "0x2" :position 2 :name "chat2" :categoryID "1" :can-post? false}} + :categories {"1" {:id "1" :name "category1"}} :joined true}} :chats {"0x10x1" {:unviewed-messages-count 1 :unviewed-mentions-count 2} "0x10x2" {:unviewed-messages-count 0 :unviewed-mentions-count 0}}) (is - (= {:category1 - [{:name "chat1" :emoji nil :locked? false :id "0x1" :unread-messages? true :mentions-count 2} - {:name "chat2" :emoji nil :locked? true :id "0x2" :unread-messages? false :mentions-count 0}]} + (= [["1" + {:name "category1" + :id "1" + :collapsed? nil + :chats [{:name "chat1" + :emoji nil + :position 1 + :locked? false + :id "0x1" + :unread-messages? true + :mentions-count 2} + {:name "chat2" + :emoji nil + :position 2 + :locked? true + :id "0x2" + :unread-messages? false + :mentions-count 0}]}]] (rf/sub [sub-name "0x1"]))))) (h/deftest-sub :communities/my-pending-requests-to-join diff --git a/src/status_im2/subs/root.cljs b/src/status_im2/subs/root.cljs index b8e9889dca..0db8d4e438 100644 --- a/src/status_im2/subs/root.cljs +++ b/src/status_im2/subs/root.cljs @@ -238,14 +238,14 @@ ;; communities -(reg-root-key-sub :raw-communities :communities) +(reg-root-key-sub :communities :communities) (reg-root-key-sub :communities/create :communities/create) (reg-root-key-sub :communities/create-channel :communities/create-channel) (reg-root-key-sub :communities/requests-to-join :communities/requests-to-join) (reg-root-key-sub :communities/community-id-input :communities/community-id-input) -(reg-root-key-sub :communities/enabled? :communities/enabled?) (reg-root-key-sub :communities/resolve-community-info :communities/resolve-community-info) (reg-root-key-sub :communities/my-pending-requests-to-join :communities/my-pending-requests-to-join) +(reg-root-key-sub :communities/collapsed-categories :communities/collapsed-categories) (reg-root-key-sub :activity-center :activity-center) @@ -254,6 +254,7 @@ (reg-root-key-sub :backup/performing-backup :backup/performing-backup) + ;; wallet connect (reg-root-key-sub :wallet-connect/proposal-metadata :wallet-connect/proposal-metadata) (reg-root-key-sub :wallet-connect/enabled? :wallet-connect/enabled?) diff --git a/status-go-version.json b/status-go-version.json index 85587dd63c..523d030498 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -3,7 +3,7 @@ "_comment": "Instead use: scripts/update-status-go.sh ", "owner": "status-im", "repo": "status-go", - "version": "v0.138.3", - "commit-sha1": "290579f74f10a374ffb8c37abc47dbe2c1e90f5d", - "src-sha256": "0vgs3m1fbyri9r1wqxfanzxlx24yzx9zaabflk26qc9d4pclmi7i" + "version": "v0.138.4", + "commit-sha1": "44a0f5b74d31fe31bd77b565ae679f839ea40e94", + "src-sha256": "05j9y1fg23xgqj4348cjpn7xm6jmhzj9xz2zwhvhagnq1c28800c" }