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 356b2170..076aa0e8 100644 --- a/src/renderer/features/albums/components/album-list-header-filters.tsx +++ b/src/renderer/features/albums/components/album-list-header-filters.tsx @@ -105,18 +105,12 @@ export const AlbumListHeaderFilters = ({ gridRef, tableRef }: AlbumListHeaderFil const onFilterChange = useCallback( (filter: AlbumListFilter) => { if (isGrid) { - handleRefreshGrid(gridRef, { - ...filter, - ...customFilters, - }); + handleRefreshGrid(gridRef, filter); } - handleRefreshTable(tableRef, { - ...filter, - ...customFilters, - }); + handleRefreshTable(tableRef, filter); }, - [customFilters, gridRef, handleRefreshGrid, handleRefreshTable, isGrid, tableRef], + [gridRef, handleRefreshGrid, handleRefreshTable, isGrid, tableRef], ); const handleOpenFiltersModal = () => { diff --git a/src/renderer/features/songs/components/song-list-header-filters.tsx b/src/renderer/features/songs/components/song-list-header-filters.tsx index 0ae0cab3..56699078 100644 --- a/src/renderer/features/songs/components/song-list-header-filters.tsx +++ b/src/renderer/features/songs/components/song-list-header-filters.tsx @@ -1,7 +1,7 @@ +import { ChangeEvent, MouseEvent, MutableRefObject, useCallback, useMemo } from 'react'; import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; import { Divider, Flex, Group, Stack } from '@mantine/core'; import { openModal } from '@mantine/modals'; -import { ChangeEvent, MouseEvent, MutableRefObject, useCallback, useMemo } from 'react'; import { RiAddBoxFill, RiAddCircleFill, @@ -224,7 +224,6 @@ export const SongListHeaderFilters = ({ tableRef }: SongListHeaderFiltersProps) const onFilterChange = (filter: SongListFilter) => { handleRefreshTable(tableRef, { ...filter, - ...customFilters, }); }; diff --git a/src/renderer/store/list.store.ts b/src/renderer/store/list.store.ts index 12b04ae9..c3f64c2e 100644 --- a/src/renderer/store/list.store.ts +++ b/src/renderer/store/list.store.ts @@ -188,14 +188,30 @@ export const useListStore = create()( } }); - return { - ...get()._actions.getFilter({ - id, - itemType: args.itemType, - key: args.key, - }), + const filter = get()._actions.getFilter({ + id, + itemType: args.itemType, + key: args.key, + }); + + const mergedFilters = { + ...filter, ...args.customFilters, + _custom: { + ...filter._custom, + ...args.customFilters?._custom, + jellyfin: { + ...filter._custom?.jellyfin, + ...args.customFilters?._custom?.jellyfin, + }, + navidrome: { + ...filter._custom?.navidrome, + ...args.customFilters?._custom?.navidrome, + }, + }, }; + + return mergedFilters; }, setGrid: (args) => { const [page, id] = args.key.split('_'); @@ -622,13 +638,33 @@ export const useListStoreByKey = (args: { filter?: Partial; ke ); }; -export const useListFilterByKey = (args: { filter?: Partial; key: string }) => { +export const useListFilterByKey = (args: { + filter?: Partial | any; + key: string; +}) => { const key = args.key as keyof ListState['item']; return useListStore( - (state) => ({ - ...state.item[key].filter, - ...args.filter, - }), + (state) => { + return { + ...state.item[key].filter, + ...(args.filter && { + ...args.filter, + _custom: { + ...state.item[key].filter._custom, + ...args.filter?._custom, + jellyfin: { + ...state.item[key].filter._custom?.jellyfin, + ...args.filter?._custom?.jellyfin, + }, + navidrome: { + ...state.item[key].filter._custom?.navidrome, + ...args.filter?._custom?.navidrome, + }, + }, + }), + }; + }, + shallow, ); };