diff --git a/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx b/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx index e8a6162da..72192cd47 100644 --- a/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx +++ b/src/renderer/features/playlists/components/playlist-detail-song-list-content.tsx @@ -1,6 +1,9 @@ -import { lazy, Suspense } from 'react'; +import { useSuspenseQuery } from '@tanstack/react-query'; +import { lazy, Suspense, useEffect } from 'react'; import { useParams } from 'react-router'; +import { useListContext } from '/@/renderer/context/list-context'; +import { playlistsQueries } from '/@/renderer/features/playlists/api/playlists-api'; import { ItemListSettings, useCurrentServer, useListSettings } from '/@/renderer/store'; import { Spinner } from '/@/shared/components/spinner/spinner'; import { PlaylistSongListQuery } from '/@/shared/types/domain-types'; @@ -19,10 +22,31 @@ export const PlaylistDetailSongListContent = () => { ItemListKey.PLAYLIST_SONG, ); const { playlistId } = useParams() as { playlistId: string }; + const server = useCurrentServer(); + const { setItemCount } = useListContext(); + + const playlistSongsQuery = useSuspenseQuery( + playlistsQueries.songList({ + query: { + id: playlistId, + }, + serverId: server?.id, + }), + ); + + useEffect(() => { + if ( + playlistSongsQuery.data?.totalRecordCount !== undefined && + playlistSongsQuery.data.totalRecordCount !== null + ) { + setItemCount?.(playlistSongsQuery.data.totalRecordCount); + } + }, [playlistSongsQuery.data?.totalRecordCount, setItemCount]); return ( }> { export type OverridePlaylistSongListQuery = Omit, 'id'>; export const PlaylistDetailSongListView = ({ + data, display, playlistId, table, }: ItemListSettings & { + data: any; playlistId: string; }) => { const server = useCurrentServer(); @@ -51,6 +77,7 @@ export const PlaylistDetailSongListView = ({ , 'query'> { + data: any; playlistId: string; } @@ -27,6 +26,7 @@ export const PlaylistDetailSongListTable = forwardRef { - const playlistSongs = useQuery( - playlistsQueries.songList({ - query: { id: playlistId }, - serverId: serverId, - }), - ); const { handleOnScrollEnd, scrollOffset } = useItemListScrollPersist({ enabled: saveScrollOffset, @@ -62,7 +56,7 @@ export const PlaylistDetailSongListTable = forwardRef { - let items = playlistSongs.data?.items || []; + let items = data?.items || []; if (searchTerm) { if (searchTerm) { @@ -73,7 +67,7 @@ export const PlaylistDetailSongListTable = forwardRef { const { t } = useTranslation(); const navigate = useNavigate(); + const location = useLocation(); const { playlistId } = useParams() as { playlistId: string }; const server = useCurrentServer(); - const detailQuery = useQuery( - playlistsQueries.detail({ query: { id: playlistId }, serverId: server?.id }), - ); + const detailQuery = useQuery({ + ...playlistsQueries.detail({ query: { id: playlistId }, serverId: server?.id }), + initialData: location.state?.item, + staleTime: 0, + }); const createPlaylistMutation = useCreatePlaylist({}); const deletePlaylistMutation = useDeletePlaylist({}); @@ -410,15 +414,6 @@ const PlaylistDetailSongListRoute = () => { setIsQueryBuilderExpanded(true); }; - const playlistSongs = useQuery( - playlistsQueries.songList({ - query: { - id: playlistId, - }, - serverId: server?.id, - }), - ); - const [itemCount, setItemCount] = useState(undefined); const providerValue = useMemo(() => { @@ -431,15 +426,6 @@ const PlaylistDetailSongListRoute = () => { }; }, [playlistId, itemCount]); - useEffect(() => { - if ( - playlistSongs.data?.totalRecordCount !== undefined && - playlistSongs.data.totalRecordCount !== null - ) { - setItemCount(playlistSongs.data.totalRecordCount); - } - }, [playlistSongs.data?.totalRecordCount]); - return ( @@ -466,7 +452,9 @@ const PlaylistDetailSongListRoute = () => { queryBuilderRef={queryBuilderRef} /> )} - + }> + + ); diff --git a/src/renderer/features/sidebar/components/sidebar-playlist-list.tsx b/src/renderer/features/sidebar/components/sidebar-playlist-list.tsx index 8defb85d7..07e88b4c3 100644 --- a/src/renderer/features/sidebar/components/sidebar-playlist-list.tsx +++ b/src/renderer/features/sidebar/components/sidebar-playlist-list.tsx @@ -41,7 +41,10 @@ interface PlaylistRowButtonProps extends Omit { - const url = generatePath(AppRoute.PLAYLISTS_DETAIL_SONGS, { playlistId: to }); + const url = { + pathname: generatePath(AppRoute.PLAYLISTS_DETAIL_SONGS, { playlistId: to }), + state: { item }, + }; const { t } = useTranslation(); const [isHovered, setIsHovered] = useState(false);