From 3f8a3a5e03aa33b6cfeb6754b73099ce89ce4e5c Mon Sep 17 00:00:00 2001 From: jeffvli Date: Fri, 28 Nov 2025 14:34:15 -0800 Subject: [PATCH] fix override query behavior on list pages --- .../albums/components/album-list-content.tsx | 1 + .../components/album-artist-list-content.tsx | 23 +++++++++++++++---- .../components/artist-list-content.tsx | 23 +++++++++++++++---- .../genres/components/genre-list-content.tsx | 23 +++++++++++++++---- .../components/playlist-list-content.tsx | 23 +++++++++++++++---- .../songs/components/song-list-content.tsx | 1 + 6 files changed, 74 insertions(+), 20 deletions(-) diff --git a/src/renderer/features/albums/components/album-list-content.tsx b/src/renderer/features/albums/components/album-list-content.tsx index 858ec1404..79fdb3548 100644 --- a/src/renderer/features/albums/components/album-list-content.tsx +++ b/src/renderer/features/albums/components/album-list-content.tsx @@ -70,6 +70,7 @@ export const AlbumListView = ({ } return { + ...query, ...overrideQuery, sortBy: overrideQuery.sortBy || query.sortBy, sortOrder: overrideQuery.sortOrder || query.sortOrder, diff --git a/src/renderer/features/artists/components/album-artist-list-content.tsx b/src/renderer/features/artists/components/album-artist-list-content.tsx index 669826369..e4d6169f2 100644 --- a/src/renderer/features/artists/components/album-artist-list-content.tsx +++ b/src/renderer/features/artists/components/album-artist-list-content.tsx @@ -1,4 +1,4 @@ -import { lazy, Suspense } from 'react'; +import { lazy, Suspense, useMemo } from 'react'; import { useAlbumArtistListFilters } from '/@/renderer/features/artists/hooks/use-album-artist-list-filters'; import { ItemListSettings, useCurrentServer, useListSettings } from '/@/renderer/store'; @@ -70,6 +70,19 @@ export const AlbumArtistListView = ({ const { query } = useAlbumArtistListFilters(); + const mergedQuery = useMemo(() => { + if (!overrideQuery) { + return query; + } + + return { + ...query, + ...overrideQuery, + sortBy: overrideQuery.sortBy || query.sortBy, + sortOrder: overrideQuery.sortOrder || query.sortOrder, + }; + }, [query, overrideQuery]); + switch (display) { case ListDisplayType.GRID: { switch (pagination) { @@ -79,7 +92,7 @@ export const AlbumArtistListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -90,7 +103,7 @@ export const AlbumArtistListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -111,7 +124,7 @@ export const AlbumArtistListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> @@ -127,7 +140,7 @@ export const AlbumArtistListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> diff --git a/src/renderer/features/artists/components/artist-list-content.tsx b/src/renderer/features/artists/components/artist-list-content.tsx index 45efff68b..4afaaa365 100644 --- a/src/renderer/features/artists/components/artist-list-content.tsx +++ b/src/renderer/features/artists/components/artist-list-content.tsx @@ -1,4 +1,4 @@ -import { lazy, Suspense } from 'react'; +import { lazy, Suspense, useMemo } from 'react'; import { useArtistListFilters } from '/@/renderer/features/artists/hooks/use-artist-list-filters'; import { ItemListSettings, useCurrentServer, useListSettings } from '/@/renderer/store'; @@ -62,6 +62,19 @@ export const ArtistListView = ({ const { query } = useArtistListFilters(); + const mergedQuery = useMemo(() => { + if (!overrideQuery) { + return query; + } + + return { + ...query, + ...overrideQuery, + sortBy: overrideQuery.sortBy || query.sortBy, + sortOrder: overrideQuery.sortOrder || query.sortOrder, + }; + }, [query, overrideQuery]); + switch (display) { case ListDisplayType.GRID: { switch (pagination) { @@ -71,7 +84,7 @@ export const ArtistListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -82,7 +95,7 @@ export const ArtistListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -103,7 +116,7 @@ export const ArtistListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> @@ -119,7 +132,7 @@ export const ArtistListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> diff --git a/src/renderer/features/genres/components/genre-list-content.tsx b/src/renderer/features/genres/components/genre-list-content.tsx index 2c931734f..f7209c0db 100644 --- a/src/renderer/features/genres/components/genre-list-content.tsx +++ b/src/renderer/features/genres/components/genre-list-content.tsx @@ -1,4 +1,4 @@ -import { lazy, Suspense } from 'react'; +import { lazy, Suspense, useMemo } from 'react'; import { useGenreListFilters } from '/@/renderer/features/genres/hooks/use-genre-list-filters'; import { ItemListSettings, useCurrentServer, useListSettings } from '/@/renderer/store'; @@ -58,6 +58,19 @@ export const GenreListView = ({ const { query } = useGenreListFilters(); + const mergedQuery = useMemo(() => { + if (!overrideQuery) { + return query; + } + + return { + ...query, + ...overrideQuery, + sortBy: overrideQuery.sortBy || query.sortBy, + sortOrder: overrideQuery.sortOrder || query.sortOrder, + }; + }, [query, overrideQuery]); + switch (display) { case ListDisplayType.GRID: { switch (pagination) { @@ -67,7 +80,7 @@ export const GenreListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -78,7 +91,7 @@ export const GenreListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -99,7 +112,7 @@ export const GenreListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> @@ -115,7 +128,7 @@ export const GenreListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> diff --git a/src/renderer/features/playlists/components/playlist-list-content.tsx b/src/renderer/features/playlists/components/playlist-list-content.tsx index 15ba48ccd..cc66d6a1a 100644 --- a/src/renderer/features/playlists/components/playlist-list-content.tsx +++ b/src/renderer/features/playlists/components/playlist-list-content.tsx @@ -1,4 +1,4 @@ -import { lazy, Suspense } from 'react'; +import { lazy, Suspense, useMemo } from 'react'; import { usePlaylistListFilters } from '/@/renderer/features/playlists/hooks/use-playlist-list-filters'; import { ItemListSettings, useCurrentServer, useListSettings } from '/@/renderer/store'; @@ -68,6 +68,19 @@ export const PlaylistListView = ({ const { query } = usePlaylistListFilters(); + const mergedQuery = useMemo(() => { + if (!overrideQuery) { + return query; + } + + return { + ...query, + ...overrideQuery, + sortBy: overrideQuery.sortBy || query.sortBy, + sortOrder: overrideQuery.sortOrder || query.sortOrder, + }; + }, [query, overrideQuery]); + switch (display) { case ListDisplayType.GRID: { switch (pagination) { @@ -77,7 +90,7 @@ export const PlaylistListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -88,7 +101,7 @@ export const PlaylistListView = ({ gap={grid.itemGap} itemsPerPage={itemsPerPage} itemsPerRow={grid.itemsPerRowEnabled ? grid.itemsPerRow : undefined} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} /> ); @@ -109,7 +122,7 @@ export const PlaylistListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> @@ -125,7 +138,7 @@ export const PlaylistListView = ({ enableRowHoverHighlight={table.enableRowHoverHighlight} enableVerticalBorders={table.enableVerticalBorders} itemsPerPage={itemsPerPage} - query={overrideQuery ?? query} + query={mergedQuery} serverId={server.id} size={table.size} /> diff --git a/src/renderer/features/songs/components/song-list-content.tsx b/src/renderer/features/songs/components/song-list-content.tsx index 38a5b4c06..5817036b9 100644 --- a/src/renderer/features/songs/components/song-list-content.tsx +++ b/src/renderer/features/songs/components/song-list-content.tsx @@ -67,6 +67,7 @@ export const SongListView = ({ } return { + ...query, ...overrideQuery, sortBy: overrideQuery.sortBy || query.sortBy, sortOrder: overrideQuery.sortOrder || query.sortOrder,