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:
parent
d24f8e0e83
commit
7b954ee9c7
|
|
@ -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" :
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
() =>
|
||||
|
|
|
|||
|
|
@ -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 = ({
|
||||
|
|
|
|||
Loading…
Reference in New Issue