mediahub-fe/app/[locale]/(protected)/components/carousel/custom-carousel.tsx

58 lines
1.6 KiB
TypeScript

"use client"
import { Card, CardContent } from "@/components/ui/card"
import {
Carousel,
CarouselApi,
CarouselContent,
CarouselItem,
CarouselNext,
CarouselPrevious,
} from "@/components/ui/carousel"
import { useEffect, useState } from "react"
const CustomCarousel = () => {
const [api, setApi] = useState<CarouselApi | undefined>(undefined)
const [current, setCurrent] = useState<number>(0)
const [count, setCount] = useState<number>(0)
useEffect(() => {
if (!api) {
return
}
setCount(api.scrollSnapList().length)
setCurrent(api.selectedScrollSnap() + 1)
api.on("select", () => {
setCurrent(api.selectedScrollSnap() + 1)
})
}, [api])
return (
<div className="flex flex-col items-center gap-3">
<Carousel setApi={setApi} className="w-full max-w-xs">
<CarouselContent>
{Array.from({ length: 5 }).map((_, index) => (
<CarouselItem key={index}>
<div className="p-1">
<Card className="dark:border-default-300">
<CardContent className="flex aspect-square items-center justify-center p-6">
<span className="text-4xl font-semibold">{index + 1}</span>
</CardContent>
</Card>
</div>
</CarouselItem>
))}
</CarouselContent>
<CarouselPrevious />
<CarouselNext />
</Carousel>
<div className="py-2 text-center font-medium text-sm text-muted-foreground">
Slide <strong>{current}</strong> of <strong>{count}</strong>
</div>
</div>
)
}
export default CustomCarousel