diff --git a/src/status_im/activity_center/core.cljs b/src/status_im/activity_center/core.cljs index d31200de9b..53b61d46b9 100644 --- a/src/status_im/activity_center/core.cljs +++ b/src/status_im/activity_center/core.cljs @@ -38,8 +38,7 @@ ~excessively~ big, this implementation will probably need to be revisited." [db-notifications new-notifications] (reduce (fn [acc {:keys [id type read] :as notification}] - (let [filter-status (if read :read :unread) - remove-notification (fn [data] + (let [remove-notification (fn [data] (remove #(= id (:id %)) data)) insert-and-sort (fn [data] (->> notification @@ -47,14 +46,17 @@ (sort-by (juxt :timestamp :id)) reverse))] (as-> acc $ - (update-in $ [type :read :data] remove-notification) + (update-in $ [type :all :data] remove-notification) + (update-in $ [types/no-type :all :data] remove-notification) (update-in $ [type :unread :data] remove-notification) - (update-in $ [types/no-type :read :data] remove-notification) (update-in $ [types/no-type :unread :data] remove-notification) (if (or (:dismissed notification) (:accepted notification)) $ - (-> $ (update-in [type filter-status :data] insert-and-sort) - (update-in [types/no-type filter-status :data] insert-and-sort)))))) + (cond-> (-> $ + (update-in [type :all :data] insert-and-sort) + (update-in [types/no-type :all :data] insert-and-sort)) + (not read) (update-in [type :unread :data] insert-and-sort) + (not read) (update-in [types/no-type :unread :data] insert-and-sort)))))) db-notifications new-notifications)) @@ -137,13 +139,11 @@ (and (some? cursor) (not= cursor start-or-end-cursor))) -(def ^:const status-read 1) (def ^:const status-unread 2) (def ^:const status-all 3) (defn status [filter-status] (case filter-status - :read status-read :unread status-unread :all status-all 99)) diff --git a/src/status_im/activity_center/core_test.cljs b/src/status_im/activity_center/core_test.cljs index 334dedad24..79afa55d49 100644 --- a/src/status_im/activity_center/core_test.cljs +++ b/src/status_im/activity_center/core_test.cljs @@ -7,7 +7,7 @@ [status-im.ethereum.json-rpc :as json-rpc] status-im.events [status-im.test-helpers :as h] - [status-im.utils.config :as config])) + [status-im2.setup.config :as config])) (defn setup [] (h/register-helper-events) @@ -85,10 +85,10 @@ (rf/dispatch event) (is (= {types/no-type - {:read {:data [contact-verification-expected-notification]} + {:all {:data [contact-verification-expected-notification]} :unread {:data []}} types/contact-verification - {:read {:data [contact-verification-expected-notification]} + {:all {:data [contact-verification-expected-notification]} :unread {:data []}}} (get-in (h/db) [:activity-center :notifications]))) @@ -158,12 +158,12 @@ (rf-test/run-test-sync (setup) (let [notifications {types/one-to-one-chat - {:read {:cursor "" + {:all {:cursor "" :data [{:id "0x1" :read true :type types/one-to-one-chat} {:id "0x2" - :read true + :read false :type types/one-to-one-chat}]} :unread {:cursor "" :data [{:id "0x3" @@ -183,216 +183,112 @@ (testing "removes dismissed or accepted notifications" (rf-test/run-test-sync (setup) - (rf/dispatch [:test/assoc-in [:activity-center :notifications] - {types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x1" :read true :type types/one-to-one-chat} - {:id "0x2" :read true :type types/one-to-one-chat}]} - :unread {:cursor "" - :data [{:id "0x3" :read false :type types/one-to-one-chat}]}} - types/private-group-chat - {:unread {:cursor "" - :data [{:id "0x4" :read false :type types/private-group-chat} - {:id "0x6" :read false :type types/private-group-chat}]}}}]) + (let [notif-1 {:id "0x1" :read true :type types/one-to-one-chat} + notif-2 {:id "0x2" :read false :type types/one-to-one-chat} + notif-3 {:id "0x3" :read false :type types/one-to-one-chat} + notif-4 {:id "0x4" :read false :type types/private-group-chat} + notif-5 {:id "0x5" :read true :type types/private-group-chat} + notif-6 {:id "0x6" :read false :type types/private-group-chat}] + (rf/dispatch [:test/assoc-in [:activity-center :notifications] + {types/one-to-one-chat + {:all {:cursor "" :data [notif-1 notif-2]} + :unread {:cursor "" :data [notif-3]}} + types/private-group-chat + {:unread {:cursor "" :data [notif-4 notif-6]}}}]) - (rf/dispatch [:activity-center.notifications/reconcile - [{:id "0x1" - :read true - :type types/one-to-one-chat - :dismissed true} - {:id "0x3" - :read false - :type types/one-to-one-chat - :accepted true} - {:id "0x4" - :read false - :type types/private-group-chat - :dismissed true} - {:id "0x5" - :read false - :type types/private-group-chat - :accepted true}]]) + (rf/dispatch [:activity-center.notifications/reconcile + [(assoc notif-1 :dismissed true) + (assoc notif-3 :accepted true) + (assoc notif-4 :dismissed true) + notif-5]]) - (is (= {types/no-type - {:read {:data []} - :unread {:data []}} - - types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x2" - :read true - :type types/one-to-one-chat}]} - :unread {:cursor "" - :data []}} - types/private-group-chat - {:read {:data []} - :unread {:cursor "" - :data [{:id "0x6" - :read false - :type types/private-group-chat}]}}} - (get-in (h/db) [:activity-center :notifications]))))) + (is (= {types/no-type + {:all {:data [notif-5]} + :unread {:data []}} + types/one-to-one-chat + {:all {:cursor "" :data [notif-2]} + :unread {:cursor "" :data []}} + types/private-group-chat + {:all {:data [notif-5]} + :unread {:cursor "" :data [notif-6]}}} + (get-in (h/db) [:activity-center :notifications])))))) (testing "replaces old notifications with newly arrived ones" (rf-test/run-test-sync (setup) - (rf/dispatch [:test/assoc-in [:activity-center :notifications] - {types/no-type - {:read {:cursor "" - :data [{:id "0x1" - :read true - :type types/one-to-one-chat}]} - :unread {:cursor "" - :data [{:id "0x4" - :read false - :type types/private-group-chat} - {:id "0x6" - :read false - :type types/private-group-chat}]}} - types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x1" - :read true - :type types/one-to-one-chat}]}} - types/private-group-chat - {:unread {:cursor "" - :data [{:id "0x4" - :read false - :type types/private-group-chat} - {:id "0x6" - :read false - :type types/private-group-chat}]}}}]) + (let [notif-1 {:id "0x1" :read true :type types/one-to-one-chat} + notif-4 {:id "0x4" :read false :type types/private-group-chat} + notif-6 {:id "0x6" :read false :type types/private-group-chat} + new-notif-1 (assoc notif-1 :last-message {}) + new-notif-4 (assoc notif-4 :author "0xabc")] + (rf/dispatch [:test/assoc-in [:activity-center :notifications] + {types/no-type + {:all {:cursor "" :data [notif-1]} + :unread {:cursor "" :data [notif-4 notif-6]}} + types/one-to-one-chat + {:all {:cursor "" :data [notif-1]}} + types/private-group-chat + {:unread {:cursor "" :data [notif-4 notif-6]}}}]) - (rf/dispatch [:activity-center.notifications/reconcile - [{:id "0x1" - :read true - :type types/one-to-one-chat - :last-message {}} - {:id "0x4" - :read false - :type types/private-group-chat - :author "0xabc"} - {:id "0x6" - :read false - :type types/private-group-chat}]]) + (rf/dispatch [:activity-center.notifications/reconcile [new-notif-1 new-notif-4 notif-6]]) - (is (= {types/no-type - {:read {:cursor "" - :data [{:id "0x1" - :read true - :type types/one-to-one-chat - :last-message {}}]} - :unread {:cursor "" - :data [{:id "0x6" - :read false - :type types/private-group-chat} - {:id "0x4" - :read false - :type types/private-group-chat - :author "0xabc"}]}} - types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x1" - :read true - :type types/one-to-one-chat - :last-message {}}]} - :unread {:data []}} - types/private-group-chat - {:read {:data []} - :unread {:cursor "" - :data [{:id "0x6" - :read false - :type types/private-group-chat} - {:id "0x4" - :read false - :type types/private-group-chat - :author "0xabc"}]}}} - (get-in (h/db) [:activity-center :notifications]))))) + (is (= {types/no-type + {:all {:cursor "" :data [notif-6 new-notif-4 new-notif-1]} + :unread {:cursor "" :data [notif-6 new-notif-4]}} + types/one-to-one-chat + {:all {:cursor "" :data [new-notif-1]} + :unread {:data []}} + types/private-group-chat + {:all {:data [notif-6 new-notif-4]} + :unread {:cursor "" :data [notif-6 new-notif-4]}}} + (get-in (h/db) [:activity-center :notifications])))))) (testing "reconciles notifications that switched their read/unread status" (rf-test/run-test-sync (setup) - (rf/dispatch [:test/assoc-in [:activity-center :notifications] - {types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x1" - :read true - :type types/one-to-one-chat}]}}}]) + (let [notif-1 {:id "0x1" :read true :type types/one-to-one-chat} + new-notif-1 (assoc notif-1 :read false)] + (rf/dispatch [:test/assoc-in [:activity-center :notifications] + {types/one-to-one-chat + {:all {:cursor "" :data [notif-1]}}}]) - (rf/dispatch [:activity-center.notifications/reconcile - [{:id "0x1" - :read false - :type types/one-to-one-chat}]]) + (rf/dispatch [:activity-center.notifications/reconcile [new-notif-1]]) - (is (= {types/no-type - {:read {:data []} - :unread {:data [{:id "0x1" - :read false - :type types/one-to-one-chat}]}} + (is (= {types/no-type + {:all {:data [new-notif-1]} + :unread {:data [new-notif-1]}} - types/one-to-one-chat - {:read {:cursor "" - :data []} - :unread {:data [{:id "0x1" - :read false - :type types/one-to-one-chat}]}}} - (get-in (h/db) [:activity-center :notifications]))))) + types/one-to-one-chat + {:all {:cursor "" :data [new-notif-1]} + :unread {:data [new-notif-1]}}} + (get-in (h/db) [:activity-center :notifications])))))) ;; Sorting by timestamp and ID is compatible with what the backend does when ;; returning paginated results. (testing "sorts notifications by timestamp and id in descending order" (rf-test/run-test-sync (setup) - (rf/dispatch [:test/assoc-in [:activity-center :notifications] - {types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x1" :read true :type types/one-to-one-chat :timestamp 1} - {:id "0x2" :read true :type types/one-to-one-chat :timestamp 1}]} - :unread {:cursor "" - :data [{:id "0x3" :read false :type types/one-to-one-chat :timestamp 50} - {:id "0x4" :read false :type types/one-to-one-chat :timestamp 100} - {:id "0x5" :read false :type types/one-to-one-chat :timestamp 100}]}}}]) + (let [notif-1 {:id "0x1" :read true :type types/one-to-one-chat :timestamp 1} + notif-2 {:id "0x2" :read true :type types/one-to-one-chat :timestamp 1} + notif-3 {:id "0x3" :read false :type types/one-to-one-chat :timestamp 50} + notif-4 {:id "0x4" :read false :type types/one-to-one-chat :timestamp 100} + notif-5 {:id "0x5" :read false :type types/one-to-one-chat :timestamp 100} + new-notif-1 (assoc notif-1 :last-message {}) + new-notif-4 (assoc notif-4 :last-message {})] + (rf/dispatch [:test/assoc-in [:activity-center :notifications] + {types/one-to-one-chat + {:all {:cursor "" :data [notif-1 notif-2]} + :unread {:cursor "" :data [notif-3 notif-4 notif-5]}}}]) - (rf/dispatch [:activity-center.notifications/reconcile - [{:id "0x1" :read true :type types/one-to-one-chat :timestamp 1 :last-message {}} - {:id "0x4" :read false :type types/one-to-one-chat :timestamp 100 :last-message {}}]]) + (rf/dispatch [:activity-center.notifications/reconcile [new-notif-1 new-notif-4]]) - (is (= {types/no-type - {:read {:data [{:id "0x1" - :read true - :type types/one-to-one-chat - :timestamp 1 - :last-message {}}]} - :unread {:data [{:id "0x4" - :read false - :type types/one-to-one-chat - :timestamp 100 - :last-message {}}]}} - types/one-to-one-chat - {:read {:cursor "" - :data [{:id "0x2" - :read true - :type types/one-to-one-chat - :timestamp 1} - {:id "0x1" - :read true - :type types/one-to-one-chat - :timestamp 1 - :last-message {}}]} - :unread {:cursor "" - :data [{:id "0x5" - :read false - :type types/one-to-one-chat - :timestamp 100} - {:id "0x4" - :read false - :type types/one-to-one-chat - :timestamp 100 - :last-message {}} - {:id "0x3" - :read false - :type types/one-to-one-chat - :timestamp 50}]}}} - (get-in (h/db) [:activity-center :notifications]))))))) + (is (= {types/no-type + {:all {:data [new-notif-4 new-notif-1]} + :unread {:data [new-notif-4]}} + types/one-to-one-chat + {:all {:cursor "" :data [new-notif-4 notif-2 new-notif-1]} + :unread {:cursor "" :data [notif-5 new-notif-4 notif-3]}}} + (get-in (h/db) [:activity-center :notifications])))))))) ;;;; Notifications fetching and pagination @@ -510,12 +406,12 @@ (let [spy-queue (atom [])] (h/spy-fx spy-queue ::json-rpc/call) (rf/dispatch [:test/assoc-in [:activity-center :filter :status] - :read]) + :all]) (rf/dispatch [:test/assoc-in [:activity-center :filter :type] types/one-to-one-chat]) - (rf/dispatch [:test/assoc-in [:activity-center :notifications types/one-to-one-chat :read :cursor] + (rf/dispatch [:test/assoc-in [:activity-center :notifications types/one-to-one-chat :all :cursor] "10"]) - (rf/dispatch [:test/assoc-in [:activity-center :notifications types/one-to-one-chat :read :loading?] + (rf/dispatch [:test/assoc-in [:activity-center :notifications types/one-to-one-chat :all :loading?] true]) (rf/dispatch [:activity-center.notifications/fetch-next-page]) diff --git a/src/status_im/data_store/activities.cljs b/src/status_im/data_store/activities.cljs index b6e77b2887..8aa85eec92 100644 --- a/src/status_im/data_store/activities.cljs +++ b/src/status_im/data_store/activities.cljs @@ -4,7 +4,7 @@ [status-im.constants :as constants] [status-im.activity-center.notification-types :as notification-types] [status-im.data-store.messages :as messages] - [status-im.utils.config :as config])) + [status-im2.setup.config :as config])) (defn- rpc->type [{:keys [type name] :as chat}] (case type diff --git a/src/status_im/data_store/activities_test.cljs b/src/status_im/data_store/activities_test.cljs index adde816019..9960824c98 100644 --- a/src/status_im/data_store/activities_test.cljs +++ b/src/status_im/data_store/activities_test.cljs @@ -3,7 +3,7 @@ [status-im.constants :as constants] [status-im.activity-center.notification-types :as notification-types] [status-im.data-store.activities :as store] - [status-im.utils.config :as config])) + [status-im2.setup.config :as config])) (def chat-id "0x04c66155") diff --git a/src/status_im/transport/message/core.cljs b/src/status_im/transport/message/core.cljs index 81473f2541..722eecfb4e 100644 --- a/src/status_im/transport/message/core.cljs +++ b/src/status_im/transport/message/core.cljs @@ -5,7 +5,7 @@ [status-im.chat.models.pin-message :as models.pin-message] [status-im.chat.models :as models.chat] [status-im.chat.models.reactions :as models.reactions] - [status-im.utils.config :as config] + [status-im2.setup.config :as config] [status-im.contact.core :as models.contact] [status-im.communities.core :as models.communities] [status-im.pairing.core :as models.pairing] diff --git a/src/status_im/ui/screens/home/views.cljs b/src/status_im/ui/screens/home/views.cljs index ea4ee6bc74..9a8f77cde1 100644 --- a/src/status_im/ui/screens/home/views.cljs +++ b/src/status_im/ui/screens/home/views.cljs @@ -22,7 +22,7 @@ [status-im.ui.components.plus-button :as components.plus-button] [status-im.ui.screens.chat.sheets :as sheets] [status-im.ui.components.invite.views :as invite] - [status-im.utils.config :as config] + [status-im2.setup.config :as config] [quo2.components.markdown.text :as quo2.text] [status-im.qr-scanner.core :as qr-scanner] [status-im.ui.components.chat-icon.screen :as chat-icon.screen] diff --git a/src/status_im/utils/config.cljs b/src/status_im/utils/config.cljs index 561832f9fe..8c6682bf7f 100644 --- a/src/status_im/utils/config.cljs +++ b/src/status_im/utils/config.cljs @@ -145,7 +145,3 @@ ;;TODO for development only should be removed in status 2.0 (def new-ui-enabled? true) - -;; TODO: Remove this (highly) temporary flag once the new Activity Center is -;; usable enough to replace the old one **in the new UI**. -(def new-activity-center-enabled? false)