import clsx from "clsx"; import { useEffect, useState } from "react"; interface Props { items: { type: string; title: string; src: string }[]; size?: "sm" | "md" | "lg"; } export default function Carousel({ items, size = "lg" }: Props) { const [currentIndex, setCurrentIndex] = useState(0); const [currentItem, setCurrentItem] = useState<{ type: string; title: string; src: string } | undefined>(undefined); const [currentSrc, setCurrentSrc] = useState(undefined); useEffect(() => { if (items.length > currentIndex) { setCurrentItem(items[currentIndex]); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [items, currentIndex]); useEffect(() => { setCurrentSrc(currentItem?.src); }, [currentItem]); function nextImage() { if (items.length > currentIndex + 1) { setCurrentIndex(currentIndex + 1); } else { setCurrentIndex(0); } } function previousImage() { if (currentIndex === 0) { setCurrentIndex(items.length - 1); } else { setCurrentIndex(currentIndex - 1); } } return (
{/*

{currentItem?.group}

*/}
{currentIndex + 1}/{items.length} → {currentItem?.title}
{currentItem?.type === "image" && ( {currentItem?.title} )} {currentItem?.type === "video" && ( )}
); }