feishin/src/renderer/components/card/card-controls.tsx

87 lines
3.2 KiB
TypeScript
Raw Normal View History

2025-05-20 19:23:36 -07:00
import type { PlayQueueAddOptions } from '/@/shared/types/types';
import type { MouseEvent } from 'react';
import styles from './card-controls.module.css';
import {
2023-07-01 19:10:05 -07:00
ALBUM_CONTEXT_MENU_ITEMS,
ARTIST_CONTEXT_MENU_ITEMS,
} from '/@/renderer/features/context-menu/context-menu-items';
import { useHandleGeneralContextMenu } from '/@/renderer/features/context-menu/hooks/use-handle-context-menu';
import { usePlayButtonBehavior } from '/@/renderer/store/settings.store';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
import { Button } from '/@/shared/components/button/button';
import { Group } from '/@/shared/components/group/group';
import { Icon } from '/@/shared/components/icon/icon';
2025-05-20 19:23:36 -07:00
import { LibraryItem } from '/@/shared/types/domain-types';
import { Play } from '/@/shared/types/types';
2022-12-19 15:59:14 -08:00
2022-12-20 04:11:06 -08:00
export const CardControls = ({
handlePlayQueueAdd,
2023-07-01 19:10:05 -07:00
itemData,
itemType,
2022-12-20 04:11:06 -08:00
}: {
2023-07-01 19:10:05 -07:00
handlePlayQueueAdd?: (options: PlayQueueAddOptions) => void;
itemData: any;
itemType: LibraryItem;
2022-12-20 04:11:06 -08:00
}) => {
2023-07-01 19:10:05 -07:00
const playButtonBehavior = usePlayButtonBehavior();
const handlePlay = (e: MouseEvent<HTMLButtonElement>, playType?: Play) => {
e.preventDefault();
e.stopPropagation();
handlePlayQueueAdd?.({
byItemType: {
id: [itemData.id],
type: itemType,
},
playType: playType || playButtonBehavior,
});
};
const handleContextMenu = useHandleGeneralContextMenu(
itemType,
itemType === LibraryItem.ALBUM ? ALBUM_CONTEXT_MENU_ITEMS : ARTIST_CONTEXT_MENU_ITEMS,
);
return (
<div className={styles.gridCardControlsContainer}>
<div className={styles.bottomControls}>
2025-07-12 11:17:54 -07:00
<button className={styles.playButton} onClick={handlePlay}>
<Icon icon="mediaPlay" />
</button>
<Group gap="xs">
<Button
className={styles.secondaryButton}
2023-07-01 19:10:05 -07:00
disabled
p={5}
style={{ svg: { fill: 'white !important' } }}
2023-07-01 19:10:05 -07:00
variant="subtle"
>
<div className={itemData?.isFavorite ? styles.favoriteWrapper : ''}>
2023-07-01 19:10:05 -07:00
{itemData?.isFavorite ? (
<Icon icon="favorite" />
2023-07-01 19:10:05 -07:00
) : (
<Icon icon="favorite" />
2023-07-01 19:10:05 -07:00
)}
</div>
</Button>
<ActionIcon
className={styles.secondaryButton}
onClick={(e: any) => {
2023-07-01 19:10:05 -07:00
e.preventDefault();
e.stopPropagation();
handleContextMenu(e, [itemData]);
}}
p={5}
style={{ svg: { fill: 'white !important' } }}
variant="subtle"
2023-07-01 19:10:05 -07:00
>
<Icon icon="ellipsisHorizontal" />
</ActionIcon>
2023-07-01 19:10:05 -07:00
</Group>
</div>
</div>
2023-07-01 19:10:05 -07:00
);
2022-12-19 15:59:14 -08:00
};