109 lines
4.5 KiB
Plaintext
Raw Normal View History

2023-01-19 12:15:28 +01:00
(ns status-im2.events
(:require [clojure.string :as string]
2023-01-03 19:19:21 +01:00
[re-frame.core :as re-frame]
[status-im.multiaccounts.login.core :as multiaccounts.login]
[status-im.native-module.core :as status]
[status-im.utils.keychain.core :as keychain]
[status-im2.common.json-rpc.events]
2022-12-20 21:52:28 +08:00
[status-im2.common.theme.core :as theme]
[status-im2.common.toasts.events]
[status-im2.contexts.add-new-contact.events]
status-im2.contexts.onboarding.events
[status-im.bottom-sheet.events]
2022-12-20 21:52:28 +08:00
[status-im2.navigation.events :as navigation]
2023-01-19 12:15:28 +01:00
[status-im2.db :as db]
2023-01-18 14:36:02 +01:00
[utils.re-frame :as rf]
2023-01-19 12:15:28 +01:00
[utils.datetime :as datetime]
2023-01-19 19:35:14 +01:00
status-im2.contexts.syncing.events
status-im2.contexts.chat.events))
2023-01-18 14:36:02 +01:00
(re-frame/reg-cofx
:now
(fn [coeffects _]
(assoc coeffects :now (datetime/timestamp))))
(re-frame/reg-fx
:setup/open-multiaccounts
(fn [callback]
(status/open-accounts callback)))
(re-frame/reg-fx
:setup/init-theme
(fn []
2023-03-24 22:04:55 +05:30
(theme/add-device-theme-change-listener
#(re-frame/dispatch [:system-theme-mode-changed %]))))
(rf/defn initialize-views
{:events [:setup/initialize-view]}
[cofx]
(let [{{:multiaccounts/keys [multiaccounts]} :db} cofx]
(if (and (seq multiaccounts))
;; We specifically pass a bunch of fields instead of the whole multiaccount
;; as we want store some fields in multiaccount that are not here
(let [multiaccount (first (sort-by :timestamp > (vals multiaccounts)))]
(rf/merge cofx
(multiaccounts.login/open-login (select-keys
multiaccount
[:key-uid :name :public-key :identicon :images]))
(keychain/get-auth-method (:key-uid multiaccount))))
2023-03-22 01:27:09 +05:30
(navigation/init-root cofx :intro))))
2019-08-01 22:11:59 +02:00
(defn rpc->multiaccount
[{:keys [customizationColor keycard-pairing] :as multiaccount}]
(-> multiaccount
(dissoc :customizationColor)
(assoc :customization-color (keyword customizationColor))
(assoc :keycard-pairing
(when-not
(string/blank? keycard-pairing)
keycard-pairing))))
(rf/defn initialize-multiaccounts
{:events [:setup/initialize-multiaccounts]}
[{:keys [db] :as cofx} all-multiaccounts {:keys [logout?]}]
(let [multiaccounts (reduce (fn [acc
{:keys [key-uid keycard-pairing]
:as multiaccount}]
(assoc acc key-uid (rpc->multiaccount multiaccount)))
2019-08-01 22:11:59 +02:00
{}
all-multiaccounts)]
(rf/merge cofx
{:db (-> db
(assoc :multiaccounts/multiaccounts multiaccounts)
(assoc :multiaccounts/logout? logout?)
(assoc :multiaccounts/loading false))
:dispatch-n [[:setup/initialize-view]
[:get-opted-in-to-new-terms-of-service]
[:load-information-box-states]]})))
(rf/defn initialize-app-db
"Initialize db to initial state"
[{{:keys [keycard supported-biometric-auth goto-key-storage?]
:network/keys [type]
:keycard/keys [banner-hidden]}
:db}]
{:db (assoc db/app-db
:network/type type
:keycard/banner-hidden banner-hidden
:keycard (dissoc keycard :secrets :pin :application-info)
:supported-biometric-auth supported-biometric-auth
:goto-key-storage? goto-key-storage?
:multiaccounts/loading true)})
(rf/defn start-app
{:events [:setup/app-started]}
[cofx]
(rf/merge cofx
{:setup/init-theme nil
:get-supported-biometric-auth nil
:network/listen-to-network-info nil
:keycard/register-card-events nil
:keycard/check-nfc-support nil
:keycard/check-nfc-enabled nil
:keycard/retrieve-pairings nil
:setup/open-multiaccounts #(do
(re-frame/dispatch [:setup/initialize-multiaccounts %
{:logout? false}])
(re-frame/dispatch [:get-keycard-banner-preference]))}
2019-08-01 22:11:59 +02:00
(initialize-app-db)))