diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-10 21:05:48 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-10 21:05:48 -0400 |
| commit | 4401dce2b5545ce8117818812d8e3c8919f5f7fd (patch) | |
| tree | df04478e6094a2a8cdd14ecd31b77caacff78de6 /ui/src/lib/store/messages.js | |
| parent | 999996961e6e8ebcde125ff0022df875d62817b3 (diff) | |
Remove redundancy in `hi-ui` directory name.
Diffstat (limited to 'ui/src/lib/store/messages.js')
| -rw-r--r-- | ui/src/lib/store/messages.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/ui/src/lib/store/messages.js b/ui/src/lib/store/messages.js new file mode 100644 index 0000000..931b8fb --- /dev/null +++ b/ui/src/lib/store/messages.js @@ -0,0 +1,44 @@ +export class Messages { + constructor() { + this.channels = {}; + } + + inChannel(channel) { + return this.channels[channel] = (this.channels[channel] || []); + } + + addMessage(channel, id, at, sender, body) { + this.updateChannel(channel, (messages) => [...messages, { id, at, sender, body }]); + return this; + } + + setMessages(messages) { + this.channels = {}; + for (let { channel, id, at, sender, body } of messages) { + this.inChannel(channel).push({ id, at, sender, body, }); + } + for (let channel in this.channels) { + this.channels[channel].sort((a, b) => a.at - b.at); + } + return this; + } + + + deleteMessage(message) { + for (let channel in this.channels) { + this.updateChannel(channel, (messages) => messages.filter((msg) => msg.id != message)); + } + return this; + } + + 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; + } +} |
