-
Notifications
You must be signed in to change notification settings - Fork 983
/
events.cljs
143 lines (122 loc) · 4.5 KB
/
events.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
(ns status-im.navigation.events
(:require
[re-frame.core :as re-frame]
[status-im.contexts.shell.jump-to.events :as shell.events]
[status-im.contexts.shell.jump-to.state :as shell.state]
[status-im.contexts.shell.jump-to.utils :as shell.utils]
[utils.re-frame :as rf]))
(defn- all-screens-params
[db view screen-params]
(cond-> db
(and (seq screen-params) (:screen screen-params) (:params screen-params))
(all-screens-params (:screen screen-params) (:params screen-params))
(seq screen-params)
(assoc-in [:navigation/screen-params view] screen-params)))
(rf/defn navigate-to
{:events [:navigate-to]}
[{:keys [db] :as cofx} go-to-view-id screen-params]
(rf/merge
cofx
{:db (all-screens-params db go-to-view-id screen-params)
:dispatch-n [[:hide-bottom-sheet]]}
(shell.events/shell-navigate-to go-to-view-id screen-params nil nil)))
(rf/defn navigate-to-within-stack
{:events [:navigate-to-within-stack]}
[{:keys [db]} comp-id]
{:db (assoc db :view-id (first comp-id))
:fx [[:navigate-to-within-stack comp-id]]})
(re-frame/reg-event-fx :open-modal
(fn [{:keys [db]} [component screen-params]]
{:db (-> db
(assoc :view-id component)
(all-screens-params component screen-params))
:fx [[:dispatch [:hide-bottom-sheet]]
[:dispatch [:dismiss-keyboard]]
[:open-modal-fx [component (:theme db)]]]}))
(rf/defn dismiss-modal
{:events [:dismiss-modal]}
[{:keys [db]} comp-id]
{:dismiss-modal comp-id})
(rf/defn navigate-back
{:events [:navigate-back]}
[cofx]
(shell.events/shell-navigate-back cofx nil))
(rf/defn navigate-back-to
{:events [:navigate-back-to]}
[{:keys [db]} comp-id]
{:navigate-back-to comp-id})
(rf/defn pop-to-root
{:events [:pop-to-root]}
[{:keys [db]} tab]
{:pop-to-root-fx tab
:db (-> db
(dissoc :shell/floating-screens)
(dissoc :shell/loaded-screens)
(assoc :view-id (or @shell.state/selected-stack-id :shell)))
:effects.shell/pop-to-root nil})
(rf/defn init-root
{:events [:init-root]}
[_ root-id]
{:set-root root-id})
(rf/defn set-stack-root
{:events [:set-stack-root]}
[_ stack root]
{:set-stack-root-fx [stack root]})
(rf/defn change-tab
{:events [:navigate-change-tab]}
[{:keys [db]} stack-id]
{:db (assoc db :view-id stack-id)
:effects.shell/change-tab stack-id})
(rf/defn hide-bottom-sheet
{:events [:hide-bottom-sheet]}
[{:keys [db]}]
(let [{:keys [hide? sheets]} (:bottom-sheet db)]
(when (and (not hide?) (seq sheets))
{:db (assoc-in db [:bottom-sheet :hide?] true)})))
(rf/defn bottom-sheet-hidden
{:events [:bottom-sheet-hidden]}
[{:keys [db]}]
(let [{:keys [sheets]} (:bottom-sheet db)
rest-sheets (butlast sheets)]
(merge
{:db (assoc db :bottom-sheet {:sheets rest-sheets :hide? false})
:hide-bottom-sheet nil
:reload-status-nav-color-fx [(:view-id db) (:theme db)]}
(when (seq rest-sheets)
{:dispatch [:show-next-bottom-sheet]}))))
(rf/defn show-next-bottom-sheet
{:events [:show-next-bottom-sheet]}
[_]
{:show-bottom-sheet nil})
(rf/defn show-bottom-sheet
{:events [:show-bottom-sheet]}
[{:keys [db] :as cofx} content]
(let [{:keys [sheets hide?]} (:bottom-sheet db)]
(rf/merge cofx
{:db (update-in db [:bottom-sheet :sheets] #(conj % content))
:dismiss-keyboard nil}
#(when-not hide?
(if (seq sheets) (hide-bottom-sheet %) {:show-bottom-sheet nil})))))
(rf/defn dismiss-all-overlays
{:events [:dismiss-all-overlays]}
[_]
{:dispatch-n [[:hide-popover]
[:hide-visibility-status-popover]
[:hide-bottom-sheet]
[:bottom-sheet-hidden]
[:bottom-sheet/hide-old-navigation-overlay]
[:toasts/close-all-toasts]]})
(rf/defn set-view-id
{:events [:set-view-id]}
[{:keys [db]} view-id]
(let [view-id (if (= view-id :shell-stack) (shell.utils/calculate-view-id) view-id)]
{:db (assoc db :view-id view-id)
:set-view-id-fx [view-id (:theme db)]}))
(rf/defn reload-status-nav-color
{:events [:reload-status-nav-color]}
[{:keys [db]} view-id]
{:reload-status-nav-color-fx [(or view-id (:view-id db)) (:theme db)]})
(defn open-share
[_ [config]]
{:fx [[:effects.share/open config]]})
(rf/reg-event-fx :open-share open-share)