Skip to content

Commit c003db4

Browse files
authored
Create Navigation mechanism for wizard type flows #19059 (#19123)
1 parent a716f4e commit c003db4

File tree

11 files changed

+73
-36
lines changed

11 files changed

+73
-36
lines changed

src/status_im/contexts/wallet/account/view.cljs

+3-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@
5050
[quo/wallet-ctas
5151
{:send-action (fn []
5252
(rf/dispatch [:wallet/clean-send-data])
53-
(rf/dispatch [:open-modal :screen/wallet.select-address]))
53+
(rf/dispatch [:wallet/wizard-navigate-forward
54+
{:start-flow? true
55+
:flow-id :wallet-flow}]))
5456
:receive-action #(rf/dispatch [:open-modal :screen/wallet.share-address {:status :receive}])
5557
:buy-action #(rf/dispatch [:show-bottom-sheet
5658
{:content buy-drawer}])

src/status_im/contexts/wallet/common/token_value/view.cljs

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@
1919
:on-press (fn []
2020
(rf/dispatch [:hide-bottom-sheet])
2121
(rf/dispatch [:wallet/clean-send-data])
22-
(rf/dispatch [:wallet/send-select-token-drawer {:token token-data}])
23-
(rf/dispatch [:open-modal :screen/wallet.select-address]))}
22+
(rf/dispatch [:wallet/send-select-token
23+
{:token token-data
24+
:start-flow? true}]))}
2425
{:icon :i/receive
2526
:accessibility-label :receive
2627
:label (i18n/label :t/receive)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
(ns status-im.contexts.wallet.common.wizard
2+
(:require [status-im.contexts.wallet.send.flow-config :as wallet-flow]
3+
[utils.re-frame :as rf]))
4+
5+
(defn- wizard-find-next-screen
6+
[db flow-id current-screen]
7+
(let [flow-config (case flow-id
8+
:wallet-flow wallet-flow/steps
9+
nil)]
10+
(first (filter (fn [{:keys [skip-step? screen-id]}]
11+
(and (not= screen-id current-screen)
12+
(not (and (fn? skip-step?) (skip-step? db)))))
13+
flow-config))))
14+
15+
(rf/reg-event-fx
16+
:wallet/wizard-navigate-forward
17+
(fn [{:keys [db]} [{:keys [current-screen flow-id start-flow?]}]]
18+
(let [next-screen (wizard-find-next-screen db flow-id current-screen)]
19+
{:fx [[:dispatch
20+
(if start-flow?
21+
[:open-modal (:screen-id next-screen)]
22+
[:navigate-to-within-stack [(:screen-id next-screen) current-screen]])]]})))

src/status_im/contexts/wallet/send/events.cljs

+26-22
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151

5252
(rf/reg-event-fx
5353
:wallet/select-send-address
54-
(fn [{:keys [db]} [{:keys [address token? recipient stack-id]}]]
54+
(fn [{:keys [db]} [{:keys [address recipient stack-id start-flow?]}]]
5555
(let [[prefix to-address] (utils/split-prefix-and-address address)
5656
test-net? (get-in db [:profile/profile :test-networks-enabled?])
5757
goerli-enabled? (get-in db [:profile/profile :is-goerli-enabled?])
@@ -65,28 +65,27 @@
6565
(assoc-in [:wallet :ui :send :address-prefix] prefix)
6666
(assoc-in [:wallet :ui :send :selected-networks] selected-networks))
6767
:fx [[:dispatch
68-
[:navigate-to-within-stack
69-
(if token?
70-
[:screen/wallet.send-input-amount stack-id]
71-
[:screen/wallet.select-asset stack-id])]]]})))
68+
[:wallet/wizard-navigate-forward
69+
{:current-screen stack-id
70+
:start-flow? start-flow?
71+
:flow-id :wallet-flow}]]]})))
7272

7373
(rf/reg-event-fx
7474
:wallet/update-receiver-networks
7575
(fn [{:keys [db]} [selected-networks]]
7676
{:db (assoc-in db [:wallet :ui :send :selected-networks] selected-networks)}))
7777

7878
(rf/reg-event-fx :wallet/send-select-token
79-
(fn [{:keys [db]} [{:keys [token stack-id]}]]
79+
(fn [{:keys [db]} [{:keys [token stack-id start-flow?]}]]
8080
{:db (-> db
8181
(update-in [:wallet :ui :send] dissoc :collectible)
8282
(assoc-in [:wallet :ui :send :token] token))
8383
:fx [[:dispatch [:wallet/clean-suggested-routes]]
84-
[:dispatch [:navigate-to-within-stack [:screen/wallet.send-input-amount stack-id]]]]}))
85-
86-
(rf/reg-event-fx
87-
:wallet/send-select-token-drawer
88-
(fn [{:keys [db]} [{:keys [token]}]]
89-
{:db (assoc-in db [:wallet :ui :send :token] token)}))
84+
[:dispatch
85+
[:wallet/wizard-navigate-forward
86+
{:current-screen stack-id
87+
:start-flow? start-flow?
88+
:flow-id :wallet-flow}]]]}))
9089

9190
(rf/reg-event-fx :wallet/clean-selected-token
9291
(fn [{:keys [db]}]
@@ -113,9 +112,13 @@
113112
[:navigate-to-within-stack [:screen/wallet.transaction-confirmation stack-id]]]}))
114113

115114
(rf/reg-event-fx :wallet/send-select-amount
116-
(fn [{:keys [db]} [{:keys [amount stack-id]}]]
115+
(fn [{:keys [db]} [{:keys [amount stack-id start-flow?]}]]
117116
{:db (assoc-in db [:wallet :ui :send :amount] amount)
118-
:fx [[:dispatch [:navigate-to-within-stack [:screen/wallet.transaction-confirmation stack-id]]]]}))
117+
:fx [[:dispatch
118+
[:wallet/wizard-navigate-forward
119+
{:current-screen stack-id
120+
:start-flow? start-flow?
121+
:flow-id :wallet-flow}]]]}))
119122

120123
(rf/reg-event-fx :wallet/get-suggested-routes
121124
(fn [{:keys [db now]} [{:keys [amount]}]]
@@ -184,12 +187,17 @@
184187
(assoc-in [:wallet :transactions] transaction-details)
185188
(assoc-in [:wallet :ui :send :transaction-ids] transaction-ids))
186189
:fx [[:dispatch
187-
[:navigate-to-within-stack
188-
[:screen/wallet.transaction-progress :screen/wallet.transaction-confirmation]]]]})))
190+
[:wallet/wizard-navigate-forward
191+
{:current-screen :screen/wallet.transaction-confirmation
192+
:flow-id :wallet-flow}]]]})))
189193

190194
(rf/reg-event-fx :wallet/close-transaction-progress-page
191195
(fn [_]
192-
{:fx [[:dispatch [:dismiss-modal :screen/wallet.transaction-progress]]]}))
196+
{:fx [[:dispatch [:wallet/clean-scanned-address]]
197+
[:dispatch [:wallet/clean-local-suggestions]]
198+
[:dispatch [:wallet/clean-send-address]]
199+
[:dispatch [:wallet/select-address-tab nil]]
200+
[:dispatch [:dismiss-modal :screen/wallet.transaction-progress]]]}))
193201

194202
(defn- transaction-data
195203
[{:keys [from-address to-address token-address route data eth-transfer?]}]
@@ -331,11 +339,7 @@
331339
:params request-params
332340
:on-success (fn [result]
333341
(rf/dispatch [:hide-bottom-sheet])
334-
(rf/dispatch [:wallet/add-authorized-transaction result])
335-
(rf/dispatch [:wallet/clean-scanned-address])
336-
(rf/dispatch [:wallet/clean-local-suggestions])
337-
(rf/dispatch [:wallet/clean-send-address])
338-
(rf/dispatch [:wallet/select-address-tab nil]))
342+
(rf/dispatch [:wallet/add-authorized-transaction result]))
339343
:on-error (fn [error]
340344
(log/error "failed to send transaction"
341345
{:event :wallet/send-transaction
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
(ns status-im.contexts.wallet.send.flow-config)
2+
3+
(def steps
4+
[{:screen-id :screen/wallet.select-address
5+
:skip-step? (fn [db] (some? (get-in db [:wallet :ui :send :recipient])))}
6+
{:screen-id :screen/wallet.select-asset
7+
:skip-step? (fn [db] (some? (get-in db [:wallet :ui :send :token])))}
8+
{:screen-id :screen/wallet.send-input-amount
9+
:skip-step? (fn [db] (some? (get-in db [:wallet :ui :send :amount])))}
10+
{:screen-id :screen/wallet.transaction-confirmation}
11+
{:screen-id :screen/wallet.transaction-progress}])

src/status_im/contexts/wallet/send/select_address/tabs/view.cljs

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
{:account-props (assoc account :customization-color color)
1515
:on-press #(rf/dispatch [:wallet/select-send-address
1616
{:address address
17-
:token? false
1817
:recipient account
1918
:stack-id :screen/wallet.select-address}])}])
2019

src/status_im/contexts/wallet/send/select_address/view.cljs

-3
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@
9393
(when-not ens
9494
(rf/dispatch [:wallet/select-send-address
9595
{:address address
96-
:token? false
9796
:recipient local-suggestion
9897
:stack-id :screen/wallet.select-address}]))))
9998
:active-state? false}]
@@ -140,7 +139,6 @@
140139
input-focused? (reagent/atom false)]
141140
(fn []
142141
(let [selected-tab (or (rf/sub [:wallet/send-tab]) (:id (first tabs-data)))
143-
token (rf/sub [:wallet/wallet-send-token])
144142
valid-ens-or-address? (boolean (rf/sub [:wallet/valid-ens-or-address?]))
145143
{:keys [color]} (rf/sub [:wallet/current-viewing-account])]
146144
[floating-button-page/view
@@ -157,7 +155,6 @@
157155
:on-press #(rf/dispatch
158156
[:wallet/select-send-address
159157
{:address @input-value
160-
:token? (some? token)
161158
:stack-id
162159
:screen/wallet.select-address}])
163160
:customization-color color}

src/status_im/contexts/wallet/send/select_asset/view.cljs

+4-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@
6363
search-text (reagent/atom "")
6464
on-change-text #(reset! search-text %)
6565
on-change-tab #(reset! selected-tab %)
66-
on-close #(rf/dispatch [:navigate-back])]
66+
on-close (fn []
67+
(rf/dispatch [:wallet/clean-selected-token])
68+
(rf/dispatch [:wallet/clean-selected-collectible])
69+
(rf/dispatch [:navigate-back]))]
6770
(fn []
6871
[rn/safe-area-view {:style style/container}
6972
[account-switcher/view

src/status_im/contexts/wallet/send/send_amount/view.cljs

+1-4
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
[input-amount/view
1111
{:current-screen-id :screen/wallet.send-input-amount
1212
:button-one-label (i18n/label :t/confirm)
13-
:on-navigate-back (fn []
14-
(rf/dispatch [:wallet/clean-selected-token])
15-
(rf/dispatch [:wallet/clean-selected-collectible])
16-
(rf/dispatch [:navigate-back]))}])
13+
:on-navigate-back #(rf/dispatch [:navigate-back])}])
1714

1815
(def view (quo.theme/with-theme view-internal))

src/status_im/contexts/wallet/send/transaction_confirmation/view.cljs

+2-2
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,9 @@
245245
(defn- view-internal
246246
[_]
247247
(let [on-close (fn []
248-
(rf/dispatch [:navigate-back])
249248
(rf/dispatch [:wallet/clean-suggested-routes])
250-
(rf/dispatch [:wallet/clean-selected-collectible]))]
249+
(rf/dispatch [:wallet/clean-selected-collectible])
250+
(rf/dispatch [:navigate-back]))]
251251
(fn [{:keys [theme]}]
252252
(let [send-transaction-data (rf/sub [:wallet/wallet-send])
253253
token (:token send-transaction-data)

src/status_im/events.cljs

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
status-im.contexts.profile.settings.events
2929
status-im.contexts.shell.share.events
3030
status-im.contexts.syncing.events
31+
status-im.contexts.wallet.common.wizard
3132
status-im.contexts.wallet.create-account.events
3233
status-im.contexts.wallet.effects
3334
status-im.contexts.wallet.events

0 commit comments

Comments
 (0)