feishin/src/renderer/features/albums/routes/album-list-route.tsx

65 lines
2.1 KiB
TypeScript
Raw Normal View History

2022-12-19 15:59:14 -08:00
import { AnimatedPage } from '/@/renderer/features/shared';
import { AlbumListHeader } from '/@/renderer/features/albums/components/album-list-header';
import { AlbumListContent } from '/@/renderer/features/albums/components/album-list-content';
2022-12-24 20:20:17 -08:00
import { useRef } from 'react';
2022-12-28 01:44:49 -08:00
import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact';
import { useAlbumList } from '/@/renderer/features/albums/queries/album-list-query';
2023-03-05 18:28:26 -08:00
import { generatePageKey, useAlbumListFilter, useCurrentServer } from '/@/renderer/store';
import { useParams, useSearchParams } from 'react-router-dom';
import { AlbumListContext } from '/@/renderer/features/albums/context/album-list-context';
import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid';
2022-12-19 15:59:14 -08:00
const AlbumListRoute = () => {
2022-12-24 20:20:17 -08:00
const gridRef = useRef<VirtualInfiniteGridRef | null>(null);
2022-12-28 01:44:49 -08:00
const tableRef = useRef<AgGridReactType | null>(null);
2023-01-15 16:22:07 -08:00
const server = useCurrentServer();
const [searchParams] = useSearchParams();
2023-03-05 18:28:26 -08:00
const { albumArtistId } = useParams();
2023-01-15 16:22:07 -08:00
2023-03-05 18:28:26 -08:00
const pageKey = generatePageKey(
'album',
albumArtistId ? `${albumArtistId}_${server?.id}` : undefined,
);
const albumListFilter = useAlbumListFilter({ id: albumArtistId || undefined, key: pageKey });
const itemCountCheck = useAlbumList({
options: {
cacheTime: 1000 * 60,
staleTime: 1000 * 60,
},
query: {
limit: 1,
startIndex: 0,
2023-03-05 18:28:26 -08:00
...albumListFilter,
},
serverId: server?.id,
});
const itemCount =
itemCountCheck.data?.totalRecordCount === null
? undefined
: itemCountCheck.data?.totalRecordCount;
2022-12-24 20:20:17 -08:00
2022-12-19 15:59:14 -08:00
return (
<AnimatedPage>
2023-03-05 18:28:26 -08:00
<AlbumListContext.Provider value={{ id: albumArtistId || undefined, pageKey }}>
<AlbumListHeader
gridRef={gridRef}
itemCount={itemCount}
tableRef={tableRef}
title={searchParams.get('artistName') || undefined}
/>
<AlbumListContent
gridRef={gridRef}
itemCount={itemCount}
tableRef={tableRef}
/>
</AlbumListContext.Provider>
2022-12-19 15:59:14 -08:00
</AnimatedPage>
);
};
export default AlbumListRoute;