diff --git a/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx b/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx index 210943a51..99a7241e7 100644 --- a/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx +++ b/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx @@ -11,16 +11,20 @@ import { ContextMenuController } from '/@/renderer/features/context-menu/context import { playlistsQueries } from '/@/renderer/features/playlists/api/playlists-api'; import { ListConfigMenu } from '/@/renderer/features/shared/components/list-config-menu'; import { ListRefreshButton } from '/@/renderer/features/shared/components/list-refresh-button'; +import { ListSearchInput } from '/@/renderer/features/shared/components/list-search-input'; import { ListSortByDropdown } from '/@/renderer/features/shared/components/list-sort-by-dropdown'; import { ListSortOrderToggleButton } from '/@/renderer/features/shared/components/list-sort-order-toggle-button'; import { MoreButton } from '/@/renderer/features/shared/components/more-button'; import { useContainerQuery } from '/@/renderer/hooks'; import { useCurrentServerId } from '/@/renderer/store'; +import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { Button } from '/@/shared/components/button/button'; import { Divider } from '/@/shared/components/divider/divider'; import { Flex } from '/@/shared/components/flex/flex'; import { Group } from '/@/shared/components/group/group'; import { Icon } from '/@/shared/components/icon/icon'; +import { Tooltip } from '/@/shared/components/tooltip/tooltip'; +import { useLocalStorage } from '/@/shared/hooks/use-local-storage'; import { LibraryItem, SongListSort, SortOrder } from '/@/shared/types/domain-types'; import { ItemListKey, ListDisplayType } from '/@/shared/types/types'; @@ -55,6 +59,11 @@ export const PlaylistDetailSongListHeaderFilters = ({ const isViewEditMode = !isSmartPlaylist && breakpoints.isSm; const isEditMode = mode === 'edit'; + const [collapsed, setCollapsed] = useLocalStorage({ + defaultValue: false, + key: 'playlist-header-collapsed', + }); + return ( @@ -70,6 +79,7 @@ export const PlaylistDetailSongListHeaderFilters = ({ disabled={isEditMode} listKey={ItemListKey.PLAYLIST_SONG} /> + {!collapsed && } @@ -86,6 +96,18 @@ export const PlaylistDetailSongListHeaderFilters = ({ : t('common.edit', { postProcess: 'titleCase' })} )} + + setCollapsed((prev) => !prev)} + variant="subtle" + /> + ({ + defaultValue: false, + key: 'playlist-header-collapsed', + }); + + const player = usePlayer(); + + const handlePlay = (type?: Play) => { + player.addToQueueByData(listData as Song[], type || Play.NOW); + }; + return ( - - - - {detailQuery?.data?.name} - {isSmartPlaylist && ( - {t('entity.smartPlaylist')} - )} - {!!playlistDuration && ( - - {formatDurationString(playlistDuration)} + {collapsed ? ( + + + + {detailQuery?.data?.name} + {isSmartPlaylist && ( + + {t('entity.smartPlaylist')} + + )} + {!!playlistDuration && ( + + {formatDurationString(playlistDuration)} + + )} + + {itemCount} - )} - - {itemCount} - - - - + + + + ) : ( + + handlePlay(Play.NOW)} + onShuffle={() => handlePlay(Play.SHUFFLE)} + /> + + )} diff --git a/src/renderer/features/playlists/routes/playlist-detail-song-list-route.tsx b/src/renderer/features/playlists/routes/playlist-detail-song-list-route.tsx index 0ac088a93..d269a3331 100644 --- a/src/renderer/features/playlists/routes/playlist-detail-song-list-route.tsx +++ b/src/renderer/features/playlists/routes/playlist-detail-song-list-route.tsx @@ -159,7 +159,7 @@ const PlaylistQueryEditor = ({ return (
- +