mirror of
https://github.com/antebudimir/feishin.git
synced 2026-01-01 02:13:33 +00:00
Subsonic 2, general rework (#758)
This commit is contained in:
parent
31492fa9ef
commit
8cddbef701
69 changed files with 4625 additions and 3566 deletions
|
|
@ -11,21 +11,24 @@ import { useListStoreActions, useListStoreByKey } from '/@/renderer/store';
|
|||
|
||||
export type UseDisplayRefreshProps = {
|
||||
gridRef: MutableRefObject<VirtualInfiniteGridRef | null>;
|
||||
itemCount?: number;
|
||||
tableRef: MutableRefObject<AgGridReactType | null>;
|
||||
} & UseHandleListFilterChangeProps;
|
||||
|
||||
export const useDisplayRefresh = ({
|
||||
export const useDisplayRefresh = <TFilter>({
|
||||
isClientSideSort,
|
||||
itemCount,
|
||||
gridRef,
|
||||
itemType,
|
||||
server,
|
||||
tableRef,
|
||||
}: UseDisplayRefreshProps) => {
|
||||
const { customFilters, pageKey, handlePlay } = useListContext();
|
||||
const { display, filter } = useListStoreByKey({ key: pageKey });
|
||||
const { display, filter } = useListStoreByKey<TFilter>({ key: pageKey });
|
||||
|
||||
const { handleRefreshGrid, handleRefreshTable } = useListFilterRefresh({
|
||||
isClientSideSort,
|
||||
itemCount,
|
||||
itemType,
|
||||
server,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -10,12 +10,16 @@ import orderBy from 'lodash/orderBy';
|
|||
|
||||
export interface UseHandleListFilterChangeProps {
|
||||
isClientSideSort?: boolean;
|
||||
itemCount?: number;
|
||||
itemType: LibraryItem;
|
||||
server: ServerListItem | null;
|
||||
}
|
||||
|
||||
const BLOCK_SIZE = 500;
|
||||
|
||||
export const useListFilterRefresh = ({
|
||||
server,
|
||||
itemCount,
|
||||
itemType,
|
||||
isClientSideSort,
|
||||
}: UseHandleListFilterChangeProps) => {
|
||||
|
|
@ -78,7 +82,7 @@ export const useListFilterRefresh = ({
|
|||
|
||||
const queryKey = queryKeyFn(server?.id || '', query);
|
||||
|
||||
const res = await queryClient.fetchQuery({
|
||||
const results = await queryClient.fetchQuery({
|
||||
queryFn: async ({ signal }) => {
|
||||
return queryFn({
|
||||
apiClientProps: {
|
||||
|
|
@ -91,18 +95,34 @@ export const useListFilterRefresh = ({
|
|||
queryKey,
|
||||
});
|
||||
|
||||
if (isClientSideSort && res?.items) {
|
||||
if (isClientSideSort && results?.items) {
|
||||
const sortedResults = orderBy(
|
||||
res.items,
|
||||
results.items,
|
||||
[(item) => String(item[filter.sortBy]).toLowerCase()],
|
||||
filter.sortOrder === 'DESC' ? ['desc'] : ['asc'],
|
||||
);
|
||||
|
||||
params.successCallback(sortedResults || [], res?.totalRecordCount || 0);
|
||||
params.successCallback(
|
||||
sortedResults || [],
|
||||
results?.totalRecordCount || itemCount,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
params.successCallback(res?.items || [], res?.totalRecordCount || 0);
|
||||
if (results?.totalRecordCount === null) {
|
||||
const hasMoreRows = results?.items?.length === BLOCK_SIZE;
|
||||
const lastRowIndex = hasMoreRows
|
||||
? undefined
|
||||
: (filter.offset || 0) + results.items.length;
|
||||
|
||||
params.successCallback(
|
||||
results?.items || [],
|
||||
hasMoreRows ? undefined : lastRowIndex,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
params.successCallback(results?.items || [], results?.totalRecordCount || 0);
|
||||
},
|
||||
|
||||
rowCount: undefined,
|
||||
|
|
@ -112,7 +132,7 @@ export const useListFilterRefresh = ({
|
|||
tableRef.current?.api.purgeInfiniteCache();
|
||||
tableRef.current?.api.ensureIndexVisible(0, 'top');
|
||||
},
|
||||
[isClientSideSort, queryClient, queryFn, queryKeyFn, server],
|
||||
[isClientSideSort, itemCount, queryClient, queryFn, queryKeyFn, server],
|
||||
);
|
||||
|
||||
const handleRefreshGrid = useCallback(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue