summaryrefslogtreecommitdiff
path: root/ui/routes/(app)/ch
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-02-24 15:05:20 -0500
committerOwen Jacobson <owen@grimoire.ca>2025-02-24 15:05:20 -0500
commit8cdc6a686644fbf9de6e91ae622f47e23bf7bb23 (patch)
tree746d9830fb11522d9435be9aecc428e95fcfdb61 /ui/routes/(app)/ch
parent099471c574f6dceeb45f8bb5dae1699a734cb084 (diff)
parentf2c415dd7eb1cb68e18e96dfd70460f8972ee9df (diff)
Merge branch 'prop/preserve-state'
Diffstat (limited to 'ui/routes/(app)/ch')
-rw-r--r--ui/routes/(app)/ch/[channel]/+page.svelte31
1 files changed, 13 insertions, 18 deletions
diff --git a/ui/routes/(app)/ch/[channel]/+page.svelte b/ui/routes/(app)/ch/[channel]/+page.svelte
index 8de9859..095e66a 100644
--- a/ui/routes/(app)/ch/[channel]/+page.svelte
+++ b/ui/routes/(app)/ch/[channel]/+page.svelte
@@ -3,7 +3,7 @@
import { page } from '$app/state';
import ActiveChannel from '$lib/components/ActiveChannel.svelte';
import MessageInput from '$lib/components/MessageInput.svelte';
- import { channelsList, currentUser, logins, messages } from '$lib/store';
+ import { channelsList, channelsMetaList, currentUser, logins, messages } from '$lib/store';
import * as api from '$lib/apiServer';
let channel = $derived(page.params.channel);
@@ -34,27 +34,22 @@
}
function getLastVisibleMessage() {
- const parentElement = activeChannel;
- const childElements = parentElement.getElementsByClassName('message');
- const lastInView = Array.from(childElements)
- .reverse()
- .find((el) => {
- return inView(parentElement, el);
- });
- return lastInView;
+ if (activeChannel) {
+ const childElements = activeChannel.getElementsByClassName('message');
+ const lastInView = Array.from(childElements)
+ .reverse()
+ .find((el) => {
+ return inView(activeChannel, el);
+ });
+ return lastInView;
+ }
}
function setLastRead() {
- const channelObject = $channelsList.getChannel(channel);
const lastInView = getLastVisibleMessage();
- if (!channelObject || !lastInView) {
- return;
- }
- const at = DateTime.fromISO(lastInView.dataset.at);
- // Do it this way, rather than with Math.max tricks, to avoid assignment
- // when we don't need it, to minimize reactive changes:
- if (at > channelObject.lastReadAt) {
- channelObject.lastReadAt = at;
+ if (lastInView) {
+ const at = DateTime.fromISO(lastInView.dataset.at);
+ $channelsMetaList.updateLastReadAt(channel, at);
}
}