Compare commits

...
Author SHA1 Message Date
alwx b8ed31d98c Unviewed replies 2023-01-26 10:32:25 +01:00
11 changed files with 109 additions and 51 deletions
+1
View File
@@ -64,6 +64,7 @@
assoc
:unviewed-messages-count 0
:unviewed-mentions-count 0
:unviewed-replies-count 0
:highlight false))
(rf/defn handle-mark-all-read-successful
+2
View File
@@ -15,6 +15,7 @@
{:keys [chat-id
unviewed-messages-count
unviewed-mentions-count
unviewed-replies-count
last-message]}]
(let [removed-messages-ids (keep
(fn [[message-id {:keys [from]}]]
@@ -29,6 +30,7 @@
assoc
:unviewed-messages-count unviewed-messages-count
:unviewed-mentions-count unviewed-mentions-count
:unviewed-replies-count unviewed-replies-count
:last-message last-message))]
{:db (assoc-in db
[:message-lists chat-id]
+2
View File
@@ -67,6 +67,7 @@
:chatType :chat-type
:unviewedMessagesCount :unviewed-messages-count
:unviewedMentionsCount :unviewed-mentions-count
:unviewedRepliesCount :unviewed-replies-count
:lastMessage :last-message
:lastClockValue :last-clock-value
:invitationAdmin :invitation-admin
@@ -96,6 +97,7 @@
:chat-type (.-chatType chat)
:unviewed-messages-count (.-unviewedMessagesCount chat)
:unviewed-mentions-count (.-unviewedMentionsCount chat)
:unviewed-replies-count (.-unviewedRepliesCount chat)
:last-message {:content {:text (.-text chat)
:parsed-text (types/js->clj (.-parsedText chat))}
:content-type (.-contentType chat)
@@ -200,6 +200,7 @@
message-type (.-messageType message-js)
from (.-from message-js)
mentioned (.-mentioned message-js)
replied (.-replied message-js)
new (.-new message-js)
current (= current-chat-id chat-id)
should-update-unviewed? (and (not current)
@@ -221,6 +222,10 @@
mentioned)
(update-in [:db :chats chat-id :unviewed-mentions-count] inc)
(and should-update-unviewed?
replied)
(update-in [:db :chats chat-id :unviewed-replies-count] inc)
;;conj incoming transaction for :watch-tx
(not (string/blank? tx-hash))
(update :transactions conj tx-hash)
@@ -22,11 +22,14 @@
(defn community-unviewed-count
[id]
(let [{:keys [unviewed-messages-count unviewed-mentions-count]} (rf/sub [:communities/unviewed-counts
id])]
(let [{:keys [unviewed-messages-count
unviewed-mentions-count
unviewed-replies-count]}
(rf/sub [:communities/unviewed-counts id])
unviewed-count (+ unviewed-mentions-count unviewed-replies-count)]
(cond
(pos? unviewed-mentions-count)
[badge/message-counter unviewed-mentions-count]
(pos? unviewed-count)
[badge/message-counter unviewed-count]
(pos? unviewed-messages-count)
[react/view
@@ -127,39 +127,43 @@
(defn unviewed-indicator
[{:keys [unviewed-mentions-count
unviewed-replies-count
unviewed-messages-count
public?]}]
(when (pos? unviewed-messages-count)
[react/view {:position :absolute :right 16}
(cond
(and public? (not (pos? unviewed-mentions-count)))
[react/view
{:style styles/public-unread
:accessibility-label :unviewed-messages-public}]
(let [unviewed-count (+ unviewed-mentions-count unviewed-replies-count)]
(when (pos? unviewed-count)
[react/view {:position :absolute :right 16}
(cond
(and public? (not (pos? unviewed-count)))
[react/view
{:style styles/public-unread
:accessibility-label :unviewed-messages-public}]
(and public? (pos? unviewed-mentions-count))
[badge/message-counter unviewed-mentions-count]
(and public? (pos? unviewed-count))
[badge/message-counter unviewed-count]
:else
[badge/message-counter unviewed-messages-count])]))
:else
[badge/message-counter unviewed-messages-count])])))
(defn unviewed-indicator-old
[{:keys [unviewed-mentions-count
unviewed-messages-count
unviewed-replies-count
public?]}]
(when (pos? unviewed-messages-count)
[react/view {:position :absolute :right 16 :bottom 12}
(cond
(and public? (not (pos? unviewed-mentions-count)))
[react/view
{:style styles/public-unread
:accessibility-label :unviewed-messages-public}]
(let [unviewed-count (+ unviewed-mentions-count unviewed-replies-count)]
(when (pos? unviewed-messages-count)
[react/view {:position :absolute :right 16 :bottom 12}
(cond
(and public? (not (pos? unviewed-count)))
[react/view
{:style styles/public-unread
:accessibility-label :unviewed-messages-public}]
(and public? (pos? unviewed-mentions-count))
[badge/message-counter unviewed-mentions-count]
(and public? (pos? unviewed-count))
[badge/message-counter unviewed-count]
:else
[badge/message-counter unviewed-messages-count])]))
:else
[badge/message-counter unviewed-messages-count])])))
(defn icon-style
[]
+5 -2
View File
@@ -130,6 +130,7 @@
{:last-message nil
:unviewed-messages-count 0
:unviewed-mentions-count 0
:unviewed-replies-count 0
:deleted-at-clock-value last-message-clock-value})
chats))))}))
@@ -236,7 +237,7 @@
(rf/defn decrease-unviewed-count
{:events [:chat/decrease-unviewed-count]}
[{:keys [db]} chat-id {:keys [count countWithMentions]}]
[{:keys [db]} chat-id {:keys [count countWithMentions countWithReplies]}]
{:db (-> db
;; There might be some other requests being fired,
;; so we need to make sure the count has not been set to
@@ -244,7 +245,9 @@
(update-in [:chats chat-id :unviewed-messages-count]
#(max (- % count) 0))
(update-in [:chats chat-id :unviewed-mentions-count]
#(max (- % countWithMentions) 0)))})
#(max (- % countWithMentions) 0))
(update-in [:chats chat-id :unviewed-replies-count]
#(max (- % countWithReplies) 0)))})
;;;; UI
@@ -116,9 +116,17 @@
(defn chat-list-item
[item]
(let [{:keys [chat-id color group-chat last-message timestamp name unviewed-mentions-count
(let [{:keys [chat-id
color
group-chat
last-message
timestamp
name
unviewed-mentions-count
unviewed-replies-count
unviewed-messages-count]}
item
unviewed-count (+ unviewed-mentions-count unviewed-replies-count)
display-name
(if group-chat name (first (rf/sub [:contacts/contact-two-names-by-identity chat-id])))
contact (when-not group-chat (rf/sub [:contacts/contact-by-address chat-id]))
@@ -137,8 +145,8 @@
:style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}}
(get-in last-message [:content :text])]
[render-subheader (get-in last-message [:content :parsed-text])])]
(if (> unviewed-mentions-count 0)
(if (> unviewed-count 0)
[quo/info-count {:style {:top 16}}
unviewed-mentions-count]
unviewed-count]
(when (> unviewed-messages-count 0)
[rn/view {:style (style/count-container)}]))]))
+6 -3
View File
@@ -138,6 +138,7 @@
:muted? (:muted community)
:unread-messages? (pos? (:unviewed-messages-count counts))
:unread-mentions-count (:unviewed-mentions-count counts)
:unread-replies-count (:unviewed-replies-count counts)
:community-icon (:images community)})
(re-frame/reg-sub
@@ -176,11 +177,13 @@
(defn calculate-unviewed-counts
[chats]
(reduce (fn [acc {:keys [unviewed-mentions-count unviewed-messages-count]}]
(reduce (fn [acc {:keys [unviewed-mentions-count unviewed-replies-count unviewed-messages-count]}]
{:unviewed-messages-count (+ (:unviewed-messages-count acc) (or unviewed-messages-count 0))
:unviewed-mentions-count (+ (:unviewed-mentions-count acc) (or unviewed-mentions-count 0))})
:unviewed-mentions-count (+ (:unviewed-mentions-count acc) (or unviewed-mentions-count 0))
:unviewed-replies-count (+ (:unviewed-replies-count acc) (or unviewed-replies-count 0))})
{:unviewed-messages-count 0
:unviewed-mentions-count 0}
:unviewed-mentions-count 0
:unviewed-replies-count 0}
chats))
(re-frame/reg-sub
+7 -2
View File
@@ -62,15 +62,19 @@
:chats
{"0x100" {:community-id community-id
:unviewed-mentions-count 3
:unviewed-replies-count 3
:unviewed-messages-count 2}
"0x101" {:community-id "0x2"
:unviewed-mentions-count 7
:unviewed-replies-count 2
:unviewed-messages-count 9}
"0x102" {:community-id community-id
:unviewed-mentions-count 5
:unviewed-replies-count 7
:unviewed-messages-count 1}})
(is (= {:unviewed-messages-count 3
:unviewed-mentions-count 8}
:unviewed-mentions-count 8
:unviewed-replies-count 10}
(rf/sub [sub-name community-id]))))
(testing "defaults to zero when count keys are not present"
@@ -78,7 +82,8 @@
:chats
{"0x100" {:community-id community-id}})
(is (= {:unviewed-messages-count 0
:unviewed-mentions-count 0}
:unviewed-mentions-count 0
:unviewed-replies-count 0}
(rf/sub [sub-name community-id])))))
(h/deftest-sub :communities/community-ids-by-user-involvement
+37 -15
View File
@@ -15,8 +15,12 @@
(first images)))}))))
(defn get-card-content
[chat communities]
(let [last-message (:last-message chat)]
[{:keys [last-message
unviewed-messages-count
unviewed-mentions-count
unviewed-replies-count]
:as chat} communities]
(let [unviewed-count (+ unviewed-mentions-count unviewed-replies-count)]
(merge
(when last-message
(case (:content-type last-message)
@@ -53,11 +57,11 @@
:community-name (:name community)}})
nil))
{:new-notifications? (pos? (:unviewed-messages-count chat))
:notification-indicator (if (pos? (:unviewed-mentions-count chat))
{:new-notifications? (pos? unviewed-messages-count)
:notification-indicator (if (pos? unviewed-count)
:counter
:unread-dot)
:counter-label (:unviewed-mentions-count chat)})))
:counter-label unviewed-count})))
(defn one-to-one-chat-card
[contact names chat id communities]
@@ -159,29 +163,47 @@
(fn [chats]
(let [{:keys [chats-stack community-stack]}
(reduce
(fn [acc [_ {:keys [unviewed-messages-count unviewed-mentions-count chat-type]}]]
(fn
[acc
[_
{:keys [unviewed-messages-count
unviewed-mentions-count
unviewed-replies-count
chat-type]}]]
(case chat-type
constants/community-chat-type
(-> acc
(update-in [:community-stack :unviewed-messages-count] + unviewed-messages-count)
(update-in [:community-stack :unviewed-mentions-count] + unviewed-mentions-count))
(update-in [:community-stack :unviewed-mentions-count] + unviewed-mentions-count)
(update-in [:community-stack :unviewed-replies-count] + unviewed-replies-count))
(constants/private-group-chat-type constants/one-to-one-chat-type)
(-> acc
(update-in [:chats-stack :unviewed-messages-count] + unviewed-messages-count)
(update-in [:chats-stack :unviewed-mentions-count] + unviewed-mentions-count))
(update-in [:chats-stack :unviewed-mentions-count] + unviewed-mentions-count)
(update-in [:chats-stack :unviewed-replies-count] + unviewed-replies-count))
acc))
{:chats-stack {:unviewed-messages-count 0 :unviewed-mentions-count 0}
:community-stack {:unviewed-messages-count 0 :unviewed-mentions-count 0}}
chats)]
{:chats-stack {:unviewed-messages-count 0
:unviewed-mentions-count 0
:unviewed-replies-count 0}
:community-stack {:unviewed-messages-count 0
:unviewed-mentions-count 0
:unviewed-replies-count 0}}
chats)
community-unviewed-count (+ (:unviewed-mentions-count community-stack)
(:unviewed-replies-count community-stack))
chats-unviewed-count (+ (:unviewed-mentions-count chats-stack)
(:unviewed-replies-count chats-stack))]
{:communities-stack
{:new-notifications? (pos? (:unviewed-messages-count community-stack))
:notification-indicator (if (pos? (:unviewed-mentions-count community-stack))
:notification-indicator (if (pos? community-unviewed-count)
:counter
:unread-dot)
:counter-label (:unviewed-mentions-count community-stack)}
:counter-label community-unviewed-count}
:chats-stack
{:new-notifications? (pos? (:unviewed-messages-count chats-stack))
:notification-indicator (if (pos? (:unviewed-mentions-count chats-stack)) :counter :unread-dot)
:counter-label (:unviewed-mentions-count chats-stack)}})))
:notification-indicator (if (pos? chats-unviewed-count)
:counter
:unread-dot)
:counter-label chats-unviewed-count}})))