forked from status-im/status-legacy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuser_statuses.cljs
More file actions
50 lines (43 loc) · 1.67 KB
/
user_statuses.cljs
File metadata and controls
50 lines (43 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(ns status-im.data-store.user-statuses
(:require [clojure.string :as string]
[cljs.reader :as reader]
[re-frame.core :as re-frame]
[status-im.data-store.realm.core :as core]))
(defn- in-query [message-ids]
(string/join " or " (map #(str "message-id=\"" % "\"") message-ids)))
(defn- prepare-statuses [statuses]
(reduce (fn [acc {:keys [message-id whisper-identity] :as user-status}]
(assoc-in acc
[message-id whisper-identity]
(-> user-status
(update :status keyword)
(dissoc :status-id))))
{}
statuses))
(defn- get-by-chat-and-messages-ids
[chat-id message-ids]
(-> @core/account-realm
(.objects "user-status")
(.filtered (str "chat-id=\"" chat-id "\""
(when (seq message-ids)
(str " and (" (in-query message-ids) ")"))))
(core/all-clj :user-status)
prepare-statuses))
(re-frame/reg-cofx
:data-store/get-user-statuses
(fn [cofx _]
(assoc cofx :get-stored-user-statuses get-by-chat-and-messages-ids)))
(defn- compute-status-id [{:keys [message-id whisper-identity]}]
(str message-id "-" whisper-identity))
(defn save-status-tx
"Returns tx function for saving message user status"
[user-status]
(fn [realm]
(let [status-id (compute-status-id user-status)]
(core/create realm :user-status (assoc user-status :status-id status-id) true))))
(defn save-statuses-tx
"Returns tx function for saving message user statuses"
[user-statuses]
(fn [realm]
(doseq [user-status user-statuses]
((save-status-tx user-status) realm))))