From f09227d963a5d08dbb09c2226c195ee51d3636d4 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 16 Jul 2023 11:15:47 -0700 Subject: [PATCH] Update album table view --- .../components/album-detail-content.tsx | 1 - .../components/album-list-header-filters.tsx | 125 ++++----- .../components/album-list-table-view.tsx | 240 ++++-------------- 3 files changed, 104 insertions(+), 262 deletions(-) diff --git a/src/renderer/features/albums/components/album-detail-content.tsx b/src/renderer/features/albums/components/album-detail-content.tsx index 91cba79a..1697a5a4 100644 --- a/src/renderer/features/albums/components/album-detail-content.tsx +++ b/src/renderer/features/albums/components/album-detail-content.tsx @@ -86,7 +86,6 @@ export const AlbumDetailContent = ({ tableRef }: AlbumDetailContentProps) => { column: TableColumn.TITLE_COMBINED, width: 0, }, - { column: TableColumn.DURATION, width: 0, diff --git a/src/renderer/features/albums/components/album-list-header-filters.tsx b/src/renderer/features/albums/components/album-list-header-filters.tsx index 2db8a3a8..be4f61be 100644 --- a/src/renderer/features/albums/components/album-list-header-filters.tsx +++ b/src/renderer/features/albums/components/album-list-header-filters.tsx @@ -1,13 +1,10 @@ import { MutableRefObject, useCallback, MouseEvent, ChangeEvent, useMemo } from 'react'; import { IDatasource } from '@ag-grid-community/core'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; -import { Flex, Group, Stack } from '@mantine/core'; +import { Divider, Flex, Group, Stack } from '@mantine/core'; import { openModal } from '@mantine/modals'; import { useQueryClient } from '@tanstack/react-query'; -import debounce from 'lodash/debounce'; import { - RiSortAsc, - RiSortDesc, RiFolder2Line, RiMoreFill, RiAddBoxFill, @@ -29,7 +26,7 @@ import { useListStoreActions, } from '/@/renderer/store'; import { ServerType, Play, ListDisplayType, TableColumn } from '/@/renderer/types'; -import { useMusicFolders } from '/@/renderer/features/shared'; +import { OrderToggleButton, useMusicFolders } from '/@/renderer/features/shared'; import { usePlayQueueAdd } from '/@/renderer/features/player'; import { JellyfinAlbumFilters } from '/@/renderer/features/albums/components/jellyfin-album-filters'; import { NavidromeAlbumFilters } from '/@/renderer/features/albums/components/navidrome-album-filters'; @@ -79,11 +76,6 @@ const FILTERS = { ], }; -const ORDER = [ - { name: 'Ascending', value: SortOrder.ASC }, - { name: 'Descending', value: SortOrder.DESC }, -]; - interface AlbumListHeaderFiltersProps { customFilters?: Partial; gridRef: MutableRefObject; @@ -100,7 +92,7 @@ export const AlbumListHeaderFilters = ({ const queryClient = useQueryClient(); const { id, pageKey } = useAlbumListContext(); const server = useCurrentServer(); - const { setFilter, setTablePagination, setTable, setGrid, setDisplayType, setTableColumns } = + const { setFilter, setTablePagination, setTable, setGrid, setDisplayType } = useListStoreActions(); const { display, filter, table, grid } = useAlbumListStore({ id, key: pageKey }); const cq = useContainerQuery(); @@ -113,8 +105,6 @@ export const AlbumListHeaderFilters = ({ ?.name) || 'Unknown'; - const sortOrderLabel = ORDER.find((o) => o.value === filter.sortOrder)?.name || 'Unknown'; - const isGrid = display === ListDisplayType.CARD || display === ListDisplayType.POSTER; const fetch = useCallback( @@ -371,8 +361,6 @@ export const AlbumListHeaderFilters = ({ } }; - const debouncedHandleItemSize = debounce(handleItemSize, 20); - const handleSetViewType = useCallback( (e: MouseEvent) => { if (!e.currentTarget?.value) return; @@ -385,8 +373,8 @@ export const AlbumListHeaderFilters = ({ const existingColumns = table.columns; if (values.length === 0) { - return setTableColumns({ - data: [], + return setTable({ + data: { columns: [] }, key: 'album', }); } @@ -395,13 +383,13 @@ export const AlbumListHeaderFilters = ({ if (values.length > existingColumns.length) { const newColumn = { column: values[values.length - 1], width: 100 }; - setTableColumns({ data: [...existingColumns, newColumn], key: 'album' }); + setTable({ data: { columns: [...existingColumns, newColumn] }, key: 'album' }); } else { // If removing a column const removed = existingColumns.filter((column) => !values.includes(column.column)); const newColumns = existingColumns.filter((column) => !removed.includes(column)); - setTableColumns({ data: newColumns, key: 'album' }); + setTable({ data: { columns: newColumns }, key: 'album' }); } return tableRef.current?.api.sizeColumnsToFit(); @@ -460,51 +448,56 @@ export const AlbumListHeaderFilters = ({ ))} + + + {server?.type === ServerType.JELLYFIN && ( + <> + + + + + + + {musicFoldersQuery.data?.items.map((folder) => ( + + {folder.name} + + ))} + + + + )} + - {server?.type === ServerType.JELLYFIN && ( - - - - - - {musicFoldersQuery.data?.items.map((folder) => ( - - {folder.name} - - ))} - - - )} +