import { useState, useCallback, useEffect } from 'react'; import useEmblaCarousel from 'embla-carousel-react'; import { ChevronLeft, ChevronRight } from 'lucide-react'; import type { ListingDetailPhoto } from '@/types'; interface PhotoCarouselProps { photos: ListingDetailPhoto[]; } export function PhotoCarousel({ photos }: PhotoCarouselProps) { const [emblaRef, emblaApi] = useEmblaCarousel({ loop: true }); const [selectedIndex, setSelectedIndex] = useState(0); const onSelect = useCallback(() => { if (!emblaApi) return; setSelectedIndex(emblaApi.selectedScrollSnap()); }, [emblaApi]); useEffect(() => { if (!emblaApi) return; emblaApi.on('select', onSelect); return () => { emblaApi.off('select', onSelect); }; }, [emblaApi, onSelect]); if (photos.length === 0) { return (
No photos available
); } return (
{photos.map((photo, i) => (
{photo.caption
))}
{/* Prev/Next arrows */} {photos.length > 1 && ( <> )} {/* Counter */}
{selectedIndex + 1} / {photos.length}
{/* Dots */} {photos.length > 1 && photos.length <= 20 && (
{photos.map((_, i) => (
)}
); }