diff --git a/src/syng_im/android/core.cljs b/src/syng_im/android/core.cljs index 2b80e8436d..83fbd67e02 100644 --- a/src/syng_im/android/core.cljs +++ b/src/syng_im/android/core.cljs @@ -55,5 +55,6 @@ (dispatch [:initialize-protocol]) (dispatch [:load-user-phone-number]) (dispatch [:load-syng-contacts]) - (dispatch [:set-sign-up-chat]) + ;; TODO execute on first run only + ;; (dispatch [:set-sign-up-chat]) (.registerComponent app-registry "SyngIm" #(r/reactify-component app-root))) diff --git a/src/syng_im/components/chat/chat_message_new.cljs b/src/syng_im/components/chat/chat_message_new.cljs index 0cb37c8f3f..4afa65e0de 100644 --- a/src/syng_im/components/chat/chat_message_new.cljs +++ b/src/syng_im/components/chat/chat_message_new.cljs @@ -29,10 +29,10 @@ [default-command-input-view command])) (defn chat-message-new [] - (let [input-command-atom (subscribe [:get-input-command])] + (let [command-atom (subscribe [:get-chat-command])] (fn [] - (let [input-command @input-command-atom] + (let [command @command-atom] [view - (if input-command - [special-input-view input-command] + (if command + [special-input-view command] [plain-message-input-view])])))) diff --git a/src/syng_im/components/chat/input/simple_command.cljs b/src/syng_im/components/chat/input/simple_command.cljs index cef3189904..3e84760747 100644 --- a/src/syng_im/components/chat/input/simple_command.cljs +++ b/src/syng_im/components/chat/input/simple_command.cljs @@ -12,18 +12,21 @@ [reagent.core :as r])) (defn cancel-command-input [] - (dispatch [:set-input-command nil])) + (dispatch [:set-chat-command nil])) + +(defn set-input-message [message] + (dispatch [:set-chat-command-content message])) (defn send-command [chat-id command text] (dispatch [:send-chat-command chat-id (:command command) text]) (cancel-command-input)) (defn simple-command-input-view [command input-options] - (let [message-atom (r/atom nil) - chat-id-atom (subscribe [:get-current-chat-id])] - (fn [] - (let [message @message-atom - chat-id @chat-id-atom] + (let [chat-id-atom (subscribe [:get-current-chat-id]) + message-atom (subscribe [:get-chat-command-content])] + (fn [command input-options] + (let [chat-id @chat-id-atom + message @message-atom] [view {:style {:flexDirection "row"}} [view {:style {:flex 1 :flexDirection "column" @@ -63,13 +66,13 @@ :underlineColorAndroid "transparent" :autoFocus true :keyboardType "default" - :value message :onChangeText (fn [new-text] - (reset! message-atom new-text)) + (set-input-message new-text)) :onSubmitEditing (fn [e] (send-command chat-id command message) - (reset! message-atom nil))} - input-options)]]] + (set-input-message nil))} + input-options) + message]]] [touchable-highlight {:style {:marginTop 14 :marginRight 16 :position "absolute" diff --git a/src/syng_im/components/chat/plain_message_input.cljs b/src/syng_im/components/chat/plain_message_input.cljs index 66fd507c9d..476aa1b13e 100644 --- a/src/syng_im/components/chat/plain_message_input.cljs +++ b/src/syng_im/components/chat/plain_message_input.cljs @@ -10,50 +10,54 @@ [syng-im.resources :as res] [reagent.core :as r])) +(defn set-input-message [message] + (dispatch [:set-chat-input-text message])) + (defn plain-message-input-view [] - (let [text (r/atom "") - chat (subscribe [:get-current-chat])] - (dispatch [:generate-suggestions @text]) + (let [chat (subscribe [:get-current-chat]) + input-message-atom (subscribe [:get-chat-input-text])] (fn [] - [view {:style {:flexDirection "column"}} - [suggestions-view] - [view {:style {:flexDirection "row" - :margin 1 - :height 40 - :backgroundColor "white" - :borderRadius 5}} - [image {:source res/mic - :style {:marginTop 11 - :marginLeft 14 - :width 13 - :height 20}}] - [text-input {:underlineColorAndroid "transparent" - :style {:flex 1 - :marginLeft 18 - :lineHeight 42 - :fontSize 14 - :fontFamily "Avenir-Roman" - :color "#9CBFC0"} - :autoFocus true - :placeholder "Type your message here" - :value @text - :onChangeText (fn [new-text] - (dispatch [:generate-suggestions new-text]) - (reset! text new-text) - (r/flush)) - :onSubmitEditing (fn [e] - (let [{:keys [group-chat chat-id]} @chat] - (if group-chat - (dispatch [:send-group-chat-msg chat-id @text]) - (dispatch [:send-chat-msg chat-id @text]))) - (reset! text nil))}] - [image {:source res/smile - :style {:marginTop 11 - :marginRight 12 - :width 18 - :height 18}}] - [image {:source res/att - :style {:marginTop 14 - :marginRight 16 - :width 17 - :height 14}}]]]))) + (let [input-message @input-message-atom] + [view {:style {:flexDirection "column"}} + [suggestions-view] + [view {:style {:flexDirection "row" + :margin 1 + :height 40 + :backgroundColor "white" + :borderRadius 5}} + [image {:source res/mic + :style {:marginTop 11 + :marginLeft 14 + :width 13 + :height 20}}] + [text-input {:underlineColorAndroid "transparent" + :style {:flex 1 + :marginLeft 18 + :lineHeight 42 + :fontSize 14 + :fontFamily "Avenir-Roman" + :color "#9CBFC0"} + :autoFocus true + :placeholder "Type your message here" + :onChangeText (fn [new-text] + (set-input-message new-text)) + :onSubmitEditing (fn [e] + (let [{:keys [group-chat chat-id]} @chat] + ;; TODO get text from state? + (if group-chat + (dispatch [:send-group-chat-msg chat-id + input-message]) + (dispatch [:send-chat-msg chat-id + input-message]))) + (set-input-message nil))} + input-message] + [image {:source res/smile + :style {:marginTop 11 + :marginRight 12 + :width 18 + :height 18}}] + [image {:source res/att + :style {:marginTop 14 + :marginRight 16 + :width 17 + :height 14}}]]])))) diff --git a/src/syng_im/components/chat/suggestions.cljs b/src/syng_im/components/chat/suggestions.cljs index 7f0f5c1b71..21b22b6711 100644 --- a/src/syng_im/components/chat/suggestions.cljs +++ b/src/syng_im/components/chat/suggestions.cljs @@ -15,7 +15,7 @@ [syng-im.utils.logging :as log])) (defn set-command-input [command] - (dispatch [:set-input-command command])) + (dispatch [:set-chat-command command])) (defn suggestion-list-item [suggestion] [touchable-highlight {:onPress (fn [] diff --git a/src/syng_im/db.cljs b/src/syng_im/db.cljs index e265eb1386..3f404f3b33 100644 --- a/src/syng_im/db.cljs +++ b/src/syng_im/db.cljs @@ -9,7 +9,6 @@ :identity-password "replace-me-with-user-entered-password" :contacts [] :chat {:current-chat-id "0x0479a5ed1f38cadfad1db6cd56c4b659b0ebe052bbe9efa950f6660058519fa4ca6be2dda66afa80de96ab00eb97a2605d5267a1e8f4c2a166ab551f6826608cdd" - :suggestions [] :command nil} :chats {} :chats-updated-signal 0 @@ -19,10 +18,13 @@ (def protocol-initialized-path [:protocol-initialized]) (def identity-password-path [:identity-password]) (def current-chat-id-path [:chat :current-chat-id]) -(def input-suggestions-path [:chat :suggestions]) -(def input-command-path [:chat :command]) (def updated-chats-signal-path [:chats-updated-signal]) (defn updated-chat-signal-path [chat-id] [:chats chat-id :chat-updated-signal]) +(defn chat-input-text-path [chat-id] + [:chats chat-id :input-text]) +(defn chat-command-path [chat-id] + [:chats chat-id :command-input :command]) +(defn chat-command-content-path [chat-id] + [:chats chat-id :command-input :content]) (def new-group-path [:new-group]) - diff --git a/src/syng_im/handlers.cljs b/src/syng_im/handlers.cljs index e93b3d2824..fc462f3ea7 100644 --- a/src/syng_im/handlers.cljs +++ b/src/syng_im/handlers.cljs @@ -14,8 +14,8 @@ message-by-id]] [syng-im.handlers.server :as server] [syng-im.handlers.contacts :as contacts-service] - [syng-im.handlers.suggestions :as suggestions-service] - [syng-im.handlers.commands :as commands-service] + [syng-im.handlers.commands :refer [set-chat-command + set-chat-command-content]] [syng-im.handlers.sign-up :as sign-up-service] [syng-im.models.chats :refer [create-chat]] @@ -23,7 +23,8 @@ set-current-chat-id update-new-group-selection clear-new-group - new-group-selection]] + new-group-selection + set-chat-input-text]] [syng-im.utils.logging :as log] [syng-im.protocol.api :as api] [syng-im.constants :refer [text-content-type]] @@ -229,13 +230,17 @@ ;; -- Chat -------------------------------------------------------------- -(register-handler :generate-suggestions +(register-handler :set-chat-input-text (fn [db [_ text]] - (suggestions-service/generate-suggestions db text))) + (set-chat-input-text db text))) -(register-handler :set-input-command - (fn [db [_ command]] - (commands-service/set-input-command db command))) +(register-handler :set-chat-command + (fn [db [_ command-key]] + (set-chat-command db command-key))) + +(register-handler :set-chat-command-content + (fn [db [_ content]] + (set-chat-command-content db content))) (register-handler :show-contacts (fn [db [action navigator]] diff --git a/src/syng_im/handlers/commands.cljs b/src/syng_im/handlers/commands.cljs index a305cf629a..1b6f2f2e67 100644 --- a/src/syng_im/handlers/commands.cljs +++ b/src/syng_im/handlers/commands.cljs @@ -5,5 +5,12 @@ [syng-im.utils.utils :refer [log on-error http-post]] [syng-im.utils.logging :as log])) -(defn set-input-command [db command] - (assoc-in db db/input-command-path (get-command command))) +(defn set-chat-command-content [db content] + (assoc-in db (db/chat-command-content-path (get-in db db/current-chat-id-path)) + content)) + +(defn set-chat-command [db command-key] + (-> db + (set-chat-command-content nil) + (assoc-in (db/chat-command-path (get-in db db/current-chat-id-path)) + (get-command command-key)))) diff --git a/src/syng_im/handlers/sign_up.cljs b/src/syng_im/handlers/sign_up.cljs index 5c405f8de7..ecfbd8fd9a 100644 --- a/src/syng_im/handlers/sign_up.cljs +++ b/src/syng_im/handlers/sign_up.cljs @@ -27,7 +27,7 @@ :outgoing false :from "console" :to "me"}]) - (dispatch [:set-input-command :keypair-password]) + (dispatch [:set-chat-command :keypair-password]) db) (defn send-console-msg [text] diff --git a/src/syng_im/handlers/suggestions.cljs b/src/syng_im/handlers/suggestions.cljs index e442e4144e..8f084c132e 100644 --- a/src/syng_im/handlers/suggestions.cljs +++ b/src/syng_im/handlers/suggestions.cljs @@ -1,6 +1,7 @@ (ns syng-im.handlers.suggestions (:require [re-frame.core :refer [subscribe dispatch dispatch-sync]] [syng-im.db :as db] + [syng-im.models.chat :refer [current-chat-id]] [syng-im.models.commands :refer [commands suggestions]] [syng-im.utils.utils :refer [log on-error http-post]] [syng-im.utils.logging :as log])) @@ -10,6 +11,3 @@ ;; TODO change 'commands' to 'suggestions' (filterv #(.startsWith (:text %) text) commands) [])) - -(defn generate-suggestions [db text] - (assoc-in db db/input-suggestions-path (get-suggestions text))) diff --git a/src/syng_im/models/chat.cljs b/src/syng_im/models/chat.cljs index 7a8b29d4ce..0abed387e5 100644 --- a/src/syng_im/models/chat.cljs +++ b/src/syng_im/models/chat.cljs @@ -29,10 +29,13 @@ (defn clear-new-group [db] (assoc-in db db/new-group-path #{})) +(defn set-chat-input-text [db text] + (assoc-in db (db/chat-input-text-path (current-chat-id db)) text)) + (comment (swap! re-frame.db/app-db (fn [db] (signal-chat-updated db "0x0479a5ed1f38cadfad1db6cd56c4b659b0ebe052bbe9efa950f6660058519fa4ca6be2dda66afa80de96ab00eb97a2605d5267a1e8f4c2a166ab551f6826608cdd"))) (current-chat-id @re-frame.db/app-db) - ) \ No newline at end of file + ) diff --git a/src/syng_im/subs.cljs b/src/syng_im/subs.cljs index c058af7d7d..2b13739689 100644 --- a/src/syng_im/subs.cljs +++ b/src/syng_im/subs.cljs @@ -8,7 +8,8 @@ chats-updated? chat-by-id]] [syng-im.models.messages :refer [get-messages]] - [syng-im.models.contacts :refer [contacts-list]])) + [syng-im.models.contacts :refer [contacts-list]] + [syng-im.handlers.suggestions :refer [get-suggestions]])) ;; -- Chat -------------------------------------------------------------- @@ -29,11 +30,20 @@ (register-sub :get-suggestions (fn [db _] - (reaction (get-in @db db/input-suggestions-path)))) + (let [input-text (reaction (get-in @db (db/chat-input-text-path (current-chat-id @db))))] + (reaction (get-suggestions @input-text))))) -(register-sub :get-input-command +(register-sub :get-chat-input-text (fn [db _] - (reaction (get-in @db db/input-command-path)))) + (reaction (get-in @db (db/chat-input-text-path (current-chat-id @db)))))) + +(register-sub :get-chat-command + (fn [db _] + (reaction (get-in @db (db/chat-command-path (current-chat-id @db)))))) + +(register-sub :get-chat-command-content + (fn [db _] + (reaction (get-in @db (db/chat-command-content-path (current-chat-id @db)))))) ;; -- Chats list -------------------------------------------------------------- @@ -89,4 +99,3 @@ (fn [db _] (reaction (contacts-list)))) -