import { Logins } from './logins.svelte.js'; import { Channels } from './channels.svelte.js'; import { Messages } from './messages.svelte.js'; export class State { currentUser = $state(); logins = $state(); channels = $state(); messages = $state(); static boot({ currentUser, logins, channels, messages, resumePoint }) { return new State({ currentUser, logins: Logins.boot(logins), channels: Channels.boot(channels), messages: Messages.boot(messages), resumePoint }); } constructor({ currentUser, logins, channels, messages, resumePoint }) { this.currentUser = currentUser; this.logins = logins; this.channels = channels; this.messages = messages; this.resumePoint = resumePoint; } onEvent(event) { switch (event.type) { case 'channel': return this.onChannelEvent(event); case 'login': return this.onLoginEvent(event); case 'message': return this.onMessageEvent(event); } } onChannelEvent(event) { switch (event.event) { case 'created': return this.onChannelCreated(event); case 'deleted': return this.onChannelDeleted(event); } } onChannelCreated(event) { const { id, name } = event; this.channels.add({ id, name }); } onChannelDeleted(event) { const { id } = event; this.channels.remove(id); } onLoginEvent(event) { switch (event.event) { case 'created': return this.onLoginCreated(event); } } onLoginCreated(event) { const { id, name } = event; this.logins.add({ id, name }); } onMessageEvent(event) { switch (event.event) { case 'sent': return this.onMessageSent(event); case 'deleted': return this.onMessageDeleted(event); } } onMessageSent(event) { const { id, at, channel, sender, body } = event; this.messages.add({ id, at, channel, sender, body }); } onMessageDeleted(event) { const { id } = event; this.messages.remove(id); } }