diff options
Diffstat (limited to 'src/state/queries/notifications/feed.ts')
-rw-r--r-- | src/state/queries/notifications/feed.ts | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts index 0fd9a2fef..16025f856 100644 --- a/src/state/queries/notifications/feed.ts +++ b/src/state/queries/notifications/feed.ts @@ -29,6 +29,7 @@ import {useUnreadNotificationsApi} from './unread' import {fetchPage} from './util' import {FeedPage} from './types' import {useMutedThreads} from '#/state/muted-threads' +import {STALE} from '..' export type {NotificationType, FeedNotification, FeedPage} from './types' @@ -54,23 +55,30 @@ export function useNotificationFeedQuery(opts?: {enabled?: boolean}) { QueryKey, RQPageParam >({ + staleTime: STALE.INFINITY, queryKey: RQKEY(), async queryFn({pageParam}: {pageParam: RQPageParam}) { - // for the first page, we check the cached page held by the unread-checker first + let page if (!pageParam) { - const cachedPage = unreads.getCachedUnreadPage() - if (cachedPage) { - return cachedPage - } + // for the first page, we check the cached page held by the unread-checker first + page = unreads.getCachedUnreadPage() + } + if (!page) { + page = await fetchPage({ + limit: PAGE_SIZE, + cursor: pageParam, + queryClient, + moderationOpts, + threadMutes, + }) } - // do a normal fetch - return fetchPage({ - limit: PAGE_SIZE, - cursor: pageParam, - queryClient, - moderationOpts, - threadMutes, - }) + + // if the first page has an unread, mark all read + if (!pageParam && page.items[0] && !page.items[0].notification.isRead) { + unreads.markAllRead() + } + + return page }, initialPageParam: undefined, getNextPageParam: lastPage => lastPage.cursor, |