Show contact profile from chat menu. Fix chat creation.

This commit is contained in:
virvar 2016-05-06 17:12:24 +03:00
parent 9ec8f70cfe
commit e4e9bcfc1a
10 changed files with 136 additions and 110 deletions

View File

@ -57,14 +57,7 @@
:new-group (r/as-element [new-group {:navigator nav}])
:contact-list (r/as-element [contact-list {:navigator nav}])
:chat (r/as-element [chat {:navigator nav}])
;; TODO pass profile
:profile (r/as-element [profile {:navigator nav}
{:name "Status"
:status (str "The brash businessmans braggadocio "
"and public exchange with candidates "
"in the US presidential election")
:phone-number "+1 548 093 98 66"
:email "christonphe_t@gmail.com"}])))
:profile (r/as-element [profile {:navigator nav}])))
(r/as-element [chat {:navigator nav}]))))}]))))
(defn init []

View File

@ -128,8 +128,7 @@
subtitle])]]])
(defn actions-list-view [navigator chat]
(when-let [actions (when (and (:group-chat chat)
(:is-active chat))
(when-let [actions (if (:group-chat chat)
[{:title "Add Contact to chat"
:icon "icon_menu_group"
:icon-style {:width 25
@ -151,7 +150,12 @@
:icon "icon_settings"
:icon-style {:width 20
:height 13}
:handler (fn [] )}])]
:handler (fn [] )}]
[{:title "Profile"
:icon "icon_menu_group"
:icon-style {:width 25
:height 19}
:handler #(dispatch [:show-profile navigator (:chat-id chat)])}])]
[view {:style {:backgroundColor toolbar-background1
:elevation 2
:position "absolute"

View File

@ -1,11 +1,11 @@
(ns syng-im.components.contact-list.contact
(:require [syng-im.components.react :refer [view text image touchable-highlight]]
(:require [re-frame.core :refer [subscribe dispatch dispatch-sync]]
[syng-im.components.react :refer [view text image touchable-highlight]]
[syng-im.resources :as res]
[syng-im.navigation :as nav]
[syng-im.components.contact-list.contact-inner :refer [contact-inner-view]]))
(defn show-chat [navigator whisper-identity]
(nav/nav-push navigator {:view-id :chat}))
(dispatch [:show-chat whisper-identity navigator :push]))
(defn contact-view [{:keys [navigator contact]}]
(let [{:keys [whisper-identity]} contact]

View File

@ -43,7 +43,7 @@
(fn []
(let [contacts-ds (get-data-source @contacts)]
[view {:style {:flex 1
:backgroundColor "white"}}
:backgroundColor color-white}}
[contact-list-toolbar navigator]
(when contacts-ds
[list-view {:dataSource contacts-ds

View File

@ -73,9 +73,16 @@
:handler (fn []
(dispatch [:show-profile navigator]))}]
[menu-item {:name "Settings"
:handler (fn [])}]
:handler (fn []
;; TODO not implemented
)}]
[menu-item {:name "Contacts"
:handler (fn []
(dispatch [:show-contacts navigator]))}]
[menu-item {:name "Invite friends"
:handler (fn [])}]
:handler (fn []
;; TODO not implemented
)}]
[menu-item {:name "FAQ"
:handler (fn [])}]]
[view {:style {:paddingVertical 36

View File

@ -77,89 +77,91 @@
:color text1-color}}
value]]])
(defn profile [{:keys [navigator]} {:keys [name status phone-number email]}]
[scroll-view {:style {:flex 1
:backgroundColor color-white
:flexDirection :column}}
[touchable-highlight {:style {:position :absolute}
:on-press (fn []
(nav-pop navigator))
:underlay-color :transparent}
[view {:width 56
:height 56}
[image {:source {:uri "icon_back"}
:style {:marginTop 21
:marginLeft 23
:width 8
:height 14}}]]]
[view {:style {:alignSelf :center
:alignItems :center
:width 249}}
[view {:marginTop 26}
[user-photo {}]
[user-online {:online true}]]
[text {:style {:marginTop 20
:fontSize 18
:fontFamily font
:color text1-color}}
name]
[text {:style {:marginTop 10
:fontFamily font
:fontSize 14
:lineHeight 20
:textAlign :center
:color text2-color}}
status]
[view {:style {:marginTop 18
:flexDirection :row}}
[touchable-highlight {:onPress (fn []
;; TODO not implemented
)
:underlay-color :transparent}
[view {:style {:height 40
:justifyContent :center
:backgroundColor color-blue
:paddingLeft 25
:paddingRight 25
:borderRadius 50}}
[text {:style {:marginTop -2.5
:fontSize 14
:fontFamily font
:color color-white}}
"Message"]]]
[touchable-highlight {:onPress (fn []
;; TODO not implemented
)
:underlay-color :transparent}
[view {:style {:marginLeft 10
:width 40
:height 40
:alignItems :center
:justifyContent :center
:backgroundColor color-blue-transparent
:padding 8
:borderRadius 50}}
[image {:source {:uri "icon_more_vertical_blue"}
:style {:width 4
:height 16}}]]]]]
[view {:style {:marginTop 20
:alignItems :stretch
:flexDirection :column}}
[profile-property-view {:name "Username"
:value name}]
[profile-property-view {:name "Phone number"
:value phone-number}]
[profile-property-view {:name "Email"
:value email}]
[view {:style {:marginTop 50
:marginBottom 43
:alignItems :center}}
[touchable-opacity {}
[text {:style {:fontSize 14
:fontFamily font
:lineHeight 21
:color text2-color
;; IOS:
:letterSpacing 0.5}}
"REPORT USER"]]]]])
(defn profile [{:keys [navigator]}]
(let [contact (subscribe [:contact])]
(fn [{:keys [navigator]}]
[scroll-view {:style {:flex 1
:backgroundColor color-white
:flexDirection :column}}
[touchable-highlight {:style {:position :absolute}
:on-press (fn []
(nav-pop navigator))
:underlay-color :transparent}
[view {:width 56
:height 56}
[image {:source {:uri "icon_back"}
:style {:marginTop 21
:marginLeft 23
:width 8
:height 14}}]]]
[view {:style {:alignSelf :center
:alignItems :center
:width 249}}
[view {:marginTop 26}
[user-photo {}]
[user-online {:online true}]]
[text {:style {:marginTop 20
:fontSize 18
:fontFamily font
:color text1-color}}
(:name @contact)]
[text {:style {:marginTop 10
:fontFamily font
:fontSize 14
:lineHeight 20
:textAlign :center
:color text2-color}}
"!not implemented"]
[view {:style {:marginTop 18
:flexDirection :row}}
[touchable-highlight {:onPress (fn []
;; TODO not implemented
)
:underlay-color :transparent}
[view {:style {:height 40
:justifyContent :center
:backgroundColor color-blue
:paddingLeft 25
:paddingRight 25
:borderRadius 50}}
[text {:style {:marginTop -2.5
:fontSize 14
:fontFamily font
:color color-white}}
"Message"]]]
[touchable-highlight {:onPress (fn []
;; TODO not implemented
)
:underlay-color :transparent}
[view {:style {:marginLeft 10
:width 40
:height 40
:alignItems :center
:justifyContent :center
:backgroundColor color-blue-transparent
:padding 8
:borderRadius 50}}
[image {:source {:uri "icon_more_vertical_blue"}
:style {:width 4
:height 16}}]]]]]
[view {:style {:marginTop 20
:alignItems :stretch
:flexDirection :column}}
[profile-property-view {:name "Username"
:value (:name @contact)}]
[profile-property-view {:name "Phone number"
:value (:phone-number @contact)}]
[profile-property-view {:name "Email"
:value "!not implemented"}]
[view {:style {:marginTop 50
:marginBottom 43
:alignItems :center}}
[touchable-opacity {}
[text {:style {:fontSize 14
:fontFamily font
:lineHeight 21
:color text2-color
;; IOS:
:letterSpacing 0.5}}
"REPORT USER"]]]]])))

View File

@ -21,6 +21,7 @@
(def protocol-initialized-path [:protocol-initialized])
(def identity-password-path [:identity-password])
(def contact-identity-path [:contact-identity])
(def current-chat-id-path [:chat :current-chat-id])
(def updated-chats-signal-path [:chats-updated-signal])
(defn updated-chat-signal-path [chat-id]

View File

@ -382,18 +382,21 @@
(fn [db [_ value]]
(contacts/load-syng-contacts db)))
;; -- Chats --------------------------------------------------------------
(register-handler :show-profile
(fn [db [action navigator]]
(fn [db [action navigator identity]]
(log/debug action)
(nav-push navigator {:view-id :profile})
db))
(let [db (contacts/set-contact-identity db identity)]
(dispatch [:navigate-to navigator {:view-id :profile} :push])
db)))
;; -- Chats --------------------------------------------------------------
(register-handler :show-chat
(fn [db [action chat-id navigator nav-type]]
(log/debug action "chat-id" chat-id)
(let [db (set-current-chat-id db chat-id)]
(let [db (-> db
(create-chat chat-id [chat-id] false)
(set-current-chat-id chat-id))]
(dispatch [:navigate-to navigator {:view-id :chat} nav-type])
db)))

View File

@ -1,6 +1,7 @@
(ns syng-im.models.contacts
(:require [cljs.core.async :as async :refer [chan put! <! >!]]
[re-frame.core :refer [subscribe dispatch dispatch-sync]]
[syng-im.db :as db]
[syng-im.utils.utils :refer [log toast]]
[syng-im.persistence.realm :as realm]
[syng-im.persistence.realm :as r]
@ -108,6 +109,14 @@
(defn contact-by-identity [identity]
(r/single-cljs (r/get-by-field :contacts :whisper-identity identity)))
;;;;;;;;;;;;;;;;;;;;----------------------------------------------
(defn set-contact-identity [db contact-id]
(assoc-in db db/contact-identity-path contact-id))
(defn contact-identity [db]
(get-in db db/contact-identity-path))
(comment
(r/write #(create-contact {:phone-number "0543072333"

View File

@ -10,7 +10,9 @@
[syng-im.models.messages :refer [get-messages]]
[syng-im.models.contacts :refer [contacts-list
contacts-list-exclude
contacts-list-include]]
contacts-list-include
contact-identity
contact-by-identity]]
[syng-im.models.commands :refer [get-commands
get-chat-command
get-chat-command-content
@ -125,6 +127,11 @@
(reaction
(contacts-list))))
(register-sub :contact
(fn [db _]
(let [identity (reaction (get-in @db db/contact-identity-path))]
(reaction (contact-by-identity @identity)))))
(register-sub :all-new-contacts
(fn [db _]
(let [current-chat-id (reaction (current-chat-id @db))