summaryrefslogtreecommitdiff
path: root/hi-ui/src/lib/store/messages.js
diff options
context:
space:
mode:
authorKit La Touche <kit@transneptune.net>2024-10-09 15:32:52 -0400
committerKit La Touche <kit@transneptune.net>2024-10-09 15:32:52 -0400
commitbd53a51af835478d23bef4772ce7e50553dc3fdf (patch)
tree3f190a47b9f704c412d0ff684b959abf003b8e5b /hi-ui/src/lib/store/messages.js
parentdd62b823e01934a0f841256fdb17b551091896bf (diff)
Move a lot of things around
Diffstat (limited to 'hi-ui/src/lib/store/messages.js')
-rw-r--r--hi-ui/src/lib/store/messages.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/hi-ui/src/lib/store/messages.js b/hi-ui/src/lib/store/messages.js
new file mode 100644
index 0000000..560b9e1
--- /dev/null
+++ b/hi-ui/src/lib/store/messages.js
@@ -0,0 +1,41 @@
+export class Messages {
+ constructor() {
+ this.channels = {};
+ }
+
+ inChannel(channel) {
+ return this.channels[channel] || [];
+ }
+
+ addMessage(message) {
+ let {
+ channel,
+ ...payload
+ } = message;
+ let channel_id = channel.id;
+ this.updateChannel(channel_id, (messages) => [...messages, payload]);
+ return this;
+ }
+
+ addMessages(channel, payloads) {
+ this.updateChannel(channel, (messages) => [...messages, ...payloads]);
+ return this;
+ }
+
+
+ deleteMessage(channel, message) {
+ let messages = this.messages(channel).filter((msg) => msg.message.id != message);
+ this.channels[channel] = messages;
+ }
+
+ deleteChannel(id) {
+ delete this.channels[id];
+ return this;
+ }
+
+ updateChannel(channel, callback) {
+ let messages = callback(this.inChannel(channel));
+ messages.sort((a, b) => a.at - b.at);
+ this.channels[channel] = messages;
+ }
+}