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

83 lines
3.2 KiB
TypeScript
Raw Normal View History

import { useTranslation } from 'react-i18next';
import { RiAddBoxFill, RiAddCircleFill, RiMoreFill, RiPlayFill } from 'react-icons/ri';
import { Button, DropdownMenu, PageHeader, Paper, SpinnerIcon } from '/@/renderer/components';
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';
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', { title })}
</LibraryHeaderBar.Title>
2023-07-01 19:10:05 -07:00
<Paper
fw="600"
px="1rem"
py="0.3rem"
radius="sm"
>
{itemCount === null || itemCount === undefined ? <SpinnerIcon /> : itemCount}
</Paper>
<DropdownMenu position="bottom-start">
<DropdownMenu.Target>
<Button
compact
fw="600"
variant="subtle"
>
<RiMoreFill size={15} />
</Button>
</DropdownMenu.Target>
<DropdownMenu.Dropdown>
<DropdownMenu.Item
icon={<RiPlayFill />}
onClick={() => handlePlay(Play.NOW)}
>
{t('player.play', { postProcess: 'sentenceCase' })}
2023-07-01 19:10:05 -07:00
</DropdownMenu.Item>
<DropdownMenu.Item
icon={<RiAddBoxFill />}
onClick={() => handlePlay(Play.LAST)}
>
{t('player.addLast', { postProcess: 'sentenceCase' })}
2023-07-01 19:10:05 -07:00
</DropdownMenu.Item>
<DropdownMenu.Item
icon={<RiAddCircleFill />}
onClick={() => handlePlay(Play.NEXT)}
>
{t('player.addNext', { postProcess: 'sentenceCase' })}
2023-07-01 19:10:05 -07:00
</DropdownMenu.Item>
</DropdownMenu.Dropdown>
</DropdownMenu>
</LibraryHeaderBar>
</PageHeader>
);
2023-01-13 13:51:19 -08:00
};