removed from chat & leave chat

Former-commit-id: dd4f55e11f
This commit is contained in:
michaelr 2016-04-11 22:57:20 +03:00
parent 16bf960e3c
commit e28add5118
8 changed files with 65 additions and 33 deletions

BIN
images/leave.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -55,16 +55,22 @@
:style {:backgroundColor "white" :style {:backgroundColor "white"
:height 56 :height 56
:elevation 2} :elevation 2}
:actions [{:title "Add Contact to chat" :actions (when (and (:group-chat @chat)
(:is-active @chat))
[{:title "Add Contact to chat"
:icon res/add-icon :icon res/add-icon
:showWithText true} :showWithText true}
{:title "Remove Contact from chat" {:title "Remove Contact from chat"
:icon res/trash-icon :icon res/trash-icon
:showWithText true}] :showWithText true}
{:title "Leave Chat"
:icon res/leave-icon
:showWithText true}])
:onActionSelected (fn [position] :onActionSelected (fn [position]
(case position (case position
0 (dispatch [:show-add-participants navigator]) 0 (dispatch [:show-add-participants navigator])
1 (dispatch [:show-remove-participants navigator]))) 1 (dispatch [:show-remove-participants navigator])
2 (dispatch [:leave-group-chat navigator])))
:onIconClicked (fn [] :onIconClicked (fn []
(nav-pop navigator))}]) (nav-pop navigator))}])
[list-view {:dataSource datasource [list-view {:dataSource datasource
@ -75,4 +81,5 @@
(add-msg-color contact-by-identity))] (add-msg-color contact-by-identity))]
(r/as-element [chat-message msg]))) (r/as-element [chat-message msg])))
:style {:backgroundColor "white"}}] :style {:backgroundColor "white"}}]
[chat-message-new]])))) (when (:is-active @chat)
[chat-message-new])]))))

View File

@ -20,7 +20,8 @@
[syng-im.models.chats :refer [create-chat [syng-im.models.chats :refer [create-chat
chat-add-participants chat-add-participants
chat-remove-participants]] chat-remove-participants
set-chat-active]]
[syng-im.models.chat :refer [signal-chat-updated [syng-im.models.chat :refer [signal-chat-updated
set-current-chat-id set-current-chat-id
current-chat-id current-chat-id
@ -144,6 +145,13 @@
:content (str (or remover-name from) " removed " (or removed-name identity)) :content (str (or remover-name from) " removed " (or removed-name identity))
:content-type text-content-type}))) :content-type text-content-type})))
(defn you-removed-from-group-msg [chat-id from msg-id]
(let [remover-name (:name (contacts/contact-by-identity from))]
(save-message chat-id {:from "system"
:msg-id msg-id
:content (str (or remover-name from) " removed you from group chat")
:content-type text-content-type})))
(defn removed-participant-msg [chat-id identity] (defn removed-participant-msg [chat-id identity]
(let [contact-name (:name (contacts/contact-by-identity identity))] (let [contact-name (:name (contacts/contact-by-identity identity))]
(save-message chat-id {:from "system" (save-message chat-id {:from "system"
@ -151,6 +159,12 @@
:content (str "You've removed " (or contact-name identity)) :content (str "You've removed " (or contact-name identity))
:content-type text-content-type}))) :content-type text-content-type})))
(defn left-chat-msg [chat-id]
(save-message chat-id {:from "system"
:msg-id (random/id)
:content "You left this chat"
:content-type text-content-type}))
(register-handler :group-chat-invite-acked (register-handler :group-chat-invite-acked
(fn [db [action from group-id ack-msg-id]] (fn [db [action from group-id ack-msg-id]]
(log/debug action from group-id ack-msg-id) (log/debug action from group-id ack-msg-id)
@ -164,6 +178,13 @@
(participant-removed-from-group-msg group-id identity from msg-id) (participant-removed-from-group-msg group-id identity from msg-id)
(signal-chat-updated db group-id))) (signal-chat-updated db group-id)))
(register-handler :you-removed-from-group
(fn [db [action from group-id msg-id]]
(log/debug action msg-id from group-id)
(you-removed-from-group-msg group-id from msg-id)
(set-chat-active group-id false)
(signal-chat-updated db group-id)))
(register-handler :participant-invited-to-group (register-handler :participant-invited-to-group
(fn [db [action from group-id identity msg-id]] (fn [db [action from group-id identity msg-id]]
(log/debug action msg-id from group-id identity) (log/debug action msg-id from group-id identity)
@ -203,6 +224,15 @@
(save-message chat-id msg) (save-message chat-id msg)
(signal-chat-updated db chat-id)))) (signal-chat-updated db chat-id))))
(register-handler :leave-group-chat
(fn [db [action navigator]]
(log/debug action)
(let [chat-id (current-chat-id db)]
(api/leave-group-chat chat-id)
(set-chat-active chat-id false)
(left-chat-msg chat-id)
(signal-chat-updated db chat-id))))
(register-handler :send-chat-command (register-handler :send-chat-command
(fn [db [action chat-id command content]] (fn [db [action chat-id command content]]
(log/debug action "chat-id" chat-id "command" command "content" content) (log/debug action "chat-id" chat-id "command" command "content" content)

View File

@ -47,6 +47,7 @@
:background-color background :background-color background
:text-color text}) identities group-chat-colors)] :text-color text}) identities group-chat-colors)]
(r/create :chats {:chat-id chat-id (r/create :chats {:chat-id chat-id
:is-active true
:name chat-name :name chat-name
:group-chat group-chat? :group-chat group-chat?
:timestamp (timestamp) :timestamp (timestamp)
@ -94,11 +95,18 @@
(defn active-group-chats [] (defn active-group-chats []
(let [results (-> (r/get-all :chats) (let [results (-> (r/get-all :chats)
(r/filtered "group-chat = true"))] (r/filtered "group-chat = true && is-active = true"))]
(->> (.map results (fn [object index collection] (->> (.map results (fn [object index collection]
(aget object "chat-id"))) (aget object "chat-id")))
(js->clj)))) (js->clj))))
(defn set-chat-active [chat-id active?]
(r/write (fn []
(-> (r/get-by-field :chats :chat-id chat-id)
(r/single)
(aset "is-active" active?)))))
(comment (comment
(active-group-chats) (active-group-chats)

View File

@ -43,6 +43,7 @@
:name "string" :name "string"
:group-chat {:type "bool" :group-chat {:type "bool"
:indexed true} :indexed true}
:is-active "bool"
:timestamp "int" :timestamp "int"
:contacts {:type "list" :contacts {:type "list"
:objectType "chat-contact"}}}]}) :objectType "chat-contact"}}}]})
@ -130,22 +131,4 @@
(comment (comment
(write #(.create realm "msgs" (clj->js {:msg-id "12"
:content "sdfd"
:from "sdfsd"
:chat-id "56"
:content-type "fg"
:timestamp 2
:outgoing true
:to "sfs"
:delivery-status "seen"}) true))
(.addListener realm "change" (fn [& args]
(log/debug args)))
;realm.addListener('change', () => {
; // Update UI
; ...
; });
) )

View File

@ -36,8 +36,8 @@
(dispatch [:participant-invited-to-group from group-id identity msg-id])) (dispatch [:participant-invited-to-group from group-id identity msg-id]))
:group-removed-participant (let [{:keys [group-id identity from msg-id]} event] :group-removed-participant (let [{:keys [group-id identity from msg-id]} event]
(dispatch [:participant-removed-from-group from group-id identity msg-id])) (dispatch [:participant-removed-from-group from group-id identity msg-id]))
;:removed-from-group (let [{:keys [group-id from]} event] :removed-from-group (let [{:keys [group-id from msg-id]} event]
; (add-to-chat "group-chat" ":" (str (shorten from) " removed you from group chat"))) (dispatch [:you-removed-from-group from group-id msg-id]))
;:participant-left-group (let [{:keys [group-id from]} event] ;:participant-left-group (let [{:keys [group-id from]} event]
; (add-to-chat "group-chat" ":" (str (shorten from) " left group chat"))) ; (add-to-chat "group-chat" ":" (str (shorten from) " left group chat")))
;(add-to-chat "chat" ":" (str "Don't know how to handle " event-type)) ;(add-to-chat "chat" ":" (str "Don't know how to handle " event-type))

View File

@ -15,3 +15,4 @@
(def v (js/require "./images/v.png")) (def v (js/require "./images/v.png"))
(def add-icon (js/require "./images/add.png")) (def add-icon (js/require "./images/add.png"))
(def trash-icon (js/require "./images/trash.png")) (def trash-icon (js/require "./images/trash.png"))
(def leave-icon (js/require "./images/leave.png"))

View File

@ -60,10 +60,13 @@
(register-sub :get-current-chat (register-sub :get-current-chat
(fn [db _] (fn [db _]
(let [current-chat-id (-> (current-chat-id @db) (let [current-chat-id (-> (current-chat-id @db)
(reaction))
chat-updated (-> (chat-updated? @db @current-chat-id)
(reaction))] (reaction))]
(-> (when-let [chat-id @current-chat-id] (reaction
(chat-by-id chat-id)) (let [_ @chat-updated]
(reaction))))) (when-let [chat-id @current-chat-id]
(chat-by-id chat-id)))))))
;; -- User data -------------------------------------------------------------- ;; -- User data --------------------------------------------------------------