Add initial genre list support

This commit is contained in:
jeffvli 2023-07-31 17:16:48 -07:00
parent 4d5085f230
commit 8029712b55
25 changed files with 968 additions and 41 deletions

View file

@ -8,6 +8,8 @@ import {
AlbumArtistListSort,
AlbumListArgs,
AlbumListSort,
GenreListArgs,
GenreListSort,
LibraryItem,
PlaylistListArgs,
PlaylistListSort,
@ -26,10 +28,14 @@ export type AlbumListFilter = Omit<AlbumListArgs['query'], 'startIndex' | 'limit
export type SongListFilter = Omit<SongListArgs['query'], 'startIndex' | 'limit'>;
export type AlbumArtistListFilter = Omit<AlbumArtistListArgs['query'], 'startIndex' | 'limit'>;
export type PlaylistListFilter = Omit<PlaylistListArgs['query'], 'startIndex' | 'limit'>;
export type GenreListFilter = Omit<GenreListArgs['query'], 'startIndex' | 'limit'>;
export type ListKey = keyof ListState['item'] | string;
type FilterType = AlbumListFilter | SongListFilter | AlbumArtistListFilter | PlaylistListFilter;
type FilterType =
| AlbumListFilter
| SongListFilter
| AlbumArtistListFilter
| PlaylistListFilter
| GenreListFilter;
export type ListTableProps = {
pagination: TablePagination;
@ -58,11 +64,14 @@ export interface ListState {
albumArtistAlbum: ListItemProps<AlbumListFilter>;
albumArtistSong: ListItemProps<SongListFilter>;
albumDetail: ListItemProps<any>;
genre: ListItemProps<GenreListFilter>;
playlist: ListItemProps<PlaylistListFilter>;
song: ListItemProps<SongListFilter>;
};
}
export type ListKey = keyof ListState['item'] | string;
export type ListDeterministicArgs = { key: ListKey };
export interface ListSlice extends ListState {
@ -479,6 +488,35 @@ export const useListStore = create<ListSlice>()(
scrollOffset: 0,
},
},
genre: {
display: ListDisplayType.TABLE,
filter: {
sortBy: GenreListSort.NAME,
sortOrder: SortOrder.ASC,
},
grid: { itemsPerRow: 5, scrollOffset: 0 },
table: {
autoFit: true,
columns: [
{
column: TableColumn.ROW_INDEX,
width: 50,
},
{
column: TableColumn.TITLE,
width: 500,
},
],
pagination: {
currentPage: 1,
itemsPerPage: 100,
totalItems: 1,
totalPages: 1,
},
rowHeight: 30,
scrollOffset: 0,
},
},
playlist: {
display: ListDisplayType.POSTER,
filter: {