From 6b073fe3504d2b978c056d47988a6a0bf16065c0 Mon Sep 17 00:00:00 2001 From: Roman Volosovskyi Date: Mon, 23 Apr 2018 12:10:57 +0200 Subject: [PATCH] move merge-fx to separate ns --- src/status_im/chat/events.cljs | 29 ++++++++++--------- src/status_im/chat/events/console.cljs | 4 +-- src/status_im/chat/models/message.cljs | 12 ++++---- src/status_im/protocol/handlers.cljs | 3 +- src/status_im/transport/core.cljs | 3 +- .../transport/message/v1/contact.cljs | 23 ++++++++------- .../transport/message/v1/group_chat.cljs | 15 +++++----- .../transport/message/v1/public_chat.cljs | 5 ++-- src/status_im/ui/screens/accounts/events.cljs | 5 ++-- src/status_im/ui/screens/contacts/core.cljs | 9 +++--- src/status_im/ui/screens/contacts/events.cljs | 9 +++--- src/status_im/ui/screens/events.cljs | 3 +- .../screens/group/chat_settings/events.cljs | 7 +++-- src/status_im/ui/screens/navigation.cljs | 5 ++-- .../ui/screens/network_settings/events.cljs | 5 ++-- .../offline_messaging_settings/events.cljs | 3 +- src/status_im/ui/screens/profile/events.cljs | 7 +++-- .../ui/screens/wallet/request/events.cljs | 3 +- src/status_im/utils/handlers.cljs | 17 +---------- .../{handlers.clj => handlers_macro.clj} | 2 +- src/status_im/utils/handlers_macro.cljs | 16 ++++++++++ 21 files changed, 101 insertions(+), 84 deletions(-) rename src/status_im/utils/{handlers.clj => handlers_macro.clj} (98%) create mode 100644 src/status_im/utils/handlers_macro.cljs diff --git a/src/status_im/chat/events.cljs b/src/status_im/chat/events.cljs index cfae96657e..deee7425b5 100644 --- a/src/status_im/chat/events.cljs +++ b/src/status_im/chat/events.cljs @@ -12,6 +12,7 @@ [status-im.ui.screens.navigation :as navigation] [status-im.ui.screens.group.events :as group.events] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.utils.contacts :as utils.contacts] [status-im.transport.core :as transport] [status-im.transport.message.core :as transport.message] @@ -114,7 +115,7 @@ existing-contacts (:contacts/contacts db) contacts-to-add (select-keys new-contacts (set/difference (set (keys new-contacts)) (set (keys existing-contacts))))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (update db :contacts/contacts merge contacts-to-add) :data-store/save-contacts (vals contacts-to-add)} (events.loading/load-commands)))) @@ -149,7 +150,7 @@ (-> chat-messages keys set)))))) {} all-stored-chats)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc db :chats chats)} (init-console-chat) (group.events/add-default-groups) @@ -192,7 +193,7 @@ (get-in db messages-path))] (when (or (seq unseen-messages-ids) (seq unseen-system-messages-ids)) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (-> (reduce (fn [new-db message-id] (assoc-in new-db (into messages-path [message-id :user-statuses me]) :seen)) db @@ -210,7 +211,7 @@ (defn- preload-chat-data "Takes chat-id and coeffects map, returns effects necessary when navigating to chat" [chat-id {:keys [db] :as cofx}] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (-> (assoc db :current-chat-id chat-id) (models/set-chat-ui-props {:validation-messages nil}))} (fire-off-chat-loaded-event chat-id) @@ -229,10 +230,10 @@ "Takes coeffects map and chat-id, returns effects necessary for navigation and preloading data" [chat-id {:keys [navigation-replace?]} {:keys [db] :as cofx}] (if navigation-replace? - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (navigation/replace-view :chat) (preload-chat-data chat-id)) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx ;; TODO janherich - refactor `navigate-to` so it can be used with `merge-fx` macro {:db (navigation/navigate-to db :chat)} (preload-chat-data chat-id)))) @@ -248,7 +249,7 @@ [chat-id opts {:keys [db] :as cofx}] ; don't allow to open chat with yourself (when (not= (:current-public-key db) chat-id) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models/upsert-chat {:chat-id chat-id :is-active true}) (navigate-to-chat chat-id opts)))) @@ -270,14 +271,14 @@ (let [{:keys [group-chat public?]} (get-in db [:chats chat-id])] ;; if this is private group chat, we have to broadcast leave and unsubscribe after that (if (and group-chat (not public?)) - (handlers/merge-fx cofx (transport.message/send (group-chat/GroupLeave.) chat-id)) - (handlers/merge-fx cofx (transport/unsubscribe-from-chat chat-id))))) + (handlers-macro/merge-fx cofx (transport.message/send (group-chat/GroupLeave.) chat-id)) + (handlers-macro/merge-fx cofx (transport/unsubscribe-from-chat chat-id))))) (handlers/register-handler-fx :leave-chat-and-navigate-home [re-frame/trim-v] (fn [cofx [chat-id]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models/remove-chat chat-id) (navigation/replace-view :home) (remove-transport chat-id)))) @@ -295,7 +296,7 @@ :remove-chat-and-navigate-home [re-frame/trim-v] (fn [cofx [chat-id]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models/remove-chat chat-id) (navigation/replace-view :home)))) @@ -312,7 +313,7 @@ :create-new-public-chat [re-frame/trim-v] (fn [{:keys [db now] :as cofx} [topic]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models/add-public-chat topic) (navigation/navigate-to-clean :home) (navigate-to-chat topic {}) @@ -334,7 +335,7 @@ (group-name-from-contacts selected-contacts (:contacts/contacts db) (:username db)))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc db :group/selected-contacts #{})} (models/add-group-chat random-id chat-name (:current-public-key db) selected-contacts) (navigation/navigate-to-clean :home) @@ -345,6 +346,6 @@ :show-profile [re-frame/trim-v] (fn [{:keys [db] :as cofx} [identity]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc db :contacts/identity identity)} (navigation/navigate-forget :profile)))) diff --git a/src/status_im/chat/events/console.cljs b/src/status_im/chat/events/console.cljs index e086376f64..c3ba7efe31 100644 --- a/src/status_im/chat/events/console.cljs +++ b/src/status_im/chat/events/console.cljs @@ -7,7 +7,7 @@ [status-im.i18n :as i18n] [goog.string :as gstring] goog.string.format - [status-im.utils.handlers :as handlers])) + [status-im.utils.handlers-macro :as handlers-macro])) ;;;; Helper fns @@ -59,7 +59,7 @@ "debug" (fn [{:keys [db random-id now] :as cofx} {:keys [params]}] (let [debug? (= "On" (:mode params))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:dispatch-n (if debug? [[:initialize-debugging {:force-start? true}] [:chat-received-message/add diff --git a/src/status_im/chat/models/message.cljs b/src/status_im/chat/models/message.cljs index 1d19dc64d2..9fceeb4179 100644 --- a/src/status_im/chat/models/message.cljs +++ b/src/status_im/chat/models/message.cljs @@ -7,7 +7,7 @@ [status-im.chat.models :as chat-model] [status-im.chat.models.commands :as commands-model] [status-im.utils.clocks :as utils.clocks] - [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.transport.utils :as transport.utils] [status-im.transport.message.core :as transport] [status-im.transport.message.v1.protocol :as protocol])) @@ -73,7 +73,7 @@ command-request? (and (= content-type constants/content-type-command-request) request-command) new-timestamp (or timestamp now)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (add-message chat-id (cond-> (assoc message :timestamp new-timestamp @@ -95,7 +95,7 @@ (defn receive [{:keys [chat-id message-id] :as message} {:keys [now] :as cofx}] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (chat-model/upsert-chat {:chat-id chat-id ; We activate a chat again on new messages :is-active true @@ -175,7 +175,7 @@ (if dapp? (send-dapp-message! cofx chat-id send-record) (if fcm-token - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:send-notification {:message "message" :payload {:title "Status" :body "You have a new message"} :tokens [fcm-token]}} @@ -208,7 +208,7 @@ (defn- upsert-and-send [{:keys [chat-id] :as message} {:keys [now] :as cofx}] (let [send-record (protocol/map->Message (select-keys message transport-keys)) message-with-id (assoc message :message-id (transport.utils/message-id send-record))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (chat-model/upsert-chat {:chat-id chat-id :timestamp now}) (add-message chat-id message-with-id true) @@ -267,7 +267,7 @@ ; We send commands to deleted chats as well, i.e. signed later transactions chat (or (get chats chat-id) {:chat-id chat-id}) request (:request handler-data)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (upsert-and-send (prepare-command-message current-public-key chat now request content)) (add-console-responses command handler-data) (requests-events/request-answered chat-id to-message)))) diff --git a/src/status_im/protocol/handlers.cljs b/src/status_im/protocol/handlers.cljs index 86156e1c61..fd41ad785a 100644 --- a/src/status_im/protocol/handlers.cljs +++ b/src/status_im/protocol/handlers.cljs @@ -7,6 +7,7 @@ [status-im.utils.datetime :as datetime] [status-im.utils.ethereum.core :as utils] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.utils.web3-provider :as web3-provider] [status-im.transport.core :as transport])) @@ -37,7 +38,7 @@ (re-frame/inject-cofx ::get-web3) (re-frame/inject-cofx :data-store/transport)] (fn [{:data-store/keys [transport] :keys [db web3] :as cofx} [current-account-id ethereum-rpc-url]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc db :web3 web3 :rpc-url (or ethereum-rpc-url constants/ethereum-rpc-url) diff --git a/src/status_im/transport/core.cljs b/src/status_im/transport/core.cljs index 704a35c667..99b8dd4258 100644 --- a/src/status_im/transport/core.cljs +++ b/src/status_im/transport/core.cljs @@ -9,6 +9,7 @@ [taoensso.timbre :as log] [status-im.transport.inbox :as inbox] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.transport.db :as transport.db])) (defn init-whisper @@ -24,7 +25,7 @@ :sym-key sym-key :sym-key-id sym-key-id}])) topic (transport.utils/get-topic constants/contact-discovery)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:shh/add-discovery-filter {:web3 web3 :private-key-id public-key :topic topic} diff --git a/src/status_im/transport/message/v1/contact.cljs b/src/status_im/transport/message/v1/contact.cljs index f7c76a5bd6..a5a6438db1 100644 --- a/src/status_im/transport/message/v1/contact.cljs +++ b/src/status_im/transport/message/v1/contact.cljs @@ -5,7 +5,8 @@ [status-im.transport.message.v1.protocol :as protocol] [status-im.transport.utils :as transport.utils] [status-im.ui.screens.contacts.core :as contacts] - [status-im.utils.handlers :as handlers])) + [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro])) (defrecord NewContactKey [sym-key topic message] message/StatusMessage @@ -20,7 +21,7 @@ :chat-id chat-id :topic topic :message message}]))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:shh/add-new-sym-key {:web3 (get-in cofx [:db :web3]) :sym-key sym-key :on-success on-success}} @@ -37,7 +38,7 @@ :chat-id chat-id :topic topic :message this}]))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:shh/get-new-sym-key {:web3 (:web3 db) :on-success on-success}} (protocol/init-chat chat-id topic) @@ -45,7 +46,7 @@ (receive [this chat-id signature {:keys [db] :as cofx}] (let [message-id (transport.utils/message-id this)] (when (protocol/is-new? message-id) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx #_(protocol/ack message-id chat-id) (contacts/receive-contact-request signature this)))))) @@ -54,14 +55,14 @@ message/StatusMessage (send [this chat-id cofx] (let [message-id (transport.utils/message-id this)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx #_(protocol/requires-ack message-id chat-id) (protocol/send {:chat-id chat-id :payload this})))) (receive [this chat-id signature cofx] (let [message-id (transport.utils/message-id this)] (when (protocol/is-new? message-id) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx #_(protocol/ack message-id chat-id) (contacts/receive-contact-request-confirmation signature this)))))) @@ -71,13 +72,13 @@ (send [this _ {:keys [db] :as cofx}] (let [message-id (transport.utils/message-id this) public-keys (remove nil? (map :public-key (vals (:contacts/contacts db))))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (protocol/multi-send-with-pubkey {:public-keys public-keys :payload this})))) (receive [this chat-id signature cofx] (let [message-id (transport.utils/message-id this)] (when (protocol/is-new? message-id) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (contacts/receive-contact-update chat-id signature this)))))) @@ -90,7 +91,7 @@ (assoc :sym-key-id sym-key-id) ;;TODO (yenda) remove once go implements persistence (assoc :sym-key sym-key))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc-in db [:transport/chats chat-id :sym-key-id] sym-key-id) :shh/add-filter {:web3 web3 :sym-key-id sym-key-id @@ -109,7 +110,7 @@ (assoc :sym-key-id sym-key-id) ;;TODO (yenda) remove once go implements persistence (assoc :sym-key sym-key))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc-in db [:transport/chats chat-id :sym-key-id] sym-key-id) :shh/add-filter {:web3 web3 :sym-key-id sym-key-id @@ -124,7 +125,7 @@ (fn [cofx [this timer chat-id n]] (if (zero? n) (println "Time: " (str (- (inst-ms (js/Date.)) @timer))) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:dispatch [this timer chat-id (dec n)]} (message/send (protocol/map->Message {:content (str n) :content-type "text/plain" diff --git a/src/status_im/transport/message/v1/group_chat.cljs b/src/status_im/transport/message/v1/group_chat.cljs index 5992d0fc09..30ecc3bb72 100644 --- a/src/status_im/transport/message/v1/group_chat.cljs +++ b/src/status_im/transport/message/v1/group_chat.cljs @@ -3,6 +3,7 @@ (:require [clojure.set :as set] [re-frame.core :as re-frame] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.transport.message.core :as message] [status-im.i18n :as i18n] [status-im.ui.screens.group.core :as group] @@ -27,7 +28,7 @@ :payload this} cofx))) (receive [this _ signature {:keys [db] :as cofx}] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:shh/add-new-sym-key {:web3 (:web3 db) :sym-key sym-key :on-success (fn [sym-key sym-key-id] @@ -78,7 +79,7 @@ (defrecord GroupAdminUpdate [chat-name participants] message/StatusMessage (send [this chat-id cofx] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (init-chat-if-new chat-id) (send-new-group-key this chat-id))) (receive [this chat-id signature {:keys [now db random-id] :as cofx}] @@ -92,7 +93,7 @@ admin-name (or (get-in db [:contacts/contacts group-admin :name]) group-admin)] (if (removed me) ;; we were removed - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models.message/receive (models.message/system-message chat-id random-id now (str admin-name " " (i18n/label :t/removed-from-chat)))) @@ -100,7 +101,7 @@ :removed-from-at now :is-active false}) (transport/unsubscribe-from-chat chat-id)) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models.message/receive (models.message/system-message chat-id random-id now (prepare-system-message admin-name @@ -125,7 +126,7 @@ participant-leaving-name (or (get-in db [:contacts/contacts signature :name]) signature)] (when (get-in db [:chats chat-id]) ;; chat is present - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (models.message/receive (models.message/system-message chat-id random-id now (str participant-leaving-name " " (i18n/label :t/left)))) @@ -145,7 +146,7 @@ ;; some async operations (fn [{:keys [db] :as cofx} [{:keys [chat-id message sym-key sym-key-id]}]] (let [{:keys [web3]} db] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc-in db [:transport/chats chat-id :sym-key-id] sym-key-id) :shh/add-filter {:web3 web3 :sym-key-id sym-key-id @@ -175,5 +176,5 @@ (assoc :sym-key sym-key))}}] ;; if new sym-key is wrapping some message, call receive on it as well, if not just update the transport layer (if message - (handlers/merge-fx cofx fx (message/receive message chat-id signature)) + (handlers-macro/merge-fx cofx fx (message/receive message chat-id signature)) fx)))) diff --git a/src/status_im/transport/message/v1/public_chat.cljs b/src/status_im/transport/message/v1/public_chat.cljs index 723a694ea5..b6950b4ca8 100644 --- a/src/status_im/transport/message/v1/public_chat.cljs +++ b/src/status_im/transport/message/v1/public_chat.cljs @@ -2,6 +2,7 @@ status-im.transport.message.v1.public-chat (:require [re-frame.core :as re-frame] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.transport.message.core :as message] [status-im.transport.message.v1.protocol :as protocol] [status-im.transport.utils :as transport.utils])) @@ -17,7 +18,7 @@ (re-frame/dispatch [::add-new-sym-key {:chat-id chat-id :sym-key sym-key :sym-key-id sym-key-id}]))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:shh/generate-sym-key-from-password {:web3 (:web3 db) :password chat-id :on-success on-success}} @@ -27,7 +28,7 @@ ::add-new-sym-key (fn [{:keys [db] :as cofx} [_ {:keys [sym-key-id sym-key chat-id]}]] (let [{:keys [web3]} db] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc-in db [:transport/chats chat-id :sym-key-id] sym-key-id) :shh/add-filter {:web3 web3 :sym-key-id sym-key-id diff --git a/src/status_im/ui/screens/accounts/events.cljs b/src/status_im/ui/screens/accounts/events.cljs index adc9caa680..c49405021d 100644 --- a/src/status_im/ui/screens/accounts/events.cljs +++ b/src/status_im/ui/screens/accounts/events.cljs @@ -8,6 +8,7 @@ [clojure.string :as str] [status-im.utils.datetime :as time] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.ui.screens.accounts.statuses :as statuses] [status-im.utils.signing-phrase.core :as signing-phrase] [status-im.utils.gfycat.core :refer [generate-gfy]] @@ -124,7 +125,7 @@ :data-store/save-account (assoc new-account :after-update-event after-update-event)} {:keys [name photo-path]} new-account] (if (or (:name new-account-fields) (:photo-path new-account-fields)) - (handlers/merge-fx cofx fx (transport/send (message.contact/ContactUpdate. name photo-path) nil)) + (handlers-macro/merge-fx cofx fx (transport/send (message.contact/ContactUpdate. name photo-path) nil)) fx)))) (handlers/register-handler-fx @@ -141,7 +142,7 @@ (handlers/register-handler-fx :account-set-name (fn [{{:accounts/keys [create] :as db} :db :as cofx} _] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc-in db [:accounts/create :show-welcome?] true) :dispatch [:navigate-to-clean :usage-data [:account-finalized]]} (account-update {:name (:name create)})))) diff --git a/src/status_im/ui/screens/contacts/core.cljs b/src/status_im/ui/screens/contacts/core.cljs index 10bb6f6091..f018abf8a4 100644 --- a/src/status_im/ui/screens/contacts/core.cljs +++ b/src/status_im/ui/screens/contacts/core.cljs @@ -1,5 +1,6 @@ (ns status-im.ui.screens.contacts.core - (:require [re-frame.core :as re-frame] [status-im.utils.handlers :as handlers] + (:require [re-frame.core :as re-frame] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.data-store.messages :as data-store.messages] [status-im.chat.models :as chat.models] [status-im.constants :as constants])) @@ -19,7 +20,7 @@ chat-props {:name name :chat-id public-key :contact-info (prn-str contact-props)}] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (update-in db [:contacts/contacts public-key] merge contact-props) :data-store/save-contact contact-props} (chat.models/upsert-chat chat-props))))) @@ -36,7 +37,7 @@ :fcm-token fcm-token} chat-props {:name name :chat-id public-key}] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (update-in db [:contacts/contacts public-key] merge contact-props) :data-store/save-contact contact-props} (chat.models/upsert-chat chat-props))))) @@ -57,7 +58,7 @@ :photo-path profile-image :last-updated now}] (if (chats public-key) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (update-contact contact) (chat.models/upsert-chat {:chat-id chat-id :name name})) diff --git a/src/status_im/ui/screens/contacts/events.cljs b/src/status_im/ui/screens/contacts/events.cljs index 33939ec064..0d435eb505 100644 --- a/src/status_im/ui/screens/contacts/events.cljs +++ b/src/status_im/ui/screens/contacts/events.cljs @@ -3,6 +3,7 @@ [cljs.reader :as reader] [re-frame.core :as re-frame] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.utils.contacts :as utils.contacts] [status-im.constants :as constants] [status-im.utils.identicon :as identicon] @@ -62,12 +63,12 @@ (defn add-contact [whisper-id {:keys [db] :as cofx}] (let [contact (build-contact whisper-id cofx)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (add-new-contact contact) (send-contact-request contact)))) (defn add-contact-and-open-chat [whisper-id cofx] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (navigation/navigate-to-clean :home) (add-contact whisper-id) (chat.events/start-chat whisper-id {}))) @@ -86,7 +87,7 @@ fx {:db (assoc db :contacts/new-identity contact-identity)}] (if (new-chat.db/validate-pub-key contact-identity current-account) fx - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx fx (add-contact-and-open-chat contact-identity)))))) @@ -118,7 +119,7 @@ :open-chat-with-contact [(re-frame/inject-cofx :random-id)] (fn [{:keys [db] :as cofx} [_ {:keys [whisper-identity] :as contact}]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (navigation/navigate-to-clean :home) (add-contact whisper-identity) (chat.events/start-chat whisper-identity {})))) diff --git a/src/status_im/ui/screens/events.cljs b/src/status_im/ui/screens/events.cljs index 93b3f2cfe6..9298156877 100644 --- a/src/status_im/ui/screens/events.cljs +++ b/src/status_im/ui/screens/events.cljs @@ -40,6 +40,7 @@ [status-im.utils.config :as config] [status-im.utils.notifications :as notifications] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.utils.http :as http] [status-im.utils.instabug :as inst] [status-im.utils.mixpanel :as mixpanel] @@ -214,7 +215,7 @@ (fn [{:keys [db] :as cofx} _] (let [{:transport/keys [chats] :keys [current-account-id]} db sharing-usage-data? (get-in db [:accounts/accounts current-account-id :sharing-usage-data?])] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:dispatch-n (concat [[:initialize-db] [:load-accounts] [:listen-to-network-status] diff --git a/src/status_im/ui/screens/group/chat_settings/events.cljs b/src/status_im/ui/screens/group/chat_settings/events.cljs index f024992e23..e62201f161 100644 --- a/src/status_im/ui/screens/group/chat_settings/events.cljs +++ b/src/status_im/ui/screens/group/chat_settings/events.cljs @@ -5,7 +5,8 @@ [status-im.ui.screens.navigation :as navigation] [status-im.transport.message.v1.group-chat :as group-chat] [status-im.transport.message.core :as transport] - [status-im.utils.handlers :as handlers])) + [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro])) ;;;; Handlers @@ -26,7 +27,7 @@ (let [participants (concat (get-in db [:chats current-chat-id :contacts]) selected-participants) contacts (:contacts/contacts db) added-participants-names (map #(get-in contacts [% :name]) selected-participants)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (-> db (assoc-in [:chats current-chat-id :contacts] participants) (assoc :selected-participants #{})) @@ -43,7 +44,7 @@ (let [participants (remove removed-participants (get-in db [:chats current-chat-id :contacts])) contacts (:contacts/contacts db) removed-participants-names (map #(get-in contacts [% :name]) removed-participants)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (assoc-in db [:chats current-chat-id :contacts] participants) :data-store/remove-chat-contacts [current-chat-id removed-participants]} (models.message/receive diff --git a/src/status_im/ui/screens/navigation.cljs b/src/status_im/ui/screens/navigation.cljs index d3b259143e..f4321bdb3d 100644 --- a/src/status_im/ui/screens/navigation.cljs +++ b/src/status_im/ui/screens/navigation.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.screens.navigation (:require [re-frame.core :as re-frame] - [status-im.utils.handlers :as handlers])) + [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro])) ;; private helper fns @@ -103,7 +104,7 @@ :navigate-to-tab (re-frame/enrich preload-data!) (fn [{:keys [db] :as cofx} [_ view-id]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (-> db (assoc :prev-tab-view-id (:view-id db)) (assoc :prev-view-id (:view-id db)))} diff --git a/src/status_im/ui/screens/network_settings/events.cljs b/src/status_im/ui/screens/network_settings/events.cljs index 170e856e73..a73a0188ed 100644 --- a/src/status_im/ui/screens/network_settings/events.cljs +++ b/src/status_im/ui/screens/network_settings/events.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.screens.network-settings.events (:require [re-frame.core :refer [dispatch dispatch-sync after] :as re-frame] [status-im.utils.handlers :refer [register-handler] :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.ui.screens.accounts.events :as accounts-events] [status-im.i18n :as i18n] [status-im.utils.ethereum.core :as utils] @@ -29,7 +30,7 @@ (handlers/register-handler-fx ::save-network (fn [{:keys [db now] :as cofx} [_ network]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (accounts-events/account-update {:network network :last-updated now} [::close-application])))) @@ -41,7 +42,7 @@ networks (:networks/networks db) chats (:transport/chats db)] (if (utils/network-with-upstream-rpc? networks current-network) - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:dispatch [:navigate-to-clean :accounts]} (transport/stop-whisper) (accounts-events/account-update {:network network diff --git a/src/status_im/ui/screens/offline_messaging_settings/events.cljs b/src/status_im/ui/screens/offline_messaging_settings/events.cljs index 8941f156fc..f0827d6550 100644 --- a/src/status_im/ui/screens/offline_messaging_settings/events.cljs +++ b/src/status_im/ui/screens/offline_messaging_settings/events.cljs @@ -1,6 +1,7 @@ (ns status-im.ui.screens.offline-messaging-settings.events (:require [re-frame.core :refer [dispatch]] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.ui.screens.accounts.events :as accounts-events] [status-im.i18n :as i18n] [status-im.transport.core :as transport] @@ -12,7 +13,7 @@ (let [{:accounts/keys [current-account-id accounts]} db network (ethereum/network->chain-keyword (:network db)) settings (get-in accounts [current-account-id :settings])] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:dispatch [:logout]} (accounts-events/update-settings (assoc-in settings [:wnode network] wnode)))))) diff --git a/src/status_im/ui/screens/profile/events.cljs b/src/status_im/ui/screens/profile/events.cljs index 3244a6939f..683b71cedd 100644 --- a/src/status_im/ui/screens/profile/events.cljs +++ b/src/status_im/ui/screens/profile/events.cljs @@ -8,6 +8,7 @@ [status-im.chat.events :as chat-events] [status-im.chat.events.input :as input-events] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.utils.image-processing :refer [img->base64]] [taoensso.timbre :as log])) @@ -30,7 +31,7 @@ [re-frame/trim-v] (fn [{{:contacts/keys [contacts]} :db :as cofx} [chat-id]] (let [send-command (get-in contacts chat-const/send-command-ref)] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (chat-events/start-chat chat-id {:navigation-replace? true}) (input-events/select-chat-input-command send-command nil true))))) @@ -77,7 +78,7 @@ :last-updated now} (if photo-path {:photo-path photo-path}))] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx (clear-profile) (accounts-events/account-update cleaned-edit))))) @@ -109,6 +110,6 @@ (handlers/register-handler-fx :my-profile/finish (fn [{:keys [db] :as cofx} _] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:db (update db :my-profile/seed assoc :step :finish :error nil :word nil)} (accounts-events/account-update {:seed-backed-up? true})))) diff --git a/src/status_im/ui/screens/wallet/request/events.cljs b/src/status_im/ui/screens/wallet/request/events.cljs index d2b84bb7f4..d6405d97d5 100644 --- a/src/status_im/ui/screens/wallet/request/events.cljs +++ b/src/status_im/ui/screens/wallet/request/events.cljs @@ -2,6 +2,7 @@ (:require [re-frame.core :as re-frame] [status-im.ui.screens.wallet.db :as wallet-db] [status-im.utils.handlers :as handlers] + [status-im.utils.handlers-macro :as handlers-macro] [status-im.chat.constants :as chat-const] [status-im.chat.events.input :as input-events] [status-im.utils.money :as money])) @@ -10,7 +11,7 @@ ::wallet-send-chat-request [re-frame/trim-v] (fn [{{:contacts/keys [contacts]} :db :as cofx} [amount]] - (handlers/merge-fx cofx + (handlers-macro/merge-fx cofx {:dispatch [:send-current-message]} (input-events/select-chat-input-command (assoc (get-in contacts chat-const/request-command-ref) :prefill [amount]) nil true)))) diff --git a/src/status_im/utils/handlers.cljs b/src/status_im/utils/handlers.cljs index 2e12098d08..3062e34612 100644 --- a/src/status_im/utils/handlers.cljs +++ b/src/status_im/utils/handlers.cljs @@ -5,8 +5,7 @@ [re-frame.interceptor :refer [->interceptor get-coeffect get-effect]] [status-im.utils.ethereum.core :as ethereum] [status-im.utils.mixpanel :as mixpanel] - [taoensso.timbre :as log]) - (:require-macros status-im.utils.handlers)) + [taoensso.timbre :as log])) (def pre-event-callback (atom nil)) @@ -137,17 +136,3 @@ (remove (fn [{:keys [dapp? pending?]}] (or pending? dapp?))) (map :whisper-identity))) - -(defn update-db [cofx fx] - (if-let [db (:db fx)] - (assoc cofx :db db) - cofx)) - -(defn safe-merge [fx new-fx] - (if (:merging-fx-with-common-keys fx) - fx - (let [common-keys (clojure.set/intersection (into #{} (keys fx)) - (into #{} (keys new-fx)))] - (if (empty? (disj common-keys :db)) - (merge fx new-fx) - {:merging-fx-with-common-keys common-keys})))) diff --git a/src/status_im/utils/handlers.clj b/src/status_im/utils/handlers_macro.clj similarity index 98% rename from src/status_im/utils/handlers.clj rename to src/status_im/utils/handlers_macro.clj index 956e94ef1c..e35381d8d3 100644 --- a/src/status_im/utils/handlers.clj +++ b/src/status_im/utils/handlers_macro.clj @@ -1,4 +1,4 @@ -(ns status-im.utils.handlers) +(ns status-im.utils.handlers-macro) (defmacro merge-fx* "This macro is called recursively from merge-fx diff --git a/src/status_im/utils/handlers_macro.cljs b/src/status_im/utils/handlers_macro.cljs new file mode 100644 index 0000000000..add32bcb09 --- /dev/null +++ b/src/status_im/utils/handlers_macro.cljs @@ -0,0 +1,16 @@ +(ns status-im.utils.handlers-macro + (:require-macros status-im.utils.handlers-macro)) + +(defn update-db [cofx fx] + (if-let [db (:db fx)] + (assoc cofx :db db) + cofx)) + +(defn safe-merge [fx new-fx] + (if (:merging-fx-with-common-keys fx) + fx + (let [common-keys (clojure.set/intersection (into #{} (keys fx)) + (into #{} (keys new-fx)))] + (if (empty? (disj common-keys :db)) + (merge fx new-fx) + {:merging-fx-with-common-keys common-keys}))))