diff --git a/resources/commands.js b/resources/commands.js index 830dd1bfb8..2bb3036857 100644 --- a/resources/commands.js +++ b/resources/commands.js @@ -65,7 +65,17 @@ status.command({ }] }); -function validateBalance(params, context) { +function validateSend(params, context) { + if (!context.to) { + return { + errors: [ + status.components.validationMessage( + "Wrong address", + "Recipient address must be specified" + ) + ] + }; + } if (!params.amount) { return { errors: [ @@ -136,7 +146,7 @@ var send = { ); }, handler: sendTransaction, - validator: validateBalance + validator: validateSend }; status.command(send); diff --git a/src/status_im/accounts/login/handlers.cljs b/src/status_im/accounts/login/handlers.cljs index 1288d8fa37..91a2e749bb 100644 --- a/src/status_im/accounts/login/handlers.cljs +++ b/src/status_im/accounts/login/handlers.cljs @@ -24,7 +24,7 @@ (dispatch [:navigate-to-clean :chat-list]) (dispatch [:navigate-to :chat console-chat-id])) (do - (dispatch [:navigate-to-clean :accounts]) + (dispatch [:navigate-to-clean :chat-list]) (dispatch [:navigate-to :chat-list])))) (register-handler diff --git a/src/status_im/chat/handlers/commands.cljs b/src/status_im/chat/handlers/commands.cljs index 331363d0cb..5d942a314d 100644 --- a/src/status_im/chat/handlers/commands.cljs +++ b/src/status_im/chat/handlers/commands.cljs @@ -243,8 +243,10 @@ :params (get parameter-idx) :name) + to (get-in db [:contacts chat-id :address]) context {:current-parameter current-parameter - :from address} + :from address + :to to} path [(if (= :command type) :commands :responses) name :validator] diff --git a/src/status_im/chat/handlers/webview_bridge.cljs b/src/status_im/chat/handlers/webview_bridge.cljs index a3ec25dcd9..0739e0646e 100644 --- a/src/status_im/chat/handlers/webview_bridge.cljs +++ b/src/status_im/chat/handlers/webview_bridge.cljs @@ -9,7 +9,8 @@ [status-im.commands.utils :as cu] [status-im.components.status :as s] [status-im.constants :as c] - [cljs.reader :refer [read-string]])) + [cljs.reader :refer [read-string]] + [status-im.navigation.handlers :as nav])) (def web3 (js/require "web3")) @@ -79,18 +80,28 @@ params (:data options)] (log/debug (str "message from webview: " message)) (case event' - :webview-send-transaction (dispatch [:show-contacts-menu contacts-click-handler :send params]) - :webview-receive-transaction (dispatch [:show-contacts-menu contacts-click-handler :request params]) + :webview-send-transaction + (dispatch [:navigate-to-modal + :contact-list-modal + {:handler contacts-click-handler + :action :send + :params params}]) + :webview-receive-transaction + (dispatch [:navigate-to-modal + :contact-list-modal + {:handler contacts-click-handler + :action :request + :params params}]) :webview-scan-qr (dispatch [:show-scan-qr :webview-address-from-qr]) :webview-send-eth (dispatch [:webview-send-eth! params]) (log/error (str "Unknown event: " event'))))))) -(register-handler :show-contacts-menu - (after #(dispatch [:navigate-to-modal :contact-list-modal])) - (fn [db [_ click-handler action params]] - (assoc db :contacts-click-handler click-handler - :contacts-click-action action - :contacts-click-params params))) +(defmethod nav/preload-data! :contact-list-modal + [db [_ _ {:keys [handler action params]}]] + (assoc db :contacts-click-handler handler + :contacts-click-action action + :contacts-click-params params + :contacts-filter #(not (nil? (:address %))))) (def qr-context {:toolbar-title (label :t/address)}) diff --git a/src/status_im/contacts/handlers.cljs b/src/status_im/contacts/handlers.cljs index 485eca828e..97f1053e78 100644 --- a/src/status_im/contacts/handlers.cljs +++ b/src/status_im/contacts/handlers.cljs @@ -16,9 +16,11 @@ (defmethod nav/preload-data! :group-contacts [db [_ _ group]] - (if group - (assoc db :contacts-group group) - db)) + (dissoc + (if group + (assoc db :contacts-group group) + db) + :contacts-filter)) (defmethod nav/preload-data! :new-group [db _] @@ -28,7 +30,8 @@ (defmethod nav/preload-data! :contact-list [db [_ _ click-handler]] - (assoc db :contacts-click-handler click-handler)) + (assoc db :contacts-click-handler click-handler + :contacts-filter nil)) (register-handler :remove-contacts-click-handler @@ -132,7 +135,7 @@ (defn request-stored-contacts [contacts] (let [contacts-by-hash (get-contacts-by-hash contacts) - data (or (keys contacts-by-hash) ())] + data (or (keys contacts-by-hash) ())] (http-post "get-contacts" {:phone-number-hashes data} (fn [{:keys [contacts]}] (let [contacts' (add-identity contacts-by-hash contacts)] @@ -156,7 +159,7 @@ (defn add-new-contacts [{:keys [contacts] :as db} [_ new-contacts]] - (let [identities (set (map :whisper-identity contacts)) + (let [identities (set (map :whisper-identity contacts)) new-contacts' (->> new-contacts (map #(update-pending-status contacts %)) (remove #(identities (:whisper-identity %))) diff --git a/src/status_im/contacts/subs.cljs b/src/status_im/contacts/subs.cljs index 58357b523e..46afd31d11 100644 --- a/src/status_im/contacts/subs.cljs +++ b/src/status_im/contacts/subs.cljs @@ -60,9 +60,11 @@ (register-sub :contacts-with-letters (fn [db _] - (let [contacts (reaction (:contacts @db))] + (let [contacts (reaction (:contacts @db)) + pred (subscribe [:get :contacts-filter])] (reaction - (let [ordered (sort-contacts @contacts)] + (let [ordered (sort-contacts @contacts) + ordered (if pred (filter @pred ordered) ordered)] (reduce (fn [prev cur] (let [prev-letter (get-contact-letter (last prev)) cur-letter (get-contact-letter cur)] diff --git a/src/status_im/transactions/handlers.cljs b/src/status_im/transactions/handlers.cljs index f3c60b7d94..258d6cc2e5 100644 --- a/src/status_im/transactions/handlers.cljs +++ b/src/status_im/transactions/handlers.cljs @@ -123,6 +123,13 @@ (remove-pending-message db message-id))) (register-handler :transaction-queued + (u/side-effect! + (fn [_ [_ {:keys [id args] :as transaction}]] + (if (:to args) + (dispatch [::transaction-queued transaction]) + (status/discard-transaction id))))) + +(register-handler ::transaction-queued (after #(dispatch [:navigate-to-modal :confirm])) (fn [db [_ {:keys [id message_id args]}]] (let [{:keys [from to value]} args