import { ReactElement, useEffect, useState } from 'react'; import { Box, BoxProps, Flex, FlexProps } from '@chakra-ui/react'; import { Image } from '@chakra-ui/react'; import { ObjectId } from '@/back-api'; import { DataUrlAccess } from '@/utils/data-url-access'; import { Icon } from './Icon'; export type CoversProps = Omit & { data?: ObjectId[]; size?: BoxProps['width']; iconEmpty?: ReactElement; slideshow?: boolean; }; export const Covers = ({ data, iconEmpty, size = '100px', slideshow = false, ...rest }: CoversProps) => { const [currentImageIndex, setCurrentImageIndex] = useState(0); const [previousImageIndex, setPreviousImageIndex] = useState(0); const [topOpacity, setTopOpacity] = useState(0.0); useEffect(() => { if (!slideshow) { return; } const interval = setInterval(() => { setPreviousImageIndex(currentImageIndex); setTopOpacity(0.0); setTimeout(() => { setCurrentImageIndex( (prevIndex) => (prevIndex + 1) % (data?.length ?? 1) ); setTopOpacity(1.0); }, 1500); }, 3000); return () => clearInterval(interval); }, [slideshow, data]); if (!data || data.length < 1) { if (iconEmpty) { return ; } else { return ( ); } } if (slideshow === false || data.length === 1) { const url = DataUrlAccess.getThumbnailUrl(data[0]); return ( ); } const urlCurrent = DataUrlAccess.getThumbnailUrl(data[currentImageIndex]); const urlPrevious = DataUrlAccess.getThumbnailUrl(data[previousImageIndex]); return ( ); };