[refactor] send-transaction-message fx/defn
- turn :send-transaction-message event into an fx producing function - allow transaction with defined on-result event to also send transaction message Signed-off-by: yenda <eric@status.im>
This commit is contained in:
parent
d05ff8a1b8
commit
2c028a474b
|
@ -75,32 +75,78 @@
|
||||||
all-tokens
|
all-tokens
|
||||||
symbol
|
symbol
|
||||||
chain
|
chain
|
||||||
#(re-frame/dispatch [::transaction-completed (types/json->clj %)])
|
#(re-frame/dispatch [:wallet.callback/transaction-completed (types/json->clj %)])
|
||||||
password]}))))
|
password]}))))
|
||||||
|
|
||||||
|
;; SIGN MESSAGE
|
||||||
|
(handlers/register-handler-fx
|
||||||
|
:wallet/sign-message
|
||||||
|
(fn [_ [_ typed? screen-params password-error-cb]]
|
||||||
|
(let [{:keys [data from password]} screen-params]
|
||||||
|
(if typed?
|
||||||
|
{::sign-typed-data {:data data
|
||||||
|
:password password
|
||||||
|
:account from
|
||||||
|
:on-completed #(re-frame/dispatch [::sign-message-completed
|
||||||
|
screen-params
|
||||||
|
(types/json->clj %)
|
||||||
|
password-error-cb])}}
|
||||||
|
{::sign-message {:params {:data data
|
||||||
|
:password (security/safe-unmask-data password)
|
||||||
|
:account from}
|
||||||
|
:on-completed #(re-frame/dispatch [::sign-message-completed
|
||||||
|
screen-params
|
||||||
|
(types/json->clj %)
|
||||||
|
password-error-cb])}}))))
|
||||||
|
|
||||||
|
(fx/defn send-transaction-message
|
||||||
|
"NOTE(goranjovic): we want to send the payment message only when we have a
|
||||||
|
whisper id for the recipient, we always redirect to `:wallet-transaction-sent`
|
||||||
|
even when we don't"
|
||||||
|
[{:keys [db] :as cofx} chat-id params]
|
||||||
|
(let [send-command? (and chat-id
|
||||||
|
(get-in db [:id->command ["send" #{:personal-chats}]]))]
|
||||||
|
(when send-command?
|
||||||
|
(commands-sending/send cofx chat-id send-command? params))))
|
||||||
|
|
||||||
;; SEND TRANSACTION CALLBACK
|
;; SEND TRANSACTION CALLBACK
|
||||||
(handlers/register-handler-fx
|
(handlers/register-handler-fx
|
||||||
::transaction-completed
|
:wallet.callback/transaction-completed
|
||||||
|
[(re-frame/inject-cofx :random-id-generator)]
|
||||||
(fn [{:keys [db now] :as cofx} [_ {:keys [result error]}]]
|
(fn [{:keys [db now] :as cofx} [_ {:keys [result error]}]]
|
||||||
(let [{:keys [id method public-key to symbol amount-text on-result]} (get-in db [:wallet :send-transaction])
|
(let [{:keys [id method public-key to symbol amount-text on-result
|
||||||
|
send-transaction-message?]}
|
||||||
|
(get-in db [:wallet :send-transaction])
|
||||||
db' (assoc-in db [:wallet :send-transaction :in-progress?] false)]
|
db' (assoc-in db [:wallet :send-transaction :in-progress?] false)]
|
||||||
(if error
|
(if error
|
||||||
;; ERROR
|
;; ERROR
|
||||||
(models.wallet/handle-transaction-error (assoc cofx :db db') error)
|
(models.wallet/handle-transaction-error (assoc cofx :db db') error)
|
||||||
;; RESULT
|
;; RESULT
|
||||||
(merge
|
(fx/merge cofx
|
||||||
{:db (cond-> (assoc-in db' [:wallet :send-transaction] {})
|
(merge
|
||||||
|
{:db (cond-> (assoc-in db' [:wallet :send-transaction] {})
|
||||||
|
|
||||||
(not (constants/web3-sign-message? method))
|
(not (constants/web3-sign-message? method))
|
||||||
(assoc-in [:wallet :transactions result]
|
(assoc-in [:wallet :transactions result]
|
||||||
(models.wallet/prepare-unconfirmed-transaction db now result)))}
|
(models.wallet/prepare-unconfirmed-transaction db now result)))}
|
||||||
|
(when on-result
|
||||||
(if on-result
|
{:dispatch (conj on-result id result method)}))
|
||||||
{:dispatch (conj on-result id result method)}
|
#(when (or (not on-result)
|
||||||
{:dispatch [:send-transaction-message public-key {:address to
|
send-transaction-message?)
|
||||||
:asset (name symbol)
|
(send-transaction-message
|
||||||
:amount amount-text
|
%
|
||||||
:tx-hash result}]}))))))
|
public-key
|
||||||
|
{:address to
|
||||||
|
:asset (name symbol)
|
||||||
|
:amount amount-text
|
||||||
|
:tx-hash result}))
|
||||||
|
#(when-not on-result
|
||||||
|
(navigation/navigate-to-clean
|
||||||
|
%
|
||||||
|
(if (contains? #{:wallet-send-transaction :enter-pin :hardwallet-connect} (:view-id db))
|
||||||
|
:wallet-transaction-sent
|
||||||
|
:wallet-transaction-sent-modal)
|
||||||
|
{})))))))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:show-sign-message-error
|
:show-sign-message-error
|
||||||
|
@ -193,23 +239,6 @@
|
||||||
(navigation/navigate-to-cofx {:db db'} :wallet-sign-message-modal screen-params))
|
(navigation/navigate-to-cofx {:db db'} :wallet-sign-message-modal screen-params))
|
||||||
{:db db'})))))))
|
{:db db'})))))))
|
||||||
|
|
||||||
(handlers/register-handler-fx
|
|
||||||
:send-transaction-message
|
|
||||||
(concat [(re-frame/inject-cofx :random-id-generator)]
|
|
||||||
navigation/navigation-interceptors)
|
|
||||||
(fn [{:keys [db] :as cofx} [_ chat-id params]]
|
|
||||||
;;NOTE(goranjovic): we want to send the payment message only when we have a whisper id
|
|
||||||
;; for the recipient, we always redirect to `:wallet-transaction-sent` even when we don't
|
|
||||||
(let [send-command? (and chat-id (get-in db [:id->command ["send" #{:personal-chats}]]))]
|
|
||||||
(fx/merge cofx
|
|
||||||
#(when send-command?
|
|
||||||
(commands-sending/send % chat-id send-command? params))
|
|
||||||
(navigation/navigate-to-clean
|
|
||||||
(if (contains? #{:wallet-send-transaction :enter-pin :hardwallet-connect} (:view-id db))
|
|
||||||
:wallet-transaction-sent
|
|
||||||
:wallet-transaction-sent-modal)
|
|
||||||
{})))))
|
|
||||||
|
|
||||||
(defn set-and-validate-amount-db [db amount symbol decimals]
|
(defn set-and-validate-amount-db [db amount symbol decimals]
|
||||||
(let [{:keys [value error]} (wallet.db/parse-amount amount decimals)]
|
(let [{:keys [value error]} (wallet.db/parse-amount amount decimals)]
|
||||||
(-> db
|
(-> db
|
||||||
|
|
Loading…
Reference in New Issue