import { writable } from 'svelte/store'; import { Channels } from '$lib/store/channels.svelte.js'; import { Messages } from '$lib/store/messages.svelte.js'; import { Logins } from '$lib/store/logins'; export const currentUser = writable(null); export const logins = writable(new Logins()); export const channelsList = writable(new Channels()); 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; } }