diff --git a/src/status_im/group_chats/db.cljs b/src/status_im/group_chats/db.cljs index 7e33b4ce7f..4cc4262c3d 100644 --- a/src/status_im/group_chats/db.cljs +++ b/src/status_im/group_chats/db.cljs @@ -1,6 +1,6 @@ (ns status-im.group-chats.db (:require [status-im.chat.models :as models.chat] - [status-im.utils.gfycat.core :as gfycat])) + [status-im.multiaccounts.core :as multiaccounts])) (defn unwrap-events "Flatten all events, denormalizing from field" @@ -36,15 +36,12 @@ (invited? my-public-key chat) (not (joined? my-public-key chat))) (let [inviter-pk (get-inviter-pk my-public-key chat)] - (get-in contacts [inviter-pk :name] - (gfycat/generate-gfy inviter-pk))))) + (multiaccounts/displayed-name (or (get contacts inviter-pk) {:public-key inviter-pk}))))) (defn get-inviter-name "when the chat is a private group chat in which the user has been invited and didn't accept the invitation yet, return inviter-name" [contacts chat my-public-key] - (when (and (models.chat/group-chat? chat) - (joined? my-public-key chat)) + (when (models.chat/group-chat? chat) (let [inviter-pk (get-inviter-pk my-public-key chat)] - (get-in contacts [inviter-pk :name] - (gfycat/generate-gfy inviter-pk))))) + (multiaccounts/displayed-name (or (get contacts inviter-pk) {:public-key inviter-pk}))))) diff --git a/src/status_im/multiaccounts/core.cljs b/src/status_im/multiaccounts/core.cljs index 0487908c14..9672e5319e 100644 --- a/src/status_im/multiaccounts/core.cljs +++ b/src/status_im/multiaccounts/core.cljs @@ -15,20 +15,13 @@ [status-im.utils.platform :as platform] [status-im.utils.utils :as utils])) -; Whether we should be strict about verifying ens, currently disabled as -; status-go can't be upgrade because of geth 1.9 incompatibility -(def only-verified-ens false) (defn displayed-name "Use preferred name, name or alias in that order" [{:keys [name preferred-name alias public-key ens-verified]}] (let [ens-name (or preferred-name name)] - ;; Preferred name is our own - ;; otherwise we make sure is verified - (if (or preferred-name - (and only-verified-ens - ens-verified - name)) + ;; Preferred name is our own otherwise we make sure it's verified + (if (or preferred-name (and ens-verified name)) (let [username (stateofus/username ens-name)] (str "@" (or username ens-name))) (or alias (gfycat/generate-gfy public-key))))) diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index e5a0a0e82e..2c2a2d7fb5 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -1657,7 +1657,8 @@ :<- [:contacts/contacts] :<- [:multiaccount] (fn [[{:keys [contacts admins]} all-contacts current-multiaccount]] - (contact.db/get-all-contacts-in-group-chat contacts admins all-contacts current-multiaccount))) + (map #(assoc % :name (multiaccounts/displayed-name %)) + (contact.db/get-all-contacts-in-group-chat contacts admins all-contacts current-multiaccount)))) (re-frame/reg-sub :contacts/contacts-by-chat diff --git a/src/status_im/ui/screens/chat/message/message.cljs b/src/status_im/ui/screens/chat/message/message.cljs index 5c267957ed..c3f2ef4cf5 100644 --- a/src/status_im/ui/screens/chat/message/message.cljs +++ b/src/status_im/ui/screens/chat/message/message.cljs @@ -192,7 +192,7 @@ (defview message-author-name [from alias] (letsubs [{:keys [ens-name]} [:contacts/contact-name-by-identity from]] - (chat.utils/format-author alias style/message-author-name ens-name))) + (chat.utils/format-author alias style/message-author-name-container ens-name))) (defn message-body [{:keys [alias diff --git a/src/status_im/ui/screens/chat/styles/message/message.cljs b/src/status_im/ui/screens/chat/styles/message/message.cljs index 5e71c97e5d..5dda21444b 100644 --- a/src/status_im/ui/screens/chat/styles/message/message.cljs +++ b/src/status_im/ui/screens/chat/styles/message/message.cljs @@ -180,6 +180,13 @@ :margin-right 12 :text-align-vertical :center}) +(def message-author-name-container + {:padding-top 6 + :padding-left 12 + :padding-right 16 + :margin-right 12 + :text-align-vertical :center}) + (defn quoted-message-container [outgoing] {:margin-bottom 6 :padding-bottom 6 diff --git a/src/status_im/ui/screens/ens/views.cljs b/src/status_im/ui/screens/ens/views.cljs index 5d4853f753..9cd506c726 100644 --- a/src/status_im/ui/screens/ens/views.cljs +++ b/src/status_im/ui/screens/ens/views.cljs @@ -19,7 +19,10 @@ [status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.screens.chat.message.message :as message] [status-im.ui.screens.profile.components.views :as profile.components] - [status-im.utils.navigation :as navigation]) + [status-im.utils.navigation :as navigation] + [status-im.ui.components.list-item.views :as list-item] + [status-im.ui.screens.chat.photos :as photos] + [status-im.multiaccounts.core :as multiaccounts]) (:require-macros [status-im.utils.views :as views])) (defn- button @@ -582,14 +585,15 @@ [button {:on-press #(re-frame/dispatch [::ens/get-started-pressed]) :label (i18n/label :t/get-started)}]]]) -(defn- name-item [{:keys [name action hide-chevron?]}] +(defn- name-item [{:keys [name action]}] (let [stateofus-username (stateofus/username name) s (or stateofus-username name)] - [list/big-list-item {:text s - :subtext (when stateofus-username stateofus/domain) - :action-fn action - :icon :main-icons/username - :hide-chevron? hide-chevron?}])) + [list-item/list-item + {:title s + :subtitle (when stateofus-username stateofus/domain) + :on-press action + :icon :main-icons/username + :accessories [:chevron]}])) (defn- name-list [names preferred-name] [react/view {:style {:flex 1 :margin-top 16}} @@ -612,13 +616,15 @@ [name-item {:name name :hide-chevron? true :action action}]] [radio/radio (= name preferred-name)]]]))]]]]) -(defn- registered [names {:keys [preferred-name address public-key name]} show?] +(defn- registered [names {:keys [preferred-name public-key name] :as account} show?] [react/view {:style {:flex 1}} [react/scroll-view [react/view {:style {:margin-top 8}} - [list/big-list-item {:text (i18n/label :t/ens-add-username) - :action-fn #(re-frame/dispatch [::ens/add-username-pressed]) - :icon :main-icons/add}]] + [list-item/list-item + {:title (i18n/label :t/ens-add-username) + :theme :action + :on-press #(re-frame/dispatch [::ens/add-username-pressed]) + :icon :main-icons/add}]] [react/view {:style {:margin-top 22 :margin-bottom 8}} [react/text {:style {:color colors/gray :margin-horizontal 16}} (i18n/label :t/ens-your-usernames)] @@ -645,26 +651,27 @@ {:label-kw :ens-show-username :action-fn #(re-frame/dispatch [::ens/switch-show-username]) :value show?}]] - (let [message (merge {:from public-key - :last-in-group? true - :display-username? true - :display-photo? true - :alias name - :content {:text (i18n/label :t/ens-test-message) - :name (when show? preferred-name)} + (let [message (merge {:content {:text (i18n/label :t/ens-test-message)} :content-type "text/plain" - :timestamp-str "9:41 AM"} - (when show? - {:name preferred-name}))] - [message/message-body message - [message/text-message message]])]]) + :timestamp-str "9:41 AM"})] + [react/view + [react/view {:padding-left 60} + (if show? + ^{:key "ens-name"} + [message/message-author-name public-key] + ^{:key "generated"} + [message/message-author-name nil name])] + [react/view {:flex-direction :row} + [react/view {:padding-left 16 :padding-right 8 :padding-top 4} + [photos/photo (multiaccounts/displayed-photo account) {:size 36}]] + [message/text-message message]]])]]) (views/defview main [] - (views/letsubs [{:keys [names multiaccount preferred-name show?]} [:ens.main/screen]] + (views/letsubs [{:keys [names multiaccount show?]} [:ens.main/screen]] [react/keyboard-avoiding-view {:style {:flex 1}} [status-bar/status-bar {:type :main}] [toolbar/simple-toolbar (i18n/label :t/ens-usernames)] (if (seq names) [registered names multiaccount show?] - [welcome])])) + [welcome])])) \ No newline at end of file diff --git a/src/status_im/ui/screens/profile/components/views.cljs b/src/status_im/ui/screens/profile/components/views.cljs index 116f106873..b97c1cba3a 100644 --- a/src/status_im/ui/screens/profile/components/views.cljs +++ b/src/status_im/ui/screens/profile/components/views.cljs @@ -44,6 +44,13 @@ :number-of-lines 1} generated-name])])) +(defn- group-name [name] + [react/view styles/profile-header-name-container + [react/text {:style styles/profile-name-text + :number-of-lines 2 + :ellipsize-mode :tail} + name]]) + (defn- profile-header-display [{:keys [name public-key] :as contact} allow-icon-change? include-remove-action?] [react/view (merge styles/profile-header-display {:padding-horizontal 16}) @@ -85,6 +92,11 @@ :edit? false}]) [names contact]]) +(defn group-header-display [{:keys [chat-name color]}] + [react/view (merge styles/profile-header-display {:padding-horizontal 16}) + [chat-icon.screen/profile-icon-view nil chat-name color nil 64 nil] + [group-name chat-name]]) + (defn profile-header [{:keys [contact allow-icon-change? include-remove-action?]}] [profile-header-display contact allow-icon-change? include-remove-action?]) diff --git a/src/status_im/ui/screens/profile/contact/views.cljs b/src/status_im/ui/screens/profile/contact/views.cljs index 9d83328919..5488fec25a 100644 --- a/src/status_im/ui/screens/profile/contact/views.cljs +++ b/src/status_im/ui/screens/profile/contact/views.cljs @@ -54,9 +54,9 @@ ; :content-height 150} ; contact]) -(defn render-detail [{:keys [name public-key] :as detail}] +(defn render-detail [{:keys [alias public-key] :as detail}] [list-item/list-item - {:title name + {:title alias :subtitle (utils/get-shortened-address public-key) :icon [chat-icon/contact-icon-contacts-tab detail] :accessibility-label :profile-public-key @@ -118,10 +118,12 @@ ;;TO-DO Rework generate-view to use 3 functions from large-toolbar (views/defview profile [] (views/letsubs [list-ref (reagent/atom nil) - contact [:contacts/current-contact]] + {:keys [ens-verified name] :as contact} [:contacts/current-contact]] (when contact (let [header-in-toolbar (header-in-toolbar contact) - header (header contact) + header (header (cond-> contact + (and ens-verified name) + (assoc :usernames [name]))) content [[list/action-list (actions contact) {:container-style styles/action-container diff --git a/src/status_im/ui/screens/profile/group_chat/views.cljs b/src/status_im/ui/screens/profile/group_chat/views.cljs index 7465c5808b..2de0d72db0 100644 --- a/src/status_im/ui/screens/profile/group_chat/views.cljs +++ b/src/status_im/ui/screens/profile/group_chat/views.cljs @@ -14,7 +14,8 @@ [re-frame.core :as re-frame] [status-im.ui.components.common.styles :as common.styles] [status-im.i18n :as i18n] - [status-im.utils.utils :as utils])) + [status-im.utils.utils :as utils] + [status-im.ui.components.list-item.views :as list-item])) (defn group-chat-profile-toolbar [admin?] [toolbar/toolbar {} @@ -33,21 +34,6 @@ :accessibility-label :done-button} (i18n/label :t/done)]]) -(defn actions [allow-adding-members? chat-id] - (concat - (when allow-adding-members? - [{:label (i18n/label :add-members) - :icon :main-icons/add - :action #(re-frame/dispatch [:navigate-to :add-participants-toggle-list])}]) - [{:label (i18n/label :t/clear-history) - :icon :main-icons/close - :action #(re-frame/dispatch [:chat.ui/clear-history-pressed]) - :accessibility-label :clear-history-button} - {:label (i18n/label :t/delete-chat) - :icon :main-icons/arrow-left - :action #(re-frame/dispatch [:group-chats.ui/remove-chat-pressed chat-id]) - :accessibility-label :delete-chat-button}])) - (defn member-actions [chat-id member us-admin?] (concat [{:action #(re-frame/dispatch [(if platform/desktop? :show-profile-desktop :chat.ui/show-profile) (:public-key member)]) @@ -61,7 +47,7 @@ :label (i18n/label :t/make-admin)}]))) (defn render-member [chat-id {:keys [name public-key] :as member} admin? current-user-identity] - [react/view + [react/view {:padding-vertical 10} [contact/contact-view {:contact member :extend-options (member-actions chat-id member admin?) @@ -78,15 +64,13 @@ (defview chat-group-members-view [chat-id admin? current-user-identity] (letsubs [members [:contacts/current-chat-contacts]] (when (seq members) - [react/view - [list/flat-list {:data members - :separator list/default-separator - :key-fn :address - :render-fn #(render-member chat-id % admin? current-user-identity)}]]))) + [list/flat-list {:data members + :key-fn :address + :render-fn #(render-member chat-id % admin? current-user-identity)}]))) (defn members-list [chat-id admin? current-user-identity] [react/view - [profile.components/settings-title (i18n/label :t/members-title)] + [list-item/list-item {:title :t/members-title :type :section-header}] [chat-group-members-view chat-id admin? current-user-identity]]) (defview group-chat-profile [] @@ -102,20 +86,30 @@ (< (count members) constants/max-group-chat-participants))] [react/view profile.components.styles/profile [status-bar/status-bar] - (if editing? - [group-chat-profile-edit-toolbar] - [group-chat-profile-toolbar admin?]) + ;;TODO doesn't work, needs to be fixed + ;(if editing? + ;[group-chat-profile-edit-toolbar] + [group-chat-profile-toolbar false];admin?] [react/scroll-view [react/view profile.components.styles/profile-form - [profile.components/profile-header - {:contact shown-chat - :editing? editing? - :allow-icon-change? false - :on-change-text-event :group-chats.ui/name-changed}] - [list/action-list (actions allow-adding-members? chat-id) - {:container-style styles/action-container - :action-style styles/action - :action-label-style styles/action-label - :action-separator-style styles/action-separator - :icon-opts styles/action-icon-opts}] + [profile.components/group-header-display shown-chat] + [react/view {:height 20}] + (when allow-adding-members? + [list-item/list-item + {:title :t/add-members + :icon :main-icons/add + :theme :action + :on-press #(re-frame/dispatch [:navigate-to :add-participants-toggle-list])}]) + [list-item/list-item + {:title :t/clear-history + :icon :main-icons/close + :theme :action + :on-press #(re-frame/dispatch [:chat.ui/clear-history-pressed]) + :accessibility-label :clear-history-button}] + [list-item/list-item + {:title :t/delete-chat + :icon :main-icons/arrow-left + :theme :action + :on-press #(re-frame/dispatch [:group-chats.ui/remove-chat-pressed chat-id]) + :accessibility-label :delete-chat-button}] [members-list chat-id admin? (first admins) current-pk]]]]))))