From c3d4f6cacd66535c1f6611a0301a48012cad83f1 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 18 Jan 2026 14:07:52 -0800 Subject: [PATCH] properly handle disableArtistFilter and disableGenreFilter props for all list filters --- .../components/jellyfin-album-filters.tsx | 13 +++--- .../components/navidrome-album-filters.tsx | 12 ++--- .../components/subsonic-album-filters.tsx | 13 +++--- .../shared/components/list-filters.tsx | 19 ++++++-- .../components/jellyfin-song-filters.tsx | 13 +++--- .../components/navidrome-song-filters.tsx | 43 ++++++++++-------- .../components/subsonic-song-filters.tsx | 45 +++++++++++-------- 7 files changed, 91 insertions(+), 67 deletions(-) diff --git a/src/renderer/features/albums/components/jellyfin-album-filters.tsx b/src/renderer/features/albums/components/jellyfin-album-filters.tsx index e26f69b63..d77e22d18 100644 --- a/src/renderer/features/albums/components/jellyfin-album-filters.tsx +++ b/src/renderer/features/albums/components/jellyfin-album-filters.tsx @@ -3,7 +3,6 @@ import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { getItemImageUrl } from '/@/renderer/components/item-image/item-image'; -import { useListContext } from '/@/renderer/context/list-context'; import { useAlbumListFilters } from '/@/renderer/features/albums/hooks/use-album-list-filters'; import { artistsQueries } from '/@/renderer/features/artists/api/artists-api'; import { genresQueries } from '/@/renderer/features/genres/api/genres-api'; @@ -32,16 +31,16 @@ import { interface JellyfinAlbumFiltersProps { disableArtistFilter?: boolean; + disableGenreFilter?: boolean; } -export const JellyfinAlbumFilters = ({ disableArtistFilter }: JellyfinAlbumFiltersProps) => { +export const JellyfinAlbumFilters = ({ + disableArtistFilter, + disableGenreFilter, +}: JellyfinAlbumFiltersProps) => { const { t } = useTranslation(); const serverId = useCurrentServerId(); - const { customFilters } = useListContext(); - - const isGenrePage = customFilters?.genreIds !== undefined; - const { query, setAlbumArtist, @@ -298,7 +297,7 @@ export const JellyfinAlbumFilters = ({ disableArtistFilter }: JellyfinAlbumFilte /> )} - {!isGenrePage && ( + {!disableGenreFilter && ( <> { +export const NavidromeAlbumFilters = ({ + disableArtistFilter, + disableGenreFilter, +}: NavidromeAlbumFiltersProps) => { const { t } = useTranslation(); const server = useCurrentServer(); const serverId = server.id; - const { customFilters } = useListContext(); const artistSelectMode = useAppStore((state) => state.artistSelectMode); const genreSelectMode = useAppStore((state) => state.genreSelectMode); const { setArtistSelectMode, setGenreSelectMode } = useAppStoreActions(); - const isGenrePage = customFilters?.genreIds !== undefined; - const { query, setAlbumArtist, @@ -327,7 +327,7 @@ export const NavidromeAlbumFilters = ({ disableArtistFilter }: NavidromeAlbumFil /> )} - {!isGenrePage && ( + {!disableGenreFilter && ( <> { +export const SubsonicAlbumFilters = ({ + disableArtistFilter, + disableGenreFilter, +}: SubsonicAlbumFiltersProps) => { const { t } = useTranslation(); const serverId = useCurrentServerId(); - const { customFilters } = useListContext(); - - const isGenrePage = customFilters?.genreIds !== undefined; - const { query, setAlbumArtist, setFavorite, setGenreId, setMaxYear, setMinYear } = useAlbumListFilters(); @@ -262,7 +261,7 @@ export const SubsonicAlbumFilters = ({ disableArtistFilter }: SubsonicAlbumFilte /> )} - {!isGenrePage && ( + {!disableGenreFilter && ( <> { export const ListFiltersModal = ({ isActive, itemType }: ListFiltersProps) => { const { t } = useTranslation(); const server = useCurrentServer(); - const { isSidebarOpen, setIsSidebarOpen } = useListContext(); + const { isSidebarOpen, pageKey, setIsSidebarOpen } = useListContext(); const serverType = server.type; @@ -53,6 +53,9 @@ export const ListFiltersModal = ({ isActive, itemType }: ListFiltersProps) => { const canPin = Boolean(setIsSidebarOpen); + const disableArtistFilter = pageKey === ItemListKey.ALBUM_ARTIST_ALBUM; + const disableGenreFilter = pageKey === ItemListKey.GENRE_ALBUM; + return ( <> @@ -81,7 +84,10 @@ export const ListFiltersModal = ({ isActive, itemType }: ListFiltersProps) => { } > - + ); @@ -91,11 +97,18 @@ export const ListFilters = ({ itemType }: ListFiltersProps) => { const server = useCurrentServer(); const serverType = server.type; const FilterComponent = FILTERS[serverType][itemType]; + const { pageKey } = useListContext(); + + const disableArtistFilter = pageKey === ItemListKey.ALBUM_ARTIST_ALBUM; + const disableGenreFilter = pageKey === ItemListKey.GENRE_ALBUM; return ( }> - + ); diff --git a/src/renderer/features/songs/components/jellyfin-song-filters.tsx b/src/renderer/features/songs/components/jellyfin-song-filters.tsx index 79917f210..9569461b8 100644 --- a/src/renderer/features/songs/components/jellyfin-song-filters.tsx +++ b/src/renderer/features/songs/components/jellyfin-song-filters.tsx @@ -3,7 +3,6 @@ import { useCallback, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { getItemImageUrl } from '/@/renderer/components/item-image/item-image'; -import { useListContext } from '/@/renderer/context/list-context'; import { artistsQueries } from '/@/renderer/features/artists/api/artists-api'; import { useGenreList } from '/@/renderer/features/genres/api/genres-api'; import { @@ -27,19 +26,19 @@ import { AlbumArtistListSort, LibraryItem, SortOrder } from '/@/shared/types/dom interface JellyfinSongFiltersProps { disableArtistFilter?: boolean; + disableGenreFilter?: boolean; } -export const JellyfinSongFilters = ({ disableArtistFilter }: JellyfinSongFiltersProps) => { +export const JellyfinSongFilters = ({ + disableArtistFilter, + disableGenreFilter, +}: JellyfinSongFiltersProps) => { const server = useCurrentServer(); const serverId = server.id; const { t } = useTranslation(); const { query, setArtistIds, setCustom, setFavorite, setMaxYear, setMinYear } = useSongListFilters(); - const { customFilters } = useListContext(); - - const isGenrePage = customFilters?.genreIds !== undefined; - // Despite the fact that getTags returns genres, it only returns genre names. // We prefer using IDs, hence the double query const genreListQuery = useGenreList(); @@ -280,7 +279,7 @@ export const JellyfinSongFilters = ({ disableArtistFilter }: JellyfinSongFilters /> )} - {!isGenrePage && ( + {!disableGenreFilter && ( <> { +interface NavidromeSongFiltersProps { + disableArtistFilter?: boolean; + disableGenreFilter?: boolean; +} + +export const NavidromeSongFilters = ({ + disableArtistFilter, + disableGenreFilter, +}: NavidromeSongFiltersProps) => { const { t } = useTranslation(); const server = useCurrentServer(); const serverId = server.id; const { query, setArtistIds, setCustom, setFavorite, setGenreId, setMaxYear, setMinYear } = useSongListFilters(); - const { customFilters } = useListContext(); - - const isGenrePage = customFilters?.genreIds !== undefined; - const genreListQuery = useGenreList(); const genreList = useMemo(() => { @@ -257,18 +260,22 @@ export const NavidromeSongFilters = () => { w="100%" /> - - - {!isGenrePage && ( + {!disableArtistFilter && ( + <> + + + + )} + {!disableGenreFilter && ( { +interface SubsonicSongFiltersProps { + disableArtistFilter?: boolean; + disableGenreFilter?: boolean; +} + +export const SubsonicSongFilters = ({ + disableArtistFilter, + disableGenreFilter, +}: SubsonicSongFiltersProps) => { const { t } = useTranslation(); const serverId = useCurrentServerId(); const { query, setArtistIds, setFavorite, setGenreId } = useSongListFilters(); - const { customFilters } = useListContext(); - - const isGenrePage = customFilters?.genreIds !== undefined; - const genreListQuery = useGenreList(); const genreList = useMemo(() => { @@ -149,19 +152,23 @@ export const SubsonicSongFilters = () => { /> ))} - - - {!isGenrePage && ( + {!disableArtistFilter && ( + <> + + + + )} + {!disableGenreFilter && ( <>