import React, { useMemo } from 'react'; import type { ICellRendererParams } from '@ag-grid-community/core'; import { Center } from '@mantine/core'; import { motion } from 'framer-motion'; import { RiAlbumFill } from 'react-icons/ri'; import { generatePath } from 'react-router'; import { Link } from 'react-router-dom'; import { SimpleImg } from 'react-simple-img'; import styled from 'styled-components'; import type { AlbumArtist, Artist } from '/@/renderer/api/types'; import { Text } from '/@/renderer/components/text'; import { AppRoute } from '/@/renderer/router/routes'; import { ServerType } from '/@/renderer/types'; import { Skeleton } from '/@/renderer/components/skeleton'; const CellContainer = styled(motion.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%; `; 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(SimpleImg)` img { object-fit: cover; } `; export const CombinedTitleCell = ({ value, rowIndex, node }: ICellRendererParams) => { const artists = useMemo(() => { if (!value) return null; return value?.type === ServerType.JELLYFIN ? value.artists : value.albumArtists; }, [value]); if (value === undefined) { return ( ); } return ( {value.imageUrl ? ( ) : (
)}
{value.name} {artists?.length ? ( artists.map((artist: Artist | AlbumArtist, index: number) => ( {index > 0 ? ', ' : null} {artist.name} )) ) : ( )}
); };