mirror of
https://github.com/jeffvli/feishin.git
synced 2026-07-08 03:30:01 +02:00
fix list select all hotkey (#2195)
This commit is contained in:
@@ -6,7 +6,7 @@ import {
|
||||
UseSuspenseQueryOptions,
|
||||
} from '@tanstack/react-query';
|
||||
import throttle from 'lodash/throttle';
|
||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
||||
|
||||
import { queryKeys } from '/@/renderer/api/query-keys';
|
||||
import { useListContext } from '/@/renderer/context/list-context';
|
||||
@@ -86,7 +86,6 @@ export const useItemListInfiniteLoader = ({
|
||||
const queryClient = useQueryClient();
|
||||
const lastFetchedPageRef = useRef<number>(-1);
|
||||
const currentVisibleRangeRef = useRef<null | { startIndex: number; stopIndex: number }>(null);
|
||||
const [isRefetching, setIsRefetching] = useState(false);
|
||||
const refetchPromiseRef = useRef<null | Promise<void>>(null);
|
||||
const previousDataQueryKeyRef = useRef<string>('');
|
||||
const isRefetchingRef = useRef<boolean>(false);
|
||||
@@ -213,7 +212,6 @@ export const useItemListInfiniteLoader = ({
|
||||
const countQueryKey = listCountQuery.queryKey;
|
||||
|
||||
// Set refetching state and create a promise to suspend
|
||||
setIsRefetching(true);
|
||||
const refetchPromise = (async () => {
|
||||
try {
|
||||
// Reset the loaded pages
|
||||
@@ -239,7 +237,6 @@ export const useItemListInfiniteLoader = ({
|
||||
// Fetch the first page after count is refetched
|
||||
await fetchPage(pageToFetch);
|
||||
} finally {
|
||||
setIsRefetching(false);
|
||||
isRefetchingRef.current = false;
|
||||
refetchPromiseRef.current = null;
|
||||
}
|
||||
@@ -248,7 +245,6 @@ export const useItemListInfiniteLoader = ({
|
||||
refetchPromiseRef.current = refetchPromise;
|
||||
|
||||
refetchPromise.catch(() => {
|
||||
setIsRefetching(false);
|
||||
isRefetchingRef.current = false;
|
||||
refetchPromiseRef.current = null;
|
||||
});
|
||||
@@ -266,7 +262,7 @@ export const useItemListInfiniteLoader = ({
|
||||
});
|
||||
|
||||
// Suspend if refetching
|
||||
if (isRefetching && refetchPromiseRef.current) {
|
||||
if (isRefetchingRef.current && refetchPromiseRef.current) {
|
||||
throw refetchPromiseRef.current;
|
||||
}
|
||||
|
||||
@@ -494,10 +490,20 @@ export const useItemListInfiniteLoader = ({
|
||||
.map(([, v]) => v);
|
||||
}, [data]);
|
||||
|
||||
const getLoadedItems = useCallback(() => {
|
||||
const cacheData = queryClient.getQueryData<InfiniteLoaderCacheData>(dataQueryKey);
|
||||
const map = cacheData?.dataMap;
|
||||
if (!map || map.size === 0) return [];
|
||||
return Array.from(map.entries())
|
||||
.sort(([a], [b]) => a - b)
|
||||
.map(([, v]) => v);
|
||||
}, [dataQueryKey, queryClient]);
|
||||
|
||||
return {
|
||||
dataVersion: (data as any).version ?? 0,
|
||||
getItem,
|
||||
getItemIndex,
|
||||
getLoadedItems,
|
||||
itemCount,
|
||||
loadedItems,
|
||||
onRangeChanged,
|
||||
|
||||
Reference in New Issue
Block a user