diff options
Diffstat (limited to 'ui/routes/(app)')
| -rw-r--r-- | ui/routes/(app)/+layout.svelte | 24 | ||||
| -rw-r--r-- | ui/routes/(app)/ch/[channel]/+page.svelte | 15 |
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) { |
