Change type name, add paginated table

This commit is contained in:
jeffvli 2022-12-26 04:47:40 -08:00
parent 1883164150
commit 5ed06f79b3
8 changed files with 25 additions and 30 deletions

View file

@ -4,7 +4,7 @@ import { areEqual } from 'react-window';
import { DefaultCard } from '/@/renderer/components/virtual-grid/grid-card/default-card';
import { PosterCard } from '/@/renderer/components/virtual-grid/grid-card/poster-card';
import type { GridCardData } from '/@/renderer/types';
import { CardDisplayType } from '/@/renderer/types';
import { ListDisplayType } from '/@/renderer/types';
export const GridCard = memo(({ data, index, style }: ListChildComponentProps) => {
const {
@ -26,7 +26,7 @@ export const GridCard = memo(({ data, index, style }: ListChildComponentProps) =
const startIndex = index * columnCount;
const stopIndex = Math.min(itemCount - 1, startIndex + columnCount - 1);
const View = display === CardDisplayType.CARD ? DefaultCard : PosterCard;
const View = display === ListDisplayType.CARD ? DefaultCard : PosterCard;
for (let i = startIndex; i <= stopIndex; i += 1) {
cards.push(

View file

@ -8,7 +8,7 @@ import { GridCard } from '/@/renderer/components/virtual-grid/grid-card';
import type {
CardRow,
LibraryItem,
CardDisplayType,
ListDisplayType,
CardRoute,
PlayQueueAddOptions,
} from '/@/renderer/types';
@ -64,7 +64,7 @@ export const VirtualGridWrapper = ({
}: Omit<FixedSizeListProps, 'ref' | 'itemSize' | 'children'> & {
cardRows: CardRow<Album | AlbumArtist | Artist>[];
columnCount: number;
display: CardDisplayType;
display: ListDisplayType;
handlePlayQueueAdd?: (options: PlayQueueAddOptions) => void;
itemData: any[];
itemGap: number;

View file

@ -12,7 +12,7 @@ import type { FixedSizeListProps } from 'react-window';
import InfiniteLoader from 'react-window-infinite-loader';
import { VirtualGridWrapper } from '/@/renderer/components/virtual-grid/virtual-grid-wrapper';
import type { CardRoute, CardRow, LibraryItem, PlayQueueAddOptions } from '/@/renderer/types';
import { CardDisplayType } from '/@/renderer/types';
import { ListDisplayType } from '/@/renderer/types';
export type VirtualInfiniteGridRef = {
resetLoadMoreItemsCache: () => void;
@ -22,7 +22,7 @@ export type VirtualInfiniteGridRef = {
interface VirtualGridProps extends Omit<FixedSizeListProps, 'children' | 'itemSize'> {
cardRows: CardRow<any>[];
display?: CardDisplayType;
display?: ListDisplayType;
fetchFn: (options: { columnCount: number; skip: number; take: number }) => Promise<any>;
handlePlayQueueAdd?: (options: PlayQueueAddOptions) => void;
itemGap: number;
@ -144,7 +144,7 @@ export const VirtualInfiniteGrid = forwardRef(
<VirtualGridWrapper
cardRows={cardRows}
columnCount={columnCount}
display={display || CardDisplayType.CARD}
display={display || ListDisplayType.CARD}
handlePlayQueueAdd={handlePlayQueueAdd}
height={height}
initialScrollOffset={initialScrollOffset}
@ -171,7 +171,7 @@ export const VirtualInfiniteGrid = forwardRef(
);
VirtualInfiniteGrid.defaultProps = {
display: CardDisplayType.CARD,
display: ListDisplayType.CARD,
minimumBatchSize: 20,
route: undefined,
};

View file

@ -5,7 +5,7 @@ import {
VirtualInfiniteGridRef,
} from '/@/renderer/components';
import { AppRoute } from '/@/renderer/router/routes';
import { CardDisplayType, CardRow, LibraryItem } from '/@/renderer/types';
import { ListDisplayType, CardRow, LibraryItem } from '/@/renderer/types';
import AutoSizer from 'react-virtualized-auto-sizer';
import { MutableRefObject, useCallback, useMemo } from 'react';
import { ListOnScrollProps } from 'react-window';
@ -145,7 +145,7 @@ export const AlbumListContent = ({ gridRef }: AlbumListContentProps) => {
<VirtualInfiniteGrid
ref={gridRef}
cardRows={cardRows}
display={page.display || CardDisplayType.CARD}
display={page.display || ListDisplayType.CARD}
fetchFn={fetch}
handlePlayQueueAdd={handlePlayQueueAdd}
height={height}

View file

@ -37,7 +37,7 @@ import {
useSetAlbumFilters,
useSetAlbumStore,
} from '/@/renderer/store';
import { CardDisplayType } from '/@/renderer/types';
import { ListDisplayType } from '/@/renderer/types';
const FILTERS = {
jellyfin: [
@ -198,12 +198,12 @@ export const AlbumListHeader = ({ gridRef }: AlbumListHeaderProps) => {
(e: MouseEvent<HTMLButtonElement>) => {
if (!e.currentTarget?.value) return;
const type = e.currentTarget.value;
if (type === CardDisplayType.CARD) {
setPage({ list: { ...page, display: CardDisplayType.CARD } });
} else if (type === CardDisplayType.POSTER) {
setPage({ list: { ...page, display: CardDisplayType.POSTER } });
if (type === ListDisplayType.CARD) {
setPage({ list: { ...page, display: ListDisplayType.CARD } });
} else if (type === ListDisplayType.POSTER) {
setPage({ list: { ...page, display: ListDisplayType.POSTER } });
} else {
setPage({ list: { ...page, display: CardDisplayType.TABLE } });
setPage({ list: { ...page, display: ListDisplayType.TABLE } });
}
},
[page, setPage],
@ -264,7 +264,7 @@ export const AlbumListHeader = ({ gridRef }: AlbumListHeaderProps) => {
</DropdownMenu.Item>
<DropdownMenu.Item
disabled
$isActive={page.display === CardDisplayType.TABLE}
$isActive={page.display === ListDisplayType.TABLE}
value="list"
onClick={handleSetViewType}
>

View file

@ -3,14 +3,14 @@ import create from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { AlbumListArgs, AlbumListSort, SortOrder } from '/@/renderer/api/types';
import { CardDisplayType } from '/@/renderer/types';
import { ListDisplayType } from '/@/renderer/types';
type TableProps = {
scrollOffset: number;
};
type ListProps<T> = {
display: CardDisplayType;
display: ListDisplayType;
filter: T;
grid: {
scrollOffset: number;
@ -49,7 +49,7 @@ export const useAlbumStore = create<AlbumSlice>()(
},
},
list: {
display: CardDisplayType.CARD,
display: ListDisplayType.CARD,
filter: {
musicFolderId: undefined,
sortBy: AlbumListSort.RECENTLY_ADDED,

View file

@ -4,14 +4,14 @@ import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { SongListArgs, SongListSort, SortOrder } from '/@/renderer/api/types';
import { DataTableProps } from '/@/renderer/store/settings.store';
import { CardDisplayType, TableColumn } from '/@/renderer/types';
import { ListDisplayType, TableColumn } from '/@/renderer/types';
type TableProps = {
scrollOffset: number;
} & DataTableProps;
type ListProps<T> = {
display: CardDisplayType;
display: ListDisplayType;
filter: T;
table: TableProps;
};
@ -44,7 +44,7 @@ export const useSongStore = create<SongSlice>()(
},
},
list: {
display: CardDisplayType.TABLE,
display: ListDisplayType.TABLE,
filter: {
musicFolderId: undefined,
sortBy: SongListSort.RECENTLY_ADDED,

View file

@ -19,16 +19,11 @@ export type CardRow<T> = {
route?: CardRoute;
};
export enum CardDisplayType {
CARD = 'card',
POSTER = 'poster',
TABLE = 'table',
}
export enum ListDisplayType {
CARD = 'card',
POSTER = 'poster',
TABLE = 'table',
TABLE_PAGINATED = 'paginatedTable',
}
export enum LibraryItem {
@ -164,7 +159,7 @@ export type GridCardData = {
cardControls: any;
cardRows: CardRow<Album | AlbumArtist | Artist>[];
columnCount: number;
display: CardDisplayType;
display: ListDisplayType;
handlePlayQueueAdd: (options: PlayQueueAddOptions) => void;
itemCount: number;
itemData: any[];