summaryrefslogtreecommitdiff
path: root/hi-ui/src/store/messages.js
diff options
context:
space:
mode:
Diffstat (limited to 'hi-ui/src/store/messages.js')
-rw-r--r--hi-ui/src/store/messages.js35
1 files changed, 35 insertions, 0 deletions
diff --git a/hi-ui/src/store/messages.js b/hi-ui/src/store/messages.js
new file mode 100644
index 0000000..d1f19d3
--- /dev/null
+++ b/hi-ui/src/store/messages.js
@@ -0,0 +1,35 @@
+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;
+ }
+
+ 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;
+ }
+}