feature #2696 - chat message after wallet send

Signed-off-by: Goran Jovic <goranjovic@gmail.com>
This commit is contained in:
Goran Jovic 2018-06-26 13:28:13 +02:00
parent f4c156c3f7
commit e27d38e5ca
No known key found for this signature in database
GPG Key ID: D429D1A9B2EB8A8E
8 changed files with 66 additions and 46 deletions

View File

@ -295,20 +295,6 @@
(models.message/group-messages current-chat-id new-messages)
(mark-messages-seen current-chat-id))))))
(handlers/register-handler-fx
:execute-stored-command
(fn [cofx _]
(handlers-macro/merge-fx cofx
(events.commands/execute-stored-command)
(navigation/replace-view :wallet-transaction-sent))))
(handlers/register-handler-fx
:execute-stored-command-and-return-to-chat
(fn [cofx [_ chat-id]]
(handlers-macro/merge-fx cofx
(events.commands/execute-stored-command)
(navigate-to-chat chat-id {:navigation-replace? true}))))
(defn start-chat
"Start a chat, making sure it exists"
[chat-id opts {:keys [db] :as cofx}]

View File

@ -80,12 +80,5 @@
(fn [{:keys [db]} [message opts]]
(if (and (short-preview? opts)
(shortcuts/shortcut-override? message))
(shortcuts/shortcut-override-fx db message opts)
(shortcuts/shortcut-override-fx db message)
(request-command-message-data db message opts))))
;; NOTE(goranjovic) - continues execution of a command that was paused by a shortcut
(defn execute-stored-command [{:keys [db]}]
(let [{:keys [message opts]} (:commands/stored-command db)]
(-> db
(request-command-message-data message opts)
(dissoc :commands/stored-command))))

View File

@ -28,4 +28,4 @@
(fn [cofx [{:keys [chat-id message]}]]
(let [parsed-message (types/json->clj message)]
(message-model/handle-message-from-bot cofx {:message parsed-message
:chat-id chat-id}))))
:chat-id chat-id}))))

View File

@ -34,15 +34,11 @@
(defn shortcut-override? [message]
(get shortcuts (get-in message [:content :command])))
(defn shortcut-override-fx [db {:keys [chat-id content] :as message} opts]
(defn shortcut-override-fx [db {:keys [chat-id content]}]
(let [command (:command content)
contact (get-in db [:contacts/contacts chat-id])
shortcut-specific-fx (get shortcuts command)
stored-command {:message message :opts opts}]
shortcut-specific-fx (get shortcuts command)]
(-> db
(assoc :commands/stored-command stored-command)
;; NOTE(goranjovic) - stores the command if we want to continue it after
;; shortcut has been executed, see `:execute-stored-command`
(shortcut-specific-fx contact (:params content))
;; TODO(goranjovic) - replace this dispatch with a function call
;; Need to refactor chat events namespaces for this to avoid circular dependecy

View File

@ -16,7 +16,8 @@
[status-im.transport.message.core :as transport]
[status-im.transport.message.v1.protocol :as protocol]
[status-im.data-store.messages :as messages-store]
[status-im.data-store.user-statuses :as user-statuses-store]))
[status-im.data-store.user-statuses :as user-statuses-store]
[status-im.utils.datetime :as datetime]))
(def receive-interceptors
[(re-frame/inject-cofx :random-id)
@ -475,3 +476,32 @@
:else
(send-command cofx params))))
(defn custom-send-command-message [whisper-id address asset amount]
{:message nil,
:command {:command {:bot "transactor",
:color "#5fc48d",
:ref ["transactor" :command 83 "send"],
:name "send",
:type :command,
:async-handler false,
:icon "money_white",
:scope #{:global :personal-chats :registered :humans},
:has-handler true,
:preview nil,
:short-preview nil,
:scope-bitmask 83,
:owner-id "transactor"},
:params {:asset asset,
:amount amount},
:to-message nil,
:created-at (datetime/timestamp),
:chat-id whisper-id,
:handler-data nil},
:chat-id whisper-id,
:identity whisper-id,
:address address})
(defn send-custom-send-command [{:keys [whisper-identity address asset amount]} cofx]
(when whisper-identity
(send-command cofx (custom-send-command-message whisper-identity address asset amount))))

View File

@ -70,23 +70,26 @@
(let [db (re-frame/get-coeffect context :db)]
(re-frame/assoc-coeffect context :db (unload-data! db))))))
(def navigation-interceptors
[unload-data-interceptor (re-frame/enrich preload-data!)])
;; event handlers
(handlers/register-handler-db
:navigate-to
[unload-data-interceptor (re-frame/enrich preload-data!)]
navigation-interceptors
(fn [db [_ & params]]
(apply navigate-to db params)))
(handlers/register-handler-db
:navigate-to-modal
[unload-data-interceptor (re-frame/enrich preload-data!)]
navigation-interceptors
(fn [db [_ modal-view]]
(assoc db :modal modal-view)))
(handlers/register-handler-fx
:navigation-replace
[unload-data-interceptor (re-frame/enrich preload-data!)]
navigation-interceptors
(fn [cofx [_ view-id]]
(replace-view view-id cofx)))
@ -118,7 +121,7 @@
(handlers/register-handler-fx
:navigate-to-tab
[unload-data-interceptor (re-frame/enrich preload-data!)]
navigation-interceptors
(fn [{:keys [db] :as cofx} [_ view-id]]
(handlers-macro/merge-fx cofx
{:db (-> db

View File

@ -9,15 +9,18 @@
[status-im.utils.ethereum.erc20 :as erc20]
[status-im.utils.ethereum.tokens :as tokens]
[status-im.utils.handlers :as handlers]
[status-im.utils.handlers-macro :as handlers-macro]
[status-im.utils.hex :as utils.hex]
[status-im.utils.money :as money]
[status-im.utils.security :as security]
[status-im.utils.types :as types]
[status-im.utils.utils :as utils]
[status-im.models.wallet :as models.wallet]
[status-im.chat.models.message :as models.message]
[status-im.constants :as constants]
[status-im.transport.utils :as transport.utils]
[taoensso.timbre :as log]))
[taoensso.timbre :as log]
[status-im.ui.screens.navigation :as navigation]))
;;;; FX
@ -272,12 +275,21 @@
(update :gas str)
(dissoc :message-id :id))))
(handlers/register-handler-fx
:send-transaction-message
(concat models.message/send-interceptors
navigation/navigation-interceptors)
(fn [cofx [{:keys [view-id] :as params}]]
(handlers-macro/merge-fx cofx
(models.message/send-custom-send-command params)
(navigation/replace-view view-id))))
(handlers/register-handler-fx
::transaction-completed
(fn [{db :db now :now} [_ {:keys [id response] :as params} modal?]]
(let [{:keys [hash error]} response
{:keys [method from-chat?]} (get-in db [:wallet :send-transaction])
db' (assoc-in db [:wallet :send-transaction :in-progress?] false)]
(let [{:keys [hash error]} response
{:keys [method whisper-identity to symbol amount-text]} (get-in db [:wallet :send-transaction])
db' (assoc-in db [:wallet :send-transaction :in-progress?] false)]
(if (and error (string? error) (not (string/blank? error))) ;; ignore error here, error will be handled in :transaction-failed
{:db db'}
(merge
@ -288,17 +300,17 @@
(update-in [:wallet :transactions-unsigned] dissoc id)
true
(update-in [:wallet :send-transaction] merge clear-send-properties {:tx-hash hash}))}
(cond
modal?
(if modal?
(cond-> {:dispatch [:navigate-back]}
(= method constants/web3-send-transaction)
(assoc :dispatch-later [{:ms 400 :dispatch [:navigate-to-modal :wallet-transaction-sent-modal]}]))
from-chat?
{:dispatch [:execute-stored-command]}
:else
{:dispatch [:navigation-replace :wallet-transaction-sent]}))))))
{:dispatch [:send-transaction-message {:view-id :wallet-transaction-sent
:whisper-identity whisper-identity
:address to
:asset (name symbol)
:amount amount-text}]}))))))
(defn on-transactions-modal-completed [raw-results]
(let [result (types/json->clj raw-results)]

View File

@ -144,7 +144,7 @@
:trigger [:navigate-to-clean :wallet]
:properties {:target :wallet-got-it}}
{:label "Tap"
:trigger [:execute-stored-command]
:trigger [:send-transaction-message]
:properties {:target :wallet-transaction-sent}}
;;Profile