diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-05 20:12:25 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-05 20:23:54 -0400 |
| commit | 8edd5625ad5dde0ef1637d5c89e9901b3ee65d73 (patch) | |
| tree | 2dfa09776511bdae04e116a478a605957d2db2fe /hi-ui/src/store/messages.js | |
| parent | bc514e0ea5f0a553f15ab8275961907877181520 (diff) | |
Provide named operations for stored state.
Diffstat (limited to 'hi-ui/src/store/messages.js')
| -rw-r--r-- | hi-ui/src/store/messages.js | 35 |
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; + } +} |
