summaryrefslogtreecommitdiff
path: root/hi-ui
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-09 01:43:34 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-09 11:45:31 -0400
commit2f0b77e8fd02a137047c8975a573626cd76310ff (patch)
tree481d82e99cf8aad8fe256d8186ae72bcee23bf9f /hi-ui
parentba96974bdebd6d4ec345907d49944b5ee644ed47 (diff)
Return a flat message list on boot, not nested lists by channel.
This is a bit easier to compute, and sets us up nicely for pulling message boot out of the `/api/boot` response entirely.
Diffstat (limited to 'hi-ui')
-rw-r--r--hi-ui/src/apiServer.js2
-rw-r--r--hi-ui/src/routes/+page.svelte14
-rw-r--r--hi-ui/src/store/logins.js3
-rw-r--r--hi-ui/src/store/messages.js16
4 files changed, 18 insertions, 17 deletions
diff --git a/hi-ui/src/apiServer.js b/hi-ui/src/apiServer.js
index 4421ef5..3aa3f1b 100644
--- a/hi-ui/src/apiServer.js
+++ b/hi-ui/src/apiServer.js
@@ -92,7 +92,7 @@ function onChannelEvent(data) {
function onMessageEvent(data) {
switch (data.event) {
case 'sent':
- messages.update((value) => value.addMessage(data.channel, data.at, data.sender, data.body));
+ messages.update((value) => value.addMessage(data.channel, data.id, data.at, data.sender, data.body));
break;
case 'deleted':
messages.update((value) => value.deleteMessage(data.id));
diff --git a/hi-ui/src/routes/+page.svelte b/hi-ui/src/routes/+page.svelte
index 39f8b62..dd5f2f7 100644
--- a/hi-ui/src/routes/+page.svelte
+++ b/hi-ui/src/routes/+page.svelte
@@ -18,20 +18,13 @@
});
function onBooted(boot) {
- logins.update((value) => value.addLogins(boot.logins));
currentUser.update(() => ({
id: boot.login.id,
username: boot.login.name,
}));
- let channels = boot.channels.map((channel) => ({
- id: channel.id,
- name: channel.name,
- }));
- channelsList.update((value) => value.setChannels(channels));
- let bootMessages = boot.channels.map((channel) => [channel.id, channel.messages]);
- for (let [channel, channelMessages] of bootMessages) {
- messages.update((value) => value.addMessages(channel, channelMessages));
- }
+ logins.update((value) => value.setLogins(boot.logins));
+ channelsList.update((value) => value.setChannels(boot.channels));
+ messages.update((value) => value.setMessages(boot.messages));
}
onMount(async () => {
@@ -39,6 +32,7 @@
let response = await boot();
switch (response.status) {
case 200:
+ debugger;
onBooted(response.data);
subscribeToEvents(response.data.resume_point);
break;
diff --git a/hi-ui/src/store/logins.js b/hi-ui/src/store/logins.js
index 207b757..5b45206 100644
--- a/hi-ui/src/store/logins.js
+++ b/hi-ui/src/store/logins.js
@@ -8,7 +8,8 @@ export class Logins {
return this;
}
- addLogins(logins) {
+ setLogins(logins) {
+ this.logins = {};
for (let { id, name } of logins) {
this.addLogin(id, name);
}
diff --git a/hi-ui/src/store/messages.js b/hi-ui/src/store/messages.js
index f9e0856..931b8fb 100644
--- a/hi-ui/src/store/messages.js
+++ b/hi-ui/src/store/messages.js
@@ -4,16 +4,22 @@ export class Messages {
}
inChannel(channel) {
- return this.channels[channel] || [];
+ return this.channels[channel] = (this.channels[channel] || []);
}
- addMessage(channel, at, sender, body) {
- this.updateChannel(channel, (messages) => [...messages, { at, sender, body }]);
+ addMessage(channel, id, at, sender, body) {
+ this.updateChannel(channel, (messages) => [...messages, { id, at, sender, body }]);
return this;
}
- addMessages(channel, payloads) {
- this.updateChannel(channel, (messages) => [...messages, ...payloads]);
+ setMessages(messages) {
+ this.channels = {};
+ for (let { channel, id, at, sender, body } of messages) {
+ this.inChannel(channel).push({ id, at, sender, body, });
+ }
+ for (let channel in this.channels) {
+ this.channels[channel].sort((a, b) => a.at - b.at);
+ }
return this;
}