summaryrefslogtreecommitdiff
path: root/ui/routes
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-05-16 20:33:05 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-05-16 20:33:05 -0400
commit4e8cfb5f37b607382fb80e012133dd372aa4ec36 (patch)
tree47bd3baed1aa18d09b67dbdec846b66cab121c55 /ui/routes
parent96d363fd9290d43d2e6a11e2e5269fb8ccf6d65d (diff)
parenta38a449ab78a4e8ab56705922f5c13f9365a92a4 (diff)
Merge remote-tracking branch 'codeberg/prop/unread-channels'
Diffstat (limited to 'ui/routes')
-rw-r--r--ui/routes/(app)/+layout.svelte24
-rw-r--r--ui/routes/(app)/ch/[channel]/+page.svelte15
2 files changed, 10 insertions, 29 deletions
diff --git a/ui/routes/(app)/+layout.svelte b/ui/routes/(app)/+layout.svelte
index a4ae442..c7e1f22 100644
--- a/ui/routes/(app)/+layout.svelte
+++ b/ui/routes/(app)/+layout.svelte
@@ -22,27 +22,7 @@
let pageContext = getContext('page');
let channel = $derived(page.params.channel);
- let rawChannels = $derived(session.channels);
- let rawChannelsMeta = $derived(session.local.all);
- let rawMessages = $derived(session.messages);
-
- function enrichChannels(channels, channelsMeta, messages) {
- const enrichedChannels = [];
- for (const ch of channels.values()) {
- const channelMessages = messages.filter((message) => message.channel === ch.id);
- const lastMessage = channelMessages.slice(-1)[0];
- const lastMessageAt = lastMessage?.at;
- const lastReadAt = channelsMeta.get(ch.id)?.lastReadAt;
- const hasUnreads = lastReadAt === undefined || lastMessageAt > lastReadAt;
- enrichedChannels.push({
- ...ch,
- hasUnreads
- });
- }
- return enrichedChannels;
- }
-
- const enrichedChannels = $derived(enrichChannels(rawChannels, rawChannelsMeta, rawMessages));
+ let channels = $derived(session.channels);
function setUpGestures() {
if (!browser) {
@@ -134,7 +114,7 @@
<div id="interface">
<nav id="sidebar" data-expanded={pageContext.showMenu}>
- <ChannelList active={channel} channels={enrichedChannels} />
+ <ChannelList active={channel} {channels} />
<div class="create-channel">
<CreateChannelForm {createChannel} />
</div>
diff --git a/ui/routes/(app)/ch/[channel]/+page.svelte b/ui/routes/(app)/ch/[channel]/+page.svelte
index 33a9bdf..76bb638 100644
--- a/ui/routes/(app)/ch/[channel]/+page.svelte
+++ b/ui/routes/(app)/ch/[channel]/+page.svelte
@@ -10,9 +10,10 @@
const { session, outbox } = data;
let activeChannel;
- const channel = $derived(page.params.channel);
- const messages = $derived(session.messages.filter((message) => message.channel === channel));
- const unsent = $derived(outbox.messages.filter((message) => message.channel === channel));
+ const channelId = $derived(page.params.channel);
+ const channel = $derived(session.channels.find((channel) => channel.id === channelId));
+ const messages = $derived(session.messages.filter((message) => message.channel === channelId));
+ const unsent = $derived(outbox.messages.filter((message) => message.channel === channelId));
const deleted = $derived(outbox.deleted.map((message) => message.messageId));
const unsentSkeletons = $derived(
unsent.map((message) => message.toSkeleton($state.snapshot(session.currentUser)))
@@ -45,9 +46,9 @@
function setLastRead() {
const lastInView = getLastVisibleMessage();
- if (lastInView) {
- const at = DateTime.fromISO(lastInView.dataset.at);
- session.local.updateLastReadAt(channel, at);
+ const at = !!lastInView ? DateTime.fromISO(lastInView.dataset.at) : channel?.at;
+ if (!!at) {
+ session.local.updateLastReadAt(channelId, at);
}
}
@@ -76,7 +77,7 @@
}
async function sendMessage(message) {
- outbox.postToChannel(channel, message);
+ outbox.postToChannel(channelId, message);
}
async function deleteMessage(id) {