import { Center, Flex } from '@mantine/core'; import { useCallback, MouseEvent } from 'react'; import { RiAddBoxFill, RiAddCircleFill, RiAlbumFill, RiPlayFill, RiPlayListFill, RiUserVoiceFill, } from 'react-icons/ri'; import styled from 'styled-components'; import { LibraryItem } from '/@/renderer/api/types'; import { Button, MotionFlex, Text } from '/@/renderer/components'; import { Play, PlayQueueAddOptions } from '/@/renderer/types'; const ItemGrid = styled.div<{ height: number }>` display: grid; grid-auto-columns: 1fr; grid-template-areas: 'image info'; grid-template-rows: 1fr; grid-template-columns: ${(props) => props.height}px minmax(0, 1fr); gap: 0.5rem; width: 100%; max-width: 100%; height: 100%; letter-spacing: 0.5px; `; const ImageWrapper = styled.div` display: flex; grid-area: image; align-items: center; justify-content: center; height: 100%; `; const MetadataWrapper = styled.div` display: flex; flex-direction: column; grid-area: info; justify-content: center; width: 100%; `; const StyledImage = styled.img` object-fit: cover; border-radius: 4px; `; interface LibraryCommandItemProps { handlePlayQueueAdd?: (options: PlayQueueAddOptions) => void; id: string; imageUrl: string | null; itemType: LibraryItem; subtitle?: string; title?: string; } export const LibraryCommandItem = ({ id, imageUrl, subtitle, title, itemType, handlePlayQueueAdd, }: LibraryCommandItemProps) => { let Placeholder = RiAlbumFill; switch (itemType) { case LibraryItem.ALBUM: Placeholder = RiAlbumFill; break; case LibraryItem.ARTIST: Placeholder = RiUserVoiceFill; break; case LibraryItem.ALBUM_ARTIST: Placeholder = RiUserVoiceFill; break; case LibraryItem.PLAYLIST: Placeholder = RiPlayListFill; break; default: Placeholder = RiAlbumFill; break; } const handlePlay = useCallback( (e: MouseEvent, id: string, play: Play) => { e.stopPropagation(); handlePlayQueueAdd?.({ byItemType: { id, type: itemType, }, play, }); }, [handlePlayQueueAdd, itemType], ); return ( {imageUrl ? ( ) : (
)}
{title} {subtitle}
); };