Show commands on type '!'

This commit is contained in:
virvar 2016-03-30 15:23:37 +03:00
parent c6a589bd4b
commit 0d9273d8b5
9 changed files with 125 additions and 46 deletions

View File

@ -32,7 +32,8 @@
(add-event-listener "hardwareBackPress" new-listener)))))
(defn app-root []
[navigator {:initial-route (clj->js {:view-id :chat-list})
[navigator {:initial-route (clj->js {:view-id ;:chat-list
:chat})
:render-scene (fn [route nav]
(log/debug "route" route)
(when true ;; nav/*nav-render*

View File

@ -0,0 +1,47 @@
(ns syng-im.components.chat.suggestions
(:require-macros
[natal-shell.core :refer [with-error-view]])
(:require [clojure.string :as cstr]
[reagent.core :as r]
[re-frame.core :refer [subscribe dispatch dispatch-sync]]
[syng-im.components.react :refer [view
image
text
list-view
list-item]]
[syng-im.utils.listview :refer [to-datasource]]
[syng-im.utils.utils :refer [log toast http-post]]
[syng-im.utils.logging :as log]))
(defn suggestion-list-item [suggestion]
[view {:style {:flexDirection "row"
:marginVertical 5
:marginHorizontal 10
:height 20
;; :backgroundColor "white"
}}
[text {:underlineColorAndroid "#9CBFC0"
:style {:flex 1
:marginLeft 18
:lineHeight 18
:fontSize 14
:fontFamily "Avenir-Roman"
:color "#9CBFC0"}}
(:text suggestion)]])
(defn render-row [row section-id row-id]
(list-item [suggestion-list-item (js->clj row :keywordize-keys true)]))
(defn suggestions-view []
(let [suggestions (subscribe [:get-suggestions])]
(fn []
(when @suggestions
[view {:style {:flexDirection "row"
:marginVertical 5
:marginHorizontal 10
:height 120
:backgroundColor "#E5F5F6"
:borderRadius 5}}
[list-view {:dataSource (to-datasource @suggestions)
:renderRow render-row
:style {}}]]))))

View File

@ -4,6 +4,7 @@
view
image
text-input]]
[syng-im.components.chat.suggestions :refer [suggestions-view]]
[syng-im.utils.logging :as log]
[syng-im.resources :as res]
[reagent.core :as r]))
@ -13,39 +14,42 @@
(let [text (r/atom nil)
chat-id (subscribe [:get-current-chat-id])]
(fn []
[view {:style {:flexDirection "row"
:margin 10
:height 40
:backgroundColor "#E5F5F6"
:borderRadius 5}}
[image {:source res/mic
:style {:marginTop 11
:marginLeft 14
:width 13
:height 20}}]
[text-input {:underlineColorAndroid "#9CBFC0"
:style {:flex 1
:marginLeft 18
:lineHeight 42
:fontSize 14
:fontFamily "Avenir-Roman"
:color "#9CBFC0"}
:autoFocus true
:placeholder "Enter your message here"
:value @text
:onChangeText (fn [new-text]
(reset! text new-text)
(r/flush))
:onSubmitEditing (fn [e]
(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}}]])))
[view {:style {:flexDirection "column"}}
[view {:style {:flexDirection "row"
:margin 10
:height 40
:backgroundColor "#E5F5F6"
:borderRadius 5}}
[image {:source res/mic
:style {:marginTop 11
:marginLeft 14
:width 13
:height 20}}]
[text-input {:underlineColorAndroid "#9CBFC0"
:style {:flex 1
:marginLeft 18
:lineHeight 42
:fontSize 14
:fontFamily "Avenir-Roman"
:color "#9CBFC0"}
:autoFocus true
:placeholder "Enter your message here"
:value @text
:onChangeText (fn [new-text]
(dispatch [:generate-suggestions new-text])
(reset! text new-text)
(r/flush))
:onSubmitEditing (fn [e]
(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}}]]
[suggestions-view]])))

View File

@ -8,11 +8,7 @@
list-item]]
[syng-im.components.resources :as res]
[syng-im.components.contact-list.contact :refer [contact-view]]
[syng-im.utils.logging :as log]
;; [messenger.comm.intercom :as intercom]
;; [messenger.components.contact-list.contact :refer [contact]]
;; [messenger.components.iname :as in]
))
[syng-im.utils.logging :as log]))
(defn render-row [navigator row section-id row-id]
(list-item [contact-view {:navigator navigator

View File

@ -2,7 +2,7 @@
(def ethereum-rpc-url "http://localhost:8545")
;; (def server-address "http://rpc0.syng.im:20000/")
(def server-address "http://10.0.3.2:3000/")
(def server-address "http://rpc0.syng.im:20000/")
;; (def server-address "http://10.0.3.2:3000/")
(def text-content-type "text/plain")

View File

@ -7,8 +7,9 @@
;; initial state of app-db
(def app-db {:greeting "Hello Clojure in iOS and Android!"
:identity-password "replace-me-with-user-entered-password"
:contacts []
:chat {:current-chat-id "0x0479a5ed1f38cadfad1db6cd56c4b659b0ebe052bbe9efa950f6660058519fa4ca6be2dda66afa80de96ab00eb97a2605d5267a1e8f4c2a166ab551f6826608cdd"}
:contacts []
:chat {:current-chat-id "0x0479a5ed1f38cadfad1db6cd56c4b659b0ebe052bbe9efa950f6660058519fa4ca6be2dda66afa80de96ab00eb97a2605d5267a1e8f4c2a166ab551f6826608cdd"
:suggestions []}
:chats {}
:chats-updated-signal 0})
@ -16,6 +17,7 @@
(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 updated-chats-signal-path [:chats-updated-signal])
(defn updated-chat-signal-path [chat-id]
[:chats chat-id :chat-updated-signal])

View File

@ -14,6 +14,7 @@
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.models.chats :refer [create-chat]]
[syng-im.models.chat :refer [signal-chat-updated
@ -143,3 +144,9 @@
(log/debug action "chat-id" chat-id)
(nav-push navigator {:view-id :chat})
(set-current-chat-id db chat-id)))
;; -- Chat --------------------------------------------------------------
(register-handler :generate-suggestions
(fn [db [_ text]]
(suggestions-service/generate-suggestions db text)))

View File

@ -0,0 +1,17 @@
(ns syng-im.handlers.suggestions
(:require [re-frame.core :refer [subscribe dispatch dispatch-sync]]
[syng-im.db :as db]
[syng-im.utils.utils :refer [log on-error http-post]]
[syng-im.utils.logging :as log]))
(def commands [{:text "!phone"}
{:text "!send"}
{:text "!request"}
{:text "!help"}])
(defn get-suggestions [text]
(when (= (get text 0) "!")
(filterv #(.startsWith (:text %) text) commands)))
(defn generate-suggestions [db text]
(assoc-in db db/input-suggestions-path (get-suggestions text)))

View File

@ -1,6 +1,7 @@
(ns syng-im.subs
(:require-macros [reagent.ratom :refer [reaction]])
(:require [re-frame.core :refer [register-sub]]
[syng-im.db :as db]
[syng-im.models.chat :refer [current-chat-id
chat-updated?]]
[syng-im.models.chats :refer [chats-list
@ -24,6 +25,10 @@
(-> (current-chat-id @db)
(reaction))))
(register-sub :get-suggestions
(fn [db _]
(reaction (get-in @db db/input-suggestions-path))))
;; -- Chats list --------------------------------------------------------------
(register-sub :get-chats