fix: entry check new api (#147)

* fix: entry check new api

Signed-off-by: Innei <i@innei.in>

* fix: type

Signed-off-by: Innei <i@innei.in>

---------

Signed-off-by: Innei <i@innei.in>
This commit is contained in:
Innei 2024-07-23 13:31:28 +08:00 committed by GitHub
parent d24f8e0e83
commit 7b954ee9c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 54 additions and 26 deletions

View File

@ -33,7 +33,7 @@ export const NetworkStatusIndicator = () => {
<span className="shrink-0 text-xs font-semibold opacity-50">
{networkStatus === NetworkStatus.OFFLINE ?
canUseLocalData ?
"Local Mode" :
"Local Mode (alpha)" :
"Offline" :
apiStatus === NetworkStatus.OFFLINE ?
"API Error" :

View File

@ -58,11 +58,7 @@ export const useEntryMarkReadHandler = (entriesIds: string[]) => {
scrollMarkUnread,
])
}
export const useEntriesByView = ({
onReset,
}: {
onReset?: () => void
}) => {
export const useEntriesByView = ({ onReset }: { onReset?: () => void }) => {
const routeParams = useRouteParms()
const unreadOnly = useGeneralSettingKey("unreadOnly")
@ -77,28 +73,28 @@ export const useEntriesByView = ({
}
const query = useEntries(entriesOptions)
const [firstPublishedAt, setFirstPublishedAt] = useState<string>()
const [hasUpdate, setHasUpdate] = useState(false)
const firstEntry = useAuthQuery(entries.entries({
...entriesOptions,
limit: 1,
}), {
refetchInterval: 1000 * 6,
enabled: !hasUpdate && !!firstPublishedAt,
})
const lastPublishedAt =
query.data?.pages?.[0]?.data?.[0]?.entries.publishedAt
const [pauseQuery, setPauseQuery] = useState(false)
const hasNewQuery = useAuthQuery(
entries.checkNew({
...entriesOptions,
lastPublishedAt: lastPublishedAt!,
}),
{
refetchInterval: 1000 * 6,
enabled: !!lastPublishedAt && !pauseQuery,
},
)
const hasUpdate = useMemo(
() => !!(lastPublishedAt && hasNewQuery?.data?.data.has_new),
[hasNewQuery?.data?.data.has_new, lastPublishedAt],
)
useEffect(() => {
if (query.data?.pages?.[0]?.data?.[0]) {
setFirstPublishedAt(query.data.pages[0].data[0].entries.publishedAt)
setHasUpdate(false)
}
}, [query.data?.pages?.[0]?.data?.[0]])
useEffect(() => {
if (!hasUpdate && firstPublishedAt && firstEntry.data?.data?.[0] && new Date(firstPublishedAt) < new Date(firstEntry.data.data[0].entries.publishedAt)) {
setHasUpdate(true)
}
}, [firstEntry.data?.data?.[0]])
setPauseQuery(hasUpdate)
}, [hasUpdate])
const remoteEntryIds = useMemo(
() =>

View File

@ -1,6 +1,7 @@
import { useAuthInfiniteQuery, useAuthQuery } from "@renderer/hooks/common"
import { apiClient } from "@renderer/lib/api-fetch"
import { defineQuery } from "@renderer/lib/defineQuery"
import { getEntriesParams } from "@renderer/lib/utils"
import { entryActions } from "@renderer/store/entry"
export const entries = {
@ -49,6 +50,37 @@ export const entries = {
rootKey: ["entries-preview"],
},
),
checkNew: ({
id,
view,
read,
lastPublishedAt,
}: {
id?: number | string
view?: number
read?: boolean
lastPublishedAt: string
}) =>
defineQuery(
["entry-checkNew", id, view, read, lastPublishedAt],
async () =>
// @ts-expect-error
apiClient.entries["check-new"].$get({
query: {
...getEntriesParams({
id,
view,
}),
read,
publishedAfter: lastPublishedAt,
},
}) as Promise<{ data: { has_new: boolean, lastest_at?: string } }>,
{
rootKey: ["entry-checkNew", id],
},
),
}
export const useEntries = ({