From 0576caae361f2d7e29fbabf505339af9b7ea2f5f Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 15 Aug 2023 17:18:35 -0500 Subject: [PATCH] use greater of indexedAt or machine clock (#1182) * use greater of indexedAt or machine clock * correct mobx usage --- src/state/models/feeds/notifications.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/state/models/feeds/notifications.ts b/src/state/models/feeds/notifications.ts index 4bf23590..50a41137 100644 --- a/src/state/models/feeds/notifications.ts +++ b/src/state/models/feeds/notifications.ts @@ -241,6 +241,12 @@ export class NotificationsFeedModel { loadMoreError = '' hasMore = true loadMoreCursor?: string + + /** + * The last time notifications were seen. Refers to either the + * user's machine clock or the value of the `indexedAt` property on their + * latest notification, whichever was greater at the time of viewing. + */ lastSync?: Date // used to linearize async modifications to state @@ -327,9 +333,6 @@ export class NotificationsFeedModel { limit: PAGE_SIZE, }) await this._replaceAll(res) - runInAction(() => { - this.lastSync = new Date() - }) this._setQueued(undefined) this._countUnread() this._xIdle() @@ -523,9 +526,17 @@ export class NotificationsFeedModel { // = async _replaceAll(res: ListNotifications.Response) { - if (res.data.notifications[0]) { - this.mostRecentNotificationUri = res.data.notifications[0].uri + const latest = res.data.notifications[0] + + if (latest) { + const now = new Date() + const lastIndexed = new Date(latest.indexedAt) + const nowOrLastIndexed = now > lastIndexed ? now : lastIndexed + + this.mostRecentNotificationUri = latest.uri + this.lastSync = nowOrLastIndexed } + return this._appendAll(res, true) }