import { writable } from 'svelte/store'; import { browser } from '$app/environment'; import { Channels, ChannelsMeta } from '$lib/store/channels.svelte.js'; import { Messages } from '$lib/store/messages.svelte.js'; import { Logins } from '$lib/store/logins'; import { STORE_KEY_CHANNELS_DATA } from '$lib/constants'; // Get channelsList content from the local storage const channelsMetaData = (browser && JSON.parse(localStorage.getItem(STORE_KEY_CHANNELS_DATA))) || {}; export const currentUser = writable(null); 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; } }