Add featured-community data (#16232)
This commit is contained in:
parent
c4b13eb043
commit
d91e67cae7
|
@ -42,6 +42,7 @@
|
|||
[status-im2.contexts.contacts.events :as contacts]
|
||||
[status-im2.navigation.events :as navigation]
|
||||
[status-im2.contexts.shell.constants :as shell.constants]
|
||||
[status-im2.contexts.communities.discover.events :as contract-communities]
|
||||
[status-im2.common.log :as logging]
|
||||
[taoensso.timbre :as log]
|
||||
[status-im2.contexts.shell.utils :as shell.utils]
|
||||
|
@ -449,6 +450,7 @@
|
|||
(initialize-wallet-connect)
|
||||
(get-node-config)
|
||||
(communities/fetch)
|
||||
(contract-communities/fetch-contract-communities)
|
||||
(communities/fetch-collapsed-community-categories)
|
||||
(communities/check-and-delete-pending-request-to-join)
|
||||
(logging/set-log-level (:log-level multiaccount))
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
(ns status-im2.contexts.communities.discover.events
|
||||
(:require [camel-snake-kebab.core :as csk]
|
||||
[clojure.string :as string]
|
||||
[taoensso.timbre :as log]
|
||||
[utils.re-frame :as rf]))
|
||||
|
||||
(defn rename-contract-community-key
|
||||
[k]
|
||||
(let [s (name k)
|
||||
lower-cased (csk/->kebab-case-string s)
|
||||
starts-with-digit? (re-matches #"^\d.*" s)
|
||||
predicate? (some #(string/starts-with? lower-cased %)
|
||||
["can-" "is-"])]
|
||||
(cond starts-with-digit? s
|
||||
predicate? (keyword (str lower-cased "?"))
|
||||
:else (keyword lower-cased))))
|
||||
|
||||
(defn rename-contract-community-keys
|
||||
[m]
|
||||
(reduce (fn [acc [k v]]
|
||||
(let [new-key (if (keyword? k) (rename-contract-community-key k) k)]
|
||||
(cond
|
||||
(map? v) (assoc acc new-key (rename-contract-community-keys v))
|
||||
:else (assoc acc new-key v))))
|
||||
{}
|
||||
m))
|
||||
|
||||
(rf/defn handle-contract-communities
|
||||
{:events [:fetched-contract-communities]}
|
||||
[{:keys [db]} contract-communities]
|
||||
(let [cc (rename-contract-community-keys contract-communities)
|
||||
featured (:contract-featured-communities cc)
|
||||
other (remove (set featured) (:contract-communities cc))]
|
||||
{:db (assoc db
|
||||
:contract-communities
|
||||
{:featured (select-keys (:communities cc) featured)
|
||||
:other (select-keys (:communities cc) other)})}))
|
||||
|
||||
(rf/defn fetch-contract-communities
|
||||
[_]
|
||||
{:json-rpc/call [{:method "wakuext_curatedCommunities"
|
||||
:params []
|
||||
:on-success #(rf/dispatch [:fetched-contract-communities %])
|
||||
:on-error #(log/error "failed to fetch contract communities" %)}]})
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
(ns status-im2.contexts.communities.discover.events-test
|
||||
(:require [cljs.test :refer-macros [deftest are]]
|
||||
[status-im2.contexts.communities.discover.events :as events]))
|
||||
|
||||
(deftest rename-contract-community-key-test
|
||||
(are [i e] (= (events/rename-contract-community-key i) e)
|
||||
:foo :foo
|
||||
:fooBar :foo-bar
|
||||
:fooBarBaz :foo-bar-baz
|
||||
:isFoo :is-foo?
|
||||
:isFooBar :is-foo-bar?
|
||||
:canFoo :can-foo?
|
||||
:canFooBar :can-foo-bar?
|
||||
:0x025d27e58 "0x025d27e58"
|
||||
:093b4684-92f0 "093b4684-92f0"
|
||||
:3f9e77b8-97c7 "3f9e77b8-97c7"))
|
||||
|
||||
(deftest rename-contract-community-keys-test
|
||||
(are [i e] (= (events/rename-contract-community-keys i) e)
|
||||
|
||||
{:contractCommunities
|
||||
["0x032aa2439b14eb2caaf724223951da89de1530fbfa5d5a639b93b82cd5341713fd"
|
||||
"0x025d27e58f1bece7d9675e6fe907da6e3b5007f06a327dd20db04d68851b9c153d"
|
||||
"0x03769999b26cfd88788c882b56232fa5f58735795bdd463820d127b9a23d4415d4"]
|
||||
:contractFeaturedCommunities
|
||||
["0x03769999b26cfd88788c882b56232fa5f58735795bdd463820d127b9a23d4415d4"]
|
||||
:communities
|
||||
{:0x025d27e58f1bece7d9675e6fe907da6e3b5007f06a327dd20db04d68851b9c153d
|
||||
{:name "foo"
|
||||
:tokenPermissions nil
|
||||
:isMember false
|
||||
:canDeleteMessageForEveryone false}
|
||||
:0x032aa2439b14eb2caaf724223951da89de1530fbfa5d5a639b93b82cd5341713fd
|
||||
{:name "bar"
|
||||
:adminSettings {:pinMessageAllMembersEnabled false}
|
||||
:chats
|
||||
{:8aa21892-a768-488a-8655-7ed31f527642
|
||||
{:name "web"
|
||||
:categoryID "d87621f7-315a-4579-a800-fde42d86ddf2"
|
||||
:canPost false}
|
||||
:6efc1767-22e5-46c1-9865-87206e04c9f9
|
||||
{:name "mobile-ui"
|
||||
:categoryID "7445461a-bd10-4c54-86fe-70403913faf4"
|
||||
:canPost false}}}
|
||||
:0x03769999b26cfd88788c882b56232fa5f58735795bdd463820d127b9a23d4415d4
|
||||
{:name "baz"
|
||||
:categories
|
||||
{:18444776-8720-4955-b200-a55758889f43 {:name "bar" :position 0}
|
||||
:093b4684-92f0-42dd-977c-05affc451ec8 {:name "foo" :position 1}}
|
||||
:members
|
||||
{:0x04a25e0a58ab97c6f93298ad87ab73aae5995365088a1ba150633ea25ff0b80cc1ddba18b122d117e477963cec1962219362a9a77226a6bf9a15d8d02c35fe8c9b
|
||||
{}
|
||||
:0x0490d2bb47388504e4b615052566e5830662bf202eb179251e9118587ce628c6c76e1f4550f9cd52058cf9dbdb5b788eea10b7c765cd7565675daa5f822acab8f4
|
||||
{}}}}
|
||||
:unknownCommunities nil}
|
||||
|
||||
{:contract-communities
|
||||
["0x032aa2439b14eb2caaf724223951da89de1530fbfa5d5a639b93b82cd5341713fd"
|
||||
"0x025d27e58f1bece7d9675e6fe907da6e3b5007f06a327dd20db04d68851b9c153d"
|
||||
"0x03769999b26cfd88788c882b56232fa5f58735795bdd463820d127b9a23d4415d4"]
|
||||
:contract-featured-communities
|
||||
["0x03769999b26cfd88788c882b56232fa5f58735795bdd463820d127b9a23d4415d4"]
|
||||
:communities
|
||||
{"0x025d27e58f1bece7d9675e6fe907da6e3b5007f06a327dd20db04d68851b9c153d"
|
||||
{:name "foo"
|
||||
:token-permissions nil
|
||||
:is-member? false
|
||||
:can-delete-message-for-everyone? false}
|
||||
"0x032aa2439b14eb2caaf724223951da89de1530fbfa5d5a639b93b82cd5341713fd"
|
||||
{:name "bar"
|
||||
:admin-settings {:pin-message-all-members-enabled false}
|
||||
:chats
|
||||
{"8aa21892-a768-488a-8655-7ed31f527642"
|
||||
{:name "web"
|
||||
:category-id "d87621f7-315a-4579-a800-fde42d86ddf2"
|
||||
:can-post? false}
|
||||
"6efc1767-22e5-46c1-9865-87206e04c9f9"
|
||||
{:name "mobile-ui"
|
||||
:category-id "7445461a-bd10-4c54-86fe-70403913faf4"
|
||||
:can-post? false}}}
|
||||
"0x03769999b26cfd88788c882b56232fa5f58735795bdd463820d127b9a23d4415d4"
|
||||
{:name "baz"
|
||||
:categories
|
||||
{"18444776-8720-4955-b200-a55758889f43" {:name "bar" :position 0}
|
||||
"093b4684-92f0-42dd-977c-05affc451ec8" {:name "foo" :position 1}}
|
||||
:members
|
||||
{"0x04a25e0a58ab97c6f93298ad87ab73aae5995365088a1ba150633ea25ff0b80cc1ddba18b122d117e477963cec1962219362a9a77226a6bf9a15d8d02c35fe8c9b"
|
||||
{}
|
||||
"0x0490d2bb47388504e4b615052566e5830662bf202eb179251e9118587ce628c6c76e1f4550f9cd52058cf9dbdb5b788eea10b7c765cd7565675daa5f822acab8f4"
|
||||
{}}}}
|
||||
:unknown-communities nil}))
|
|
@ -88,7 +88,6 @@
|
|||
:label (i18n/label :t/gated)
|
||||
:accessibility-label :gated-communities-tab}]}]])
|
||||
|
||||
|
||||
(defn featured-list
|
||||
[communities view-type]
|
||||
(let [view-size (reagent/atom 0)]
|
||||
|
@ -158,7 +157,7 @@
|
|||
[rn/view {:style {:flex 1}}
|
||||
(case @selected-tab
|
||||
:all
|
||||
(other-communities-list {:communities (rf/sub [:communities/sorted-communities])
|
||||
(other-communities-list {:communities (rf/sub [:communities/other-contract-communities])
|
||||
:view-type view-type})
|
||||
|
||||
:open
|
||||
|
@ -227,7 +226,7 @@
|
|||
|
||||
(defn discover
|
||||
[]
|
||||
(let [featured-communities (rf/sub [:communities/featured-communities])]
|
||||
(let [featured-communities (rf/sub [:communities/featured-contract-communities])]
|
||||
[rn/view
|
||||
{:style (style/discover-screen-container (colors/theme-colors
|
||||
colors/white
|
||||
|
|
|
@ -71,16 +71,16 @@
|
|||
(sort-by #(visibility-status-utils/visibility-status-order (get % 0)))))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:communities/featured-communities
|
||||
:<- [:communities]
|
||||
(fn [communities]
|
||||
(vals communities)))
|
||||
:communities/featured-contract-communities
|
||||
:<- [:contract-communities]
|
||||
(fn [contract-communities]
|
||||
(sort-by :name (vals (:featured contract-communities)))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:communities/sorted-communities
|
||||
:<- [:communities]
|
||||
(fn [communities]
|
||||
(sort-by :name (vals communities))))
|
||||
:communities/other-contract-communities
|
||||
:<- [:contract-communities]
|
||||
(fn [contract-communities]
|
||||
(sort-by :name (vals (:other contract-communities)))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:communities/community-ids
|
||||
|
|
|
@ -78,25 +78,6 @@
|
|||
:unviewed-mentions-count 0}
|
||||
(rf/sub [sub-name community-id])))))
|
||||
|
||||
(h/deftest-sub :communities/sorted-communities
|
||||
[sub-name]
|
||||
(testing "Empty communities list"
|
||||
(swap! rf-db/app-db assoc
|
||||
:communities
|
||||
{})
|
||||
(is (= []
|
||||
(rf/sub [sub-name]))))
|
||||
(testing "communities sorted by name"
|
||||
(swap! rf-db/app-db assoc
|
||||
:communities
|
||||
{"0x1" {:id "0x1" :name "Civilized monkeys"}
|
||||
"0x2" {:id "0x2" :name "Civilized rats"}
|
||||
"0x3" {:id "0x3" :name "Civilized dolphins"}})
|
||||
(is (= [{:id "0x3" :name "Civilized dolphins"}
|
||||
{:id "0x1" :name "Civilized monkeys"}
|
||||
{:id "0x2" :name "Civilized rats"}]
|
||||
(rf/sub [sub-name])))))
|
||||
|
||||
(h/deftest-sub :communities/categorized-channels
|
||||
[sub-name]
|
||||
(testing "Channels with categories"
|
||||
|
|
|
@ -261,6 +261,8 @@
|
|||
(reg-root-key-sub :communities/collapsed-categories :communities/collapsed-categories)
|
||||
(reg-root-key-sub :communities/selected-tab :communities/selected-tab)
|
||||
|
||||
(reg-root-key-sub :contract-communities :contract-communities)
|
||||
|
||||
(reg-root-key-sub :activity-center :activity-center)
|
||||
|
||||
(reg-root-key-sub :bug-report/description-error :bug-report/description-error)
|
||||
|
|
Loading…
Reference in New Issue