diff options
author | Eric Bailey <git@esb.lol> | 2023-08-15 17:18:35 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-15 15:18:35 -0700 |
commit | 0576caae361f2d7e29fbabf505339af9b7ea2f5f (patch) | |
tree | ef20ad5336b81d0da8e145895db52ab9cd1ee4d6 /src/state/models/feeds/notifications.ts | |
parent | 6964382bad7d4d53b7b6f685190c873cda2d100f (diff) | |
download | voidsky-0576caae361f2d7e29fbabf505339af9b7ea2f5f.tar.zst |
use greater of indexedAt or machine clock (#1182)
* use greater of indexedAt or machine clock * correct mobx usage
Diffstat (limited to 'src/state/models/feeds/notifications.ts')
-rw-r--r-- | src/state/models/feeds/notifications.ts | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/state/models/feeds/notifications.ts b/src/state/models/feeds/notifications.ts index 4bf23590b..50a411379 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) } |