Contacts' letters
This commit is contained in:
parent
5c3009ca03
commit
9855d35d37
|
@ -36,7 +36,7 @@
|
||||||
:handler (fn [])}}])
|
:handler (fn [])}}])
|
||||||
|
|
||||||
(defview contact-list []
|
(defview contact-list []
|
||||||
[contacts [:get-contacts]]
|
[contacts [:contacts-with-letters]]
|
||||||
[drawer-view
|
[drawer-view
|
||||||
[view st/contacts-list-container
|
[view st/contacts-list-container
|
||||||
[contact-list-toolbar]
|
[contact-list-toolbar]
|
||||||
|
|
|
@ -2,12 +2,11 @@
|
||||||
(:require [status-im.components.styles :refer [font
|
(:require [status-im.components.styles :refer [font
|
||||||
title-font
|
title-font
|
||||||
text1-color
|
text1-color
|
||||||
|
text3-color
|
||||||
color-white
|
color-white
|
||||||
toolbar-background2
|
toolbar-background2
|
||||||
online-color]]))
|
online-color]]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(def contacts-list-container
|
(def contacts-list-container
|
||||||
{:flex 1
|
{:flex 1
|
||||||
:backgroundColor :white})
|
:backgroundColor :white})
|
||||||
|
@ -15,38 +14,26 @@
|
||||||
(def contacts-list
|
(def contacts-list
|
||||||
{:backgroundColor :white})
|
{:backgroundColor :white})
|
||||||
|
|
||||||
|
(def letter-container
|
||||||
|
{:paddingTop 11
|
||||||
|
:paddingLeft 20
|
||||||
|
:width 56})
|
||||||
|
|
||||||
|
(def letter-text
|
||||||
|
{:fontSize 24
|
||||||
|
:fontFamily font
|
||||||
|
:color text3-color})
|
||||||
|
|
||||||
(def contact-photo-container
|
(def contact-photo-container
|
||||||
{:marginTop 4
|
{:marginTop 4
|
||||||
:marginLeft 12})
|
:marginLeft 12})
|
||||||
|
|
||||||
(def photo-image
|
|
||||||
{:borderRadius 50
|
|
||||||
:width 40
|
|
||||||
:height 40})
|
|
||||||
|
|
||||||
(def online-container
|
|
||||||
{:position :absolute
|
|
||||||
:top 24
|
|
||||||
:left 24
|
|
||||||
:width 20
|
|
||||||
:height 20
|
|
||||||
:borderRadius 50
|
|
||||||
:backgroundColor online-color
|
|
||||||
:borderWidth 2
|
|
||||||
:borderColor color-white})
|
|
||||||
|
|
||||||
(def contact-container
|
(def contact-container
|
||||||
{:flexDirection :row
|
{:flexDirection :row
|
||||||
:height 56})
|
:height 56})
|
||||||
|
|
||||||
(def photo-container
|
|
||||||
{:marginTop 8
|
|
||||||
:marginLeft 16
|
|
||||||
:width 44
|
|
||||||
:height 44})
|
|
||||||
|
|
||||||
(def name-container
|
(def name-container
|
||||||
{:marginLeft 12
|
{:marginLeft 12
|
||||||
:justifyContent :center})
|
:justifyContent :center})
|
||||||
|
|
||||||
(def name-text
|
(def name-text
|
||||||
|
|
|
@ -12,6 +12,23 @@
|
||||||
(let [contacts (reaction (:contacts @db))]
|
(let [contacts (reaction (:contacts @db))]
|
||||||
(reaction (sort-by :name (vals @contacts))))))
|
(reaction (sort-by :name (vals @contacts))))))
|
||||||
|
|
||||||
|
(defn get-contact-letter [contact]
|
||||||
|
(when-let [letter (first (:name contact))]
|
||||||
|
(clojure.string/upper-case letter)))
|
||||||
|
|
||||||
|
(register-sub :contacts-with-letters
|
||||||
|
(fn [db _]
|
||||||
|
(let [contacts (reaction (:contacts @db))]
|
||||||
|
(reaction
|
||||||
|
(let [ordered (sort-by :name (vals @contacts))]
|
||||||
|
(map (fn [prev cur]
|
||||||
|
(let [prev-letter (get-contact-letter prev)
|
||||||
|
cur-letter (get-contact-letter cur)]
|
||||||
|
(if (not= prev-letter cur-letter)
|
||||||
|
(assoc cur :letter cur-letter)
|
||||||
|
cur)))
|
||||||
|
(cons nil ordered) ordered))))))
|
||||||
|
|
||||||
(defn contacts-by-chat [fn db chat-id]
|
(defn contacts-by-chat [fn db chat-id]
|
||||||
(let [chat (reaction (get-in @db [:chats chat-id]))
|
(let [chat (reaction (get-in @db [:chats chat-id]))
|
||||||
contacts (reaction (:contacts @db))]
|
contacts (reaction (:contacts @db))]
|
||||||
|
|
|
@ -5,12 +5,19 @@
|
||||||
[status-im.contacts.styles :as st]
|
[status-im.contacts.styles :as st]
|
||||||
[status-im.i18n :refer [label]]))
|
[status-im.i18n :refer [label]]))
|
||||||
|
|
||||||
|
(defn letter-view [letter]
|
||||||
|
[view st/letter-container
|
||||||
|
(when letter
|
||||||
|
[text {:style st/letter-text}
|
||||||
|
letter])])
|
||||||
|
|
||||||
(defn contact-photo [{:keys [whisper-identity]}]
|
(defn contact-photo [{:keys [whisper-identity]}]
|
||||||
[view st/contact-photo-container
|
[view st/contact-photo-container
|
||||||
[contact-icon-contacts-tab whisper-identity]])
|
[contact-icon-contacts-tab whisper-identity]])
|
||||||
|
|
||||||
(defn contact-inner-view [{:keys [name] :as contact}]
|
(defn contact-inner-view [{:keys [name letter] :as contact}]
|
||||||
[view st/contact-container
|
[view st/contact-container
|
||||||
|
[letter-view letter]
|
||||||
[contact-photo contact]
|
[contact-photo contact]
|
||||||
[view st/name-container
|
[view st/name-container
|
||||||
[text {:style st/name-text}
|
[text {:style st/name-text}
|
||||||
|
|
Loading…
Reference in New Issue