From 01d995c731c296292cd3f1f9a4702eb96a0bf628 Mon Sep 17 00:00:00 2001 From: Kit La Touche Date: Mon, 30 Sep 2024 23:14:36 -0400 Subject: Absorb and display events At least message-type ones, and at least without styling or memory-limit concerns. --- hi-ui/src/apiServer.js | 16 ++++++++++++++++ hi-ui/src/lib/ActiveChannel.svelte | 20 ++++++++++++++++---- hi-ui/src/lib/MessageInput.svelte | 17 +++++++++++++++-- hi-ui/src/routes/+page.svelte | 3 ++- hi-ui/src/store.js | 1 + 5 files changed, 50 insertions(+), 7 deletions(-) (limited to 'hi-ui') diff --git a/hi-ui/src/apiServer.js b/hi-ui/src/apiServer.js index 92f4dcc..7365a36 100644 --- a/hi-ui/src/apiServer.js +++ b/hi-ui/src/apiServer.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import { events } from './store'; export const apiServer = axios.create({ baseURL: '/api/', @@ -27,3 +28,18 @@ export async function listChannels() { export async function createChannel(name) { return apiServer.post('/channels', { name }); } + +export async function postToChannel(channelId, message) { + return apiServer.post(`/channels/${channelId}`, { message }); +} + +export function subscribeToEvents() { + const evtSource = new EventSource("/api/events"); + // TODO: this should process all incoming events and store them. + // TODO: eventually we'll need to handle expiring old info, so as not to use + // infinite browser memory. + evtSource.onmessage = (evt) => { + const data = JSON.parse(evt.data); + events.update((value) => [...value, data]); + } +} diff --git a/hi-ui/src/lib/ActiveChannel.svelte b/hi-ui/src/lib/ActiveChannel.svelte index 42aa53f..680a785 100644 --- a/hi-ui/src/lib/ActiveChannel.svelte +++ b/hi-ui/src/lib/ActiveChannel.svelte @@ -1,15 +1,27 @@
- Active channel: {channelName} + {#each messages as message} +
+
{message.at} @{message.sender.name}: {message.message.body}
+
+ {/each}