feishin/src/renderer/features/artists/components/album-artist-detail-top-songs-list-header.tsx

51 lines
1.7 KiB
TypeScript
Raw Normal View History

import { useTranslation } from 'react-i18next';
import { PageHeader } from '/@/renderer/components/page-header/page-header';
2023-01-13 13:51:19 -08:00
import { usePlayQueueAdd } from '/@/renderer/features/player';
import { LibraryHeaderBar } from '/@/renderer/features/shared';
import { usePlayButtonBehavior } from '/@/renderer/store/settings.store';
import { Badge } from '/@/shared/components/badge/badge';
import { SpinnerIcon } from '/@/shared/components/spinner/spinner';
2025-05-20 19:23:36 -07:00
import { QueueSong } from '/@/shared/types/domain-types';
import { Play } from '/@/shared/types/types';
2023-01-13 13:51:19 -08:00
interface AlbumArtistDetailTopSongsListHeaderProps {
2023-07-01 19:10:05 -07:00
data: QueueSong[];
itemCount?: number;
title: string;
2023-01-13 13:51:19 -08:00
}
export const AlbumArtistDetailTopSongsListHeader = ({
2023-07-01 19:10:05 -07:00
data,
itemCount,
title,
2023-01-13 13:51:19 -08:00
}: AlbumArtistDetailTopSongsListHeaderProps) => {
const { t } = useTranslation();
2023-07-01 19:10:05 -07:00
const handlePlayQueueAdd = usePlayQueueAdd();
const playButtonBehavior = usePlayButtonBehavior();
2023-01-13 13:51:19 -08:00
2023-07-01 19:10:05 -07:00
const handlePlay = async (playType: Play) => {
handlePlayQueueAdd?.({
byData: data,
playType,
});
};
2023-01-13 13:51:19 -08:00
2023-07-01 19:10:05 -07:00
return (
<PageHeader p="1rem">
<LibraryHeaderBar>
<LibraryHeaderBar.PlayButton onClick={() => handlePlay(playButtonBehavior)} />
<LibraryHeaderBar.Title>
{t('page.albumArtistDetail.topSongsFrom', {
postProcess: 'titleCase',
title,
})}
</LibraryHeaderBar.Title>
<Badge>
2023-07-01 19:10:05 -07:00
{itemCount === null || itemCount === undefined ? <SpinnerIcon /> : itemCount}
</Badge>
2023-07-01 19:10:05 -07:00
</LibraryHeaderBar>
</PageHeader>
);
2023-01-13 13:51:19 -08:00
};