format playlist header title without folder names

This commit is contained in:
jeffvli
2026-07-11 13:50:08 -07:00
parent b8daaf49b0
commit 1c659cc693
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { useCallback } from 'react'; import { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useLocation, useParams } from 'react-router'; import { useLocation, useParams } from 'react-router';
@@ -18,8 +18,13 @@ import {
} from '/@/renderer/features/shared/components/library-header'; } from '/@/renderer/features/shared/components/library-header';
import { LibraryHeaderBar } from '/@/renderer/features/shared/components/library-header-bar'; import { LibraryHeaderBar } from '/@/renderer/features/shared/components/library-header-bar';
import { ListSearchInput } from '/@/renderer/features/shared/components/list-search-input'; import { ListSearchInput } from '/@/renderer/features/shared/components/list-search-input';
import { getPlaylistLeafName } from '/@/renderer/features/sidebar/components/playlist-folder-tree';
import { AppRoute } from '/@/renderer/router/routes'; import { AppRoute } from '/@/renderer/router/routes';
import { useCurrentServer } from '/@/renderer/store'; import {
useCurrentServer,
useSidebarPlaylistFolders,
useSidebarPlaylistFolderSeparator,
} from '/@/renderer/store';
import { formatDurationString } from '/@/renderer/utils'; import { formatDurationString } from '/@/renderer/utils';
import { replaceURLWithHTMLLinks } from '/@/renderer/utils/linkify'; import { replaceURLWithHTMLLinks } from '/@/renderer/utils/linkify';
import { hasFeature } from '/@/shared/api/utils'; import { hasFeature } from '/@/shared/api/utils';
@@ -112,6 +117,14 @@ export const PlaylistDetailSongListHeader = ({
const playlistDuration = detailQuery?.data?.duration; const playlistDuration = detailQuery?.data?.duration;
const playlistDescription = detailQuery?.data?.description?.trim(); const playlistDescription = detailQuery?.data?.description?.trim();
const foldersEnabled = useSidebarPlaylistFolders();
const folderSeparator = useSidebarPlaylistFolderSeparator();
const playlistDisplayName = useMemo(() => {
const name = detailQuery?.data?.name;
if (!name) return '';
if (!foldersEnabled) return name;
return getPlaylistLeafName(name, folderSeparator);
}, [detailQuery?.data?.name, folderSeparator, foldersEnabled]);
const [collapsed] = useLocalStorage<boolean>({ const [collapsed] = useLocalStorage<boolean>({
defaultValue: false, defaultValue: false,
@@ -161,7 +174,7 @@ export const PlaylistDetailSongListHeader = ({
itemType={LibraryItem.PLAYLIST} itemType={LibraryItem.PLAYLIST}
songs={listData as Song[]} songs={listData as Song[]}
/> />
<LibraryHeaderBar.Title>{detailQuery?.data?.name}</LibraryHeaderBar.Title> <LibraryHeaderBar.Title>{playlistDisplayName}</LibraryHeaderBar.Title>
{isSmartPlaylist && ( {isSmartPlaylist && (
<LibraryHeaderBar.Badge> <LibraryHeaderBar.Badge>
{t('entity.smartPlaylist')} {t('entity.smartPlaylist')}
@@ -197,7 +210,7 @@ export const PlaylistDetailSongListHeader = ({
type: LibraryItem.PLAYLIST, type: LibraryItem.PLAYLIST,
}} }}
onImageFileDrop={canUploadPlaylistImage ? handlePlaylistImageUpload : undefined} onImageFileDrop={canUploadPlaylistImage ? handlePlaylistImageUpload : undefined}
title={detailQuery?.data?.name || ''} title={playlistDisplayName}
topRight={<ListSearchInput />} topRight={<ListSearchInput />}
> >
<Stack gap="md" w="100%"> <Stack gap="md" w="100%">