import React, { useEffect, useState } from "react" import Image from "./Image" interface DataImage { src: string } interface Props { images: Array<DataImage> delay?: number } const Carousel = (props: Props) => { const { images, delay } = props const [index, setIndex] = useState(1) const nbr_image: number = images.length const updateIndex = (newIndex: number) => { if (newIndex < 0) { newIndex = nbr_image - 1 } else if (newIndex >= nbr_image) { newIndex = 0 } setIndex(newIndex) } useEffect(() => { const interval = setInterval(() => { if (delay != 0) { updateIndex(index + 1) } }, delay) return () => { if (interval) { clearInterval(interval) } } }) return ( <div className={`flex items-center `}> <div className="relative"> <div className="btn-carousel absolute z-50 left-3 -mt-5"> <button onClick={() => updateIndex(index - 1)} className={`bg-neutral rounded-3xl w-10 h-10 text-base-100`} > ❮ </button> </div> </div> <div className={`inline-block align-middle carousel w-full truncate max-h-80`} > <div className={`whitespace-nowrap w-full `} style={{ transform: `translateX(-${index * 100}%)`, transition: "transform 0.3s", }} > {images.map((item: any, key: any) => { return ( <div className={`carousel-item relative w-full inline-block mr-0`} key={key} > <Image image={item.src} className="w-full" /> </div> ) })} </div> </div> <div className="relative"> <div className="btn-carousel absolute z-50 right-3 -mt-5"> <button onClick={() => updateIndex(index + 1)} className={`bg-neutral rounded-3xl w-10 h-10 text-base-100`} > ❯ </button> </div> </div> </div> ) } export default Carousel