Merge pull request #461 from status-im/feature/prefill-response-parameters-#417

prefill response parameters with request data
This commit is contained in:
Roman Volosovskyi 2016-11-17 09:55:35 +02:00 committed by GitHub
commit 23c1a1ae30
8 changed files with 60 additions and 44 deletions

View File

@ -9,8 +9,7 @@
[status-im.i18n :as i18n]
[status-im.utils.datetime :as time]
[status-im.utils.random :as random]
[status-im.utils.platform :as platform]
[taoensso.timbre :as log]))
[status-im.utils.platform :as platform]))
(defn content-by-command
[{:keys [type]} content]
@ -109,7 +108,6 @@
(fn [{:keys [current-chat-id current-account-id] :as db} [_ command-input command]]
(let [command-input (or command-input (commands/get-command-input db))
command (or command (commands/get-chat-command db))]
(log/debug "Staging command 1: " command-input command)
(dispatch [::start-command-validation! {:command-input command-input
:command command
:chat-id current-chat-id
@ -150,10 +148,9 @@
(after #(dispatch [:command-edit-mode]))]
set-chat-command)
(defn set-response-command [db [_ to-message-id command-key]]
(log/debug "set-response-command: " to-message-id command-key)
(defn set-response-command [db [_ to-message-id command-key params]]
(-> db
(commands/set-command-input :responses to-message-id command-key)
(commands/set-command-input :responses to-message-id command-key params)
(assoc :canceled-command false)))
(register-handler ::set-response-chat-command
@ -165,9 +162,9 @@
(register-handler :set-response-chat-command
(u/side-effect!
(fn [{:keys [current-chat-id] :as db}
[_ to-message-id command-key]]
[_ to-message-id command-key params]]
(when (get-in db [:chats current-chat-id :responses command-key])
(dispatch [::set-response-chat-command to-message-id command-key])))))
(dispatch [::set-response-chat-command to-message-id command-key params])))))
(register-handler ::add-validation-errors
(after #(dispatch [:fix-response-height]))
@ -263,10 +260,8 @@
(commands/set-command-parameter db name value))))
(register-handler :next-command-parameter
(fn [{:keys [current-chat-id] :as db}]
(-> db
(update-in [:chats current-chat-id :command-input :parameter-idx] inc)
(commands/set-chat-command-content nil))))
(fn [db _]
(commands/next-command-parameter db)))
(register-handler :check-suggestions-trigger!
(u/side-effect!

View File

@ -20,7 +20,6 @@
(defn scan-qr-handler
[{:keys [contacts]} [_ _ data]]
(log/debug "scaned qr" data)
(let [data' (read-string data)
data'' (cond
(map? data') data'
@ -40,7 +39,6 @@
(assoc db :webview-bridge bridge)))
(defn contacts-click-handler [whisper-identity action params]
(log/debug "Contact clicked: " whisper-identity action params)
(dispatch [:navigate-back])
(when action
(if (= whisper-identity :qr-scan)
@ -58,7 +56,6 @@
:parameter-idx 0
:params {"amount" (:amount params)}
:to-message-id nil}]
(log/debug "Staging command: " command-key command command-input)
(dispatch [:stage-command command-input command])))))

View File

@ -9,10 +9,7 @@
[status-im.chat.views.plain-message :as plain-message]
[status-im.chat.views.command :as command]
[status-im.constants :refer [content-type-status]]
[status-im.chat.utils :as cu]
[status-im.utils.datetime :as time]
[status-im.utils.platform :refer [platform-specific]]
[taoensso.timbre :as log]))
[status-im.utils.platform :refer [platform-specific]]))
(register-sub :chat-properties
(fn [db [_ properties]]
@ -116,9 +113,8 @@
(let [command (subscribe [:get-chat-command])
chat-id (subscribe [:get-current-chat-id])]
(reaction
(let [path [:chats @chat-id :command-input :parameter-idx]
n (get-in @db path)]
(when n (nth (:params @command) n)))))))
(let [parameter-index (commands/get-command-parameter-index @db @chat-id)]
(when parameter-index (nth (:params @command) parameter-index)))))))
(register-sub :get-chat-command-content
(fn [db _]

View File

@ -130,9 +130,6 @@
:contact-address (if outgoing to from)
:current-chat-id current-chat-id}]]))
(defn set-chat-command [message-id command]
(dispatch [:set-response-chat-command message-id (keyword (:name command))]))
(defn message-view
[message content]
[view (st/message-view message)

View File

@ -13,8 +13,7 @@
[status-im.chat.styles.plain-message :as st-message]
[status-im.chat.styles.response :as st-response]
[reagent.core :as r]
[clojure.string :as str]
[taoensso.timbre :as log]))
[clojure.string :as str]))
(defn send-button [{:keys [on-press accessibility-label]}]
[touchable-highlight {:on-press on-press

View File

@ -9,14 +9,14 @@
touchable-highlight]]
[status-im.chat.styles.message :as st]
[status-im.models.commands :refer [parse-command-request]]
[status-im.components.animation :as anim]
[taoensso.timbre :as log]))
[status-im.components.animation :as anim]))
(def request-message-icon-scale-delay 600)
(defn set-chat-command [message-id command]
(log/debug "set-chat-command: " message-id command)
(dispatch [:set-response-chat-command message-id (keyword (:name command))]))
(let [command-key (keyword (:name command))
params (:set-params command)]
(dispatch [:set-response-chat-command message-id command-key params])))
(defn label [command]
(when command
@ -78,8 +78,11 @@
status-initialized? (subscribe [:get :status-module-initialized?])]
(fn [{:keys [message-id content from incoming-group]}]
(let [commands @commands-atom
params (:params content)
{:keys [command content]} (parse-command-request commands content)
_ (log/debug "message-content: " command content)]
command (if (and params command)
(merge command {:set-params params})
command)]
[view st/comand-request-view
[touchable-highlight
{:on-press (when (and (not @answered?) @status-initialized?)

View File

@ -18,7 +18,7 @@
(->> (keywordize-keys (apply hash-map (split s #"[;=]")))
(map (fn [[k v]]
[k (if (= k :params)
(read-string v)
(keywordize-keys (read-string v))
v)]))
(into {})))

View File

@ -1,7 +1,6 @@
(ns status-im.models.commands
(:require [status-im.db :as db]
[tailrecursion.priority-map :refer [priority-map-by]]
[taoensso.timbre :as log]))
[tailrecursion.priority-map :refer [priority-map-by]]))
(defn get-commands [{:keys [current-chat-id] :as db}]
(or (get-in db [:chats current-chat-id :commands]) {}))
@ -16,7 +15,7 @@
(defn set-chat-command-content
[{:keys [current-chat-id] :as db} content]
(assoc-in db [:chats current-chat-id :command-input :content] content))
(assoc-in db (db/chat-command-content-path current-chat-id) content))
(defn set-command-parameter
[{:keys [current-chat-id] :as db} name value]
@ -29,16 +28,47 @@
(defn get-command-input [{:keys [current-chat-id] :as db}]
(get-in db [:chats current-chat-id :command-input]))
(defn add-params [command params]
(let [command-params (:params command)
command-params (vec (map (fn [param]
(let [param-key (keyword (:name param))
value (get params param-key)]
(assoc param :value value))) command-params))]
(assoc command :params command-params)))
(defn set-command-input
([db type command-key]
(set-command-input db type nil command-key))
([{:keys [current-chat-id] :as db} type message-id command-key]
(update-in db [:chats current-chat-id :command-input] merge
{:content nil
:command (get-response-or-command type db command-key)
:parameter-idx 0
:params nil
:to-message-id message-id})))
([db type message-id command-key]
(set-command-input db type message-id command-key nil))
([{:keys [current-chat-id] :as db} type message-id command-key params]
(let [command (-> (get-response-or-command type db command-key)
(add-params params))
first-parameter (get (:params command) 0)
value (:value first-parameter)]
(update-in db [:chats current-chat-id :command-input] merge
{:content value
:command command
:parameter-idx 0
:params params
:to-message-id message-id}))))
(defn get-command-parameter-index
([{:keys [current-chat-id] :as db}]
(get-command-parameter-index db current-chat-id))
([db chat-id]
(get-in db [:chats chat-id :command-input :parameter-idx])))
(defn next-command-parameter
[{:keys [current-chat-id] :as db}]
(let [parameter-index (get-command-parameter-index db)
command (get-chat-command db)
next-parameter (get (:params command) (inc parameter-index))
value (:value next-parameter)]
(-> db
(update-in [:chats current-chat-id :command-input :parameter-idx] inc)
(set-chat-command-content value))))
(defn get-chat-command-to-message-id
[{:keys [current-chat-id] :as db}]
@ -70,5 +100,4 @@
(update content :command #((keyword %) commands)))
(defn parse-command-request [commands content]
(log/debug "parse-command-request: " commands content)
(update content :command #((keyword %) commands)))