Subsonic 2, general rework (#758)

This commit is contained in:
Kendall Garner 2024-09-26 04:23:08 +00:00 committed by GitHub
parent 31492fa9ef
commit 8cddbef701
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
69 changed files with 4625 additions and 3566 deletions

View file

@ -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,
});

View file

@ -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(