fix list select all hotkey (#2195)

This commit is contained in:
jeffvli
2026-07-05 21:01:24 -07:00
parent 2ad4c58dcd
commit 7b5df97fa0
17 changed files with 189 additions and 87 deletions
@@ -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,