fix: back to previous entry list will refresh data

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2024-12-09 12:57:15 +08:00
parent ab85406d4f
commit 84a188a8e1
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
3 changed files with 21 additions and 10 deletions

View File

@ -20,6 +20,7 @@ export const useFeedUnreadIsDirty = (feedId: string) => {
() =>
selectAtom(feedUnreadDirtySetAtom, (set) => {
const isRealFeedId = isBizId(feedId)
if (isRealFeedId) return set.has(feedId)
if (feedId.startsWith(ROUTE_FEED_IN_LIST) || feedId.startsWith(INBOX_PREFIX_ID)) {
@ -67,3 +68,7 @@ export const clearFeedUnreadDirty = (feedId: string) => {
return newSet
})
}
export const clearAllFeedUnreadDirty = () => {
jotaiStore.set(feedUnreadDirtySetAtom, new Set())
}

View File

@ -159,17 +159,20 @@ export const useEntries = ({
initialPageParam: undefined,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
refetchOnMount: fetchUnread && feedUnreadDirty ? "always" : false,
// DON'T refetch when the router is pop to previous page
refetchOnMount: fetchUnread && feedUnreadDirty && !history.isPop ? "always" : false,
staleTime:
// Force refetch unread entries when feed is dirty
// HACK: disable refetch when the router is pop to previous page
fetchUnread && feedUnreadDirty && !history.isPop
? 0
: // Keep reduce data fetch logic
reduceRefetch
? maxStaleTime
: defaultStaleTime,
history.isPop
? Infinity
: fetchUnread && feedUnreadDirty
? 0
: // Keep reduce data fetch logic
reduceRefetch
? maxStaleTime
: defaultStaleTime,
},
)
}

View File

@ -11,7 +11,7 @@ import { omitObjectUndefinedValue } from "@follow/utils/utils"
import { isNil, merge, omit } from "es-toolkit/compat"
import { produce } from "immer"
import { clearFeedUnreadDirty, setFeedUnreadDirty } from "~/atoms/feed"
import { clearAllFeedUnreadDirty, clearFeedUnreadDirty, setFeedUnreadDirty } from "~/atoms/feed"
import { runTransactionInScope } from "~/database"
import { apiClient } from "~/lib/api-fetch"
import { getEntriesParams } from "~/lib/utils"
@ -147,7 +147,7 @@ class EntryActions {
})
if (data.data) {
this.upsertMany(data.data, { isArchived })
this.upsertMany(structuredClone(data.data), { isArchived })
}
return data
}
@ -170,6 +170,9 @@ class EntryActions {
// Mark feed unread dirty, so re-fetch the unread data when view feed unread entires in the next time
if (read === false) {
if (typeof params.view === "number" && !params.feedId) {
clearAllFeedUnreadDirty()
}
if (params.feedId) {
clearFeedUnreadDirty(params.feedId as string)
}
@ -180,7 +183,7 @@ class EntryActions {
}
}
if (data.data) {
this.upsertMany(data.data, { isArchived })
this.upsertMany(structuredClone(data.data), { isArchived })
}
return data
}