diff --git a/plugins/chunter-resources/src/components/ChannelScrollView.svelte b/plugins/chunter-resources/src/components/ChannelScrollView.svelte index 2bcb5e074c..2bcabe1720 100644 --- a/plugins/chunter-resources/src/components/ChannelScrollView.svelte +++ b/plugins/chunter-resources/src/components/ChannelScrollView.svelte @@ -52,7 +52,7 @@ export let isAsideOpened = false const dateSelectorHeight = 30 - const headerHeight = 50 + const headerHeight = 52 const minMsgHeightRem = 4.375 const client = getClient() @@ -316,10 +316,9 @@ return } - const reversedMessages = [...displayMessages].reverse() const reversedDates = [...get(datesStore)].reverse() - for (const message of reversedMessages) { + for (const message of displayMessages) { const msgElement = messagesElements?.[message._id as any] if (!msgElement) { @@ -332,12 +331,37 @@ continue } - if (messageInView(msgElement, containerRect)) { + const messageRect = msgElement.getBoundingClientRect() + + const isInView = + messageRect.top > 0 && + messageRect.top < containerRect.bottom && + messageRect.bottom - headerHeight - 2 * dateSelectorHeight > 0 && + messageRect.bottom <= containerRect.bottom + + if (isInView) { selectedDate = reversedDates.find((date) => date <= createdOn) break } } + + if (selectedDate) { + const day = getDay(selectedDate) + const dateElement = document.getElementById(day.toString()) + + let isElementVisible = false + + if (dateElement) { + const elementRect = dateElement.getBoundingClientRect() + isElementVisible = + elementRect.top + dateSelectorHeight / 2 >= containerRect.top && elementRect.bottom <= containerRect.bottom + } + + if (isElementVisible) { + selectedDate = undefined + } + } } $: void initializeScroll($isLoadingStore, separatorElement, $newTimestampStore) @@ -379,9 +403,10 @@ shouldWaitAndRead = false onComplete?.() } else if (shouldWaitAndRead && messages.length > 0) { + shouldWaitAndRead = false setTimeout(() => { waitLastMessageRenderAndRead(onComplete) - }, 50) + }, 500) } else { onComplete?.() } @@ -514,8 +539,8 @@ {#if startFromBottom}
{/if} - {#if withDates && displayMessages.length > 0} -
+ {#if withDates && displayMessages.length > 0 && selectedDate} +
{/if} @@ -606,4 +631,11 @@ align-items: center; justify-content: center; } + + .selectedDate { + position: absolute; + top: 0; + left: 0; + right: 0; + } diff --git a/plugins/notification-resources/src/inboxNotificationsClient.ts b/plugins/notification-resources/src/inboxNotificationsClient.ts index 3e93e3221f..b774223b8a 100644 --- a/plugins/notification-resources/src/inboxNotificationsClient.ts +++ b/plugins/notification-resources/src/inboxNotificationsClient.ts @@ -258,9 +258,14 @@ export class InboxNotificationsClientImpl implements InboxNotificationsClient { try { const inboxNotifications = get(this.inboxNotifications) ?? [] + const contexts = get(this.docNotifyContexts) ?? [] for (const notification of inboxNotifications) { await ops.remove(notification) } + + for (const context of contexts) { + await ops.update(context, { lastViewedTimestamp: Date.now() }) + } } finally { await ops.commit() await doneOp() @@ -273,11 +278,15 @@ export class InboxNotificationsClientImpl implements InboxNotificationsClient { try { const inboxNotifications = get(this.inboxNotifications) ?? [] + const contexts = get(this.docNotifyContexts) ?? [] for (const notification of inboxNotifications) { if (!notification.isViewed) { await ops.update(notification, { isViewed: true }) } } + for (const context of contexts) { + await ops.update(context, { lastViewedTimestamp: Date.now() }) + } } finally { await ops.commit() await doneOp() @@ -290,11 +299,16 @@ export class InboxNotificationsClientImpl implements InboxNotificationsClient { try { const inboxNotifications = get(this.inboxNotifications) ?? [] + const contexts = get(this.docNotifyContexts) ?? [] + for (const notification of inboxNotifications) { if (notification.isViewed) { await ops.update(notification, { isViewed: false }) } } + for (const context of contexts) { + await ops.update(context, { lastViewedTimestamp: 0 }) + } } finally { await ops.commit() await doneOp() diff --git a/plugins/telegram-resources/src/components/Chat.svelte b/plugins/telegram-resources/src/components/Chat.svelte index a762422842..8fc1eb61bd 100644 --- a/plugins/telegram-resources/src/components/Chat.svelte +++ b/plugins/telegram-resources/src/components/Chat.svelte @@ -88,7 +88,7 @@ (res) => { messages = res.reverse() if (channel !== undefined) { - inboxClient.forceReadDoc(channel._id, channel._class) + inboxClient.forceReadDoc(client, channel._id, channel._class) } }, { @@ -149,7 +149,7 @@ } ) if (channel !== undefined) { - await inboxClient.forceReadDoc(channel._id, channel._class) + await inboxClient.forceReadDoc(client, channel._id, channel._class) } clear() }