summaryrefslogtreecommitdiff
path: root/ui/lib/store.js
diff options
context:
space:
mode:
authorKit La Touche <kit@transneptune.net>2025-02-21 22:18:56 -0500
committerKit La Touche <kit@transneptune.net>2025-02-21 22:53:49 -0500
commit9d1dbac74866a6175c65a25bbd8a3ccbe8cf87e4 (patch)
treef15b3f0695b948e335774aa4d92a5b064a1c0f10 /ui/lib/store.js
parent743b59b69857da81b214970ec9252bc918ad243d (diff)
parent36cadfe00cacc6a6523f9862d3f7a08a9d0ce611 (diff)
Merge branch 'main' into prop/preserve-state
Diffstat (limited to 'ui/lib/store.js')
-rw-r--r--ui/lib/store.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/ui/lib/store.js b/ui/lib/store.js
index 508320f..afced4c 100644
--- a/ui/lib/store.js
+++ b/ui/lib/store.js
@@ -15,3 +15,64 @@ export const logins = writable(new Logins());
export const channelsMetaList = writable(new ChannelsMeta({ channelsMetaData }));
export const channelsList = writable(new Channels({ channelsMetaList }));
export const messages = writable(new Messages());
+
+export function onEvent(event) {
+ switch (event.type) {
+ case 'login':
+ onLoginEvent(event);
+ break;
+ case 'channel':
+ onChannelEvent(event);
+ break;
+ case 'message':
+ onMessageEvent(event);
+ break;
+ }
+}
+
+onEvent.fromJson = (event) => {
+ const parsed = JSON.parse(event);
+ return onEvent(parsed);
+};
+
+onEvent.fromMessage = (message) => {
+ const data = message.data;
+ return onEvent.fromJson(data);
+};
+
+function onLoginEvent(event) {
+ switch (event.event) {
+ case 'created':
+ logins.update((value) => value.addLogin(event.id, event.name));
+ break;
+ }
+}
+
+function onChannelEvent(event) {
+ switch (event.event) {
+ case 'created':
+ channelsList.update((value) => value.addChannel(event.id, event.name));
+ break;
+ case 'deleted':
+ channelsList.update((value) => value.deleteChannel(event.id));
+ messages.update((value) => value.deleteChannel(event.id));
+ break;
+ }
+}
+
+function onMessageEvent(event) {
+ switch (event.event) {
+ case 'sent':
+ messages.update((value) =>
+ value.addMessage(event.channel, event.id, {
+ at: event.at,
+ sender: event.sender,
+ body: event.body
+ })
+ );
+ break;
+ case 'deleted':
+ messages.update((value) => value.deleteMessage(event.id));
+ break;
+ }
+}