Skip to content

Commit

Permalink
Add group members to mentionable list and format code
Browse files Browse the repository at this point in the history
  • Loading branch information
Parveshdhull committed Jan 17, 2022
1 parent 04b7357 commit bbbac43
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 90 deletions.
99 changes: 44 additions & 55 deletions src/status_im/chat/models/mentions.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,17 @@
:nickname nickname
:public-key public-key})))

(defn mentionable-commmunity-members [contacts my-public-key community-members]
(defn mentionable-contacts [contacts]
(reduce
(fn [acc [key contact]]
(let [mentionable-contact (add-searchable-phrases-to-contact contact false)]
(if (nil? mentionable-contact)
acc
(assoc acc key mentionable-contact))))
{}
contacts))

(defn mentionable-contacts-from-identites [contacts my-public-key identities]
(reduce (fn [acc identity]
(let [contact (multiaccounts/contact-by-identity
contacts identity)
Expand All @@ -213,58 +223,31 @@
(if (nil? mentionable-contact) acc
(assoc acc identity mentionable-contact))))
{}
(keys (dissoc community-members my-public-key))))

(defn get-mentionable-users
[{{:keys [current-chat-id]
:contacts/keys [contacts] :as db} :db}]
(let [{:keys [chat-type community-id users] :as chat} (get-in db [:chats current-chat-id])
{:keys [name preferred-name public-key]} (:multiaccount db)
chat-specific-suggestions
(cond
(= chat-type constants/private-group-chat-type)
(let [{:keys [public-key]} (:multiaccount db)
all-contacts (:contacts/contacts db)
group-contacts
(contact.db/get-all-contacts-in-group-chat
(disj (:contacts chat) public-key)
nil
all-contacts
nil)]
(reduce
(fn [acc {:keys [alias public-key identicon name]}]
(assoc acc public-key
{:alias alias
:identicon identicon
:public-key public-key
:name name}))
{}
group-contacts))
(= chat-type constants/one-to-one-chat-type)
(assoc users
current-chat-id
(contact.db/public-key->contact contacts current-chat-id))

(= chat-type constants/community-chat-type)
(merge users (mentionable-commmunity-members
contacts public-key
(get-in db [:communities community-id :members])))

:else users)]
(reduce
(fn [acc [key {:keys [alias name identicon]}]]
(let [name (utils/safe-replace name ".stateofus.eth" "")]
(assoc acc key
{:alias alias
:name (or name alias)
:identicon identicon
:public-key key})))
(assoc chat-specific-suggestions
public-key
{:alias name
:name (or preferred-name name)
:public-key public-key})
contacts)))
(remove #(= my-public-key %) identities)))

(defn get-mentionable-users [chat all-contacts current-multiaccount community-members]
(let [{:keys [name preferred-name public-key]} current-multiaccount
{:keys [chat-id users contacts chat-type]} chat
mentionable-contacts (mentionable-contacts all-contacts)
mentionable-users (assoc users public-key {:alias name
:name (or preferred-name name)
:public-key public-key})]
(cond
(= chat-type constants/private-group-chat-type)
(merge mentionable-users
(mentionable-contacts-from-identites all-contacts public-key contacts))

(= chat-type constants/one-to-one-chat-type)
(assoc mentionable-users chat-id (get mentionable-contacts chat-id
(-> chat-id
contact.db/public-key->new-contact
contact.db/enrich-contact)))

(= chat-type constants/community-chat-type)
(merge mentionable-users
(mentionable-contacts-from-identites all-contacts public-key (keys community-members)))

:else (merge mentionable-users mentionable-contacts))))

(def ending-chars "[\\s\\.,;:]")
(def ending-chars-regex (re-pattern ending-chars))
Expand Down Expand Up @@ -376,8 +359,14 @@
(recur new-text users (rest idxs)
(+ diff (- (count text) (count new-text)))))))))))))

(defn check-mentions [cofx text]
(replace-mentions text (get-mentionable-users cofx)))
(defn check-mentions [{:keys [db]} text]
(let [current-chat-id (:current-chat-id db)
chat (get-in db [:chats current-chat-id])
all-contacts (:contacts/contacts db)
current-multiaccount (:multiaccount db)
community-members (get-in db [:communities (:community-id chat) :members])
mentionable-users (get-mentionable-users chat all-contacts current-multiaccount community-members)]
(replace-mentions text mentionable-users)))

(defn get-at-sign-idxs
([text start]
Expand Down
42 changes: 7 additions & 35 deletions src/status_im/subs.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -1418,46 +1418,18 @@
(wallet.db/get-confirmations current-block)
(>= transactions/confirmations-count-threshold))})))

(re-frame/reg-sub
:chats/mentionable-contacts
:<- [:contacts/contacts]
(fn [contacts]
(reduce
(fn [acc [key contact]]
(let [mentionable-contact (mentions/add-searchable-phrases-to-contact
contact false)]
(if (nil? mentionable-contact) acc
(assoc acc key mentionable-contact))))
{}
contacts)))

(re-frame/reg-sub
:chats/mentionable-users
:<- [:chats/current-chat]
:<- [:chats/mentionable-contacts]
:<- [:contacts/blocked-set]
:<- [:multiaccount]
:<- [:contacts/contacts]
(fn [[{:keys [chat-id users contacts community-id chat-type] :as chat}
mentionable-contacts blocked {:keys [public-key]} my-contacts]]
(let [community-members @(re-frame/subscribe [:communities/community-members
community-id])
contacts-with-one-to-one (if (= chat-type constants/one-to-one-chat-type)
(assoc mentionable-contacts chat-id (get mentionable-contacts chat-id (-> chat-id
contact.db/public-key->new-contact
contact.db/enrich-contact)))
mentionable-contacts)
members-left (into #{} (filter #(group-chat/member-removed? chat %) (keys users)))
filtered-contacts (select-keys contacts-with-one-to-one (if (nil? community-id)
(distinct (concat (seq contacts) (keys users) [chat-id]))
(keys community-members)))
mentionable-commmunity-members (mentions/mentionable-commmunity-members
my-contacts public-key community-members)]
(apply dissoc
(-> users
(merge filtered-contacts)
(merge mentionable-commmunity-members))
(conj (concat blocked members-left) public-key)))))
:<- [:multiaccount]
(fn [[{:keys [users community-id] :as chat} blocked all-contacts
{:keys [public-key] :as current-multiaccount}]]
(let [community-members @(re-frame/subscribe [:communities/community-members community-id])
mentionable-users (mentions/get-mentionable-users chat all-contacts current-multiaccount community-members)
members-left (into #{} (filter #(group-chat/member-removed? chat %) (keys users)))]
(apply dissoc mentionable-users (conj (concat blocked members-left) public-key)))))

(re-frame/reg-sub
:chat/mention-suggestions
Expand Down

0 comments on commit bbbac43

Please sign in to comment.