"use client"; import type { EmblaCarouselType } from "node_modules/embla-carousel/esm/components/EmblaCarousel"; import * as React from "react"; import { UseDotButtonType } from "src/components/ui/custom/carousel-dots"; export const useDotButton = ( emblaApi: EmblaCarouselType | undefined ): UseDotButtonType => { const [selectedIndex, setSelectedIndex] = React.useState(0); const [scrollSnaps, setScrollSnaps] = React.useState([]); const onDotButtonClick = React.useCallback( (index: number) => { if (!emblaApi) { return; } emblaApi.scrollTo(index); }, [emblaApi] ); const onInit = React.useCallback((emblaApi: EmblaCarouselType) => { setScrollSnaps(emblaApi.scrollSnapList()); }, []); const onSelect = React.useCallback((emblaApi: EmblaCarouselType) => { setSelectedIndex(emblaApi.selectedScrollSnap()); }, []); React.useEffect(() => { if (!emblaApi) { return; } onInit(emblaApi); onSelect(emblaApi); emblaApi.on("reInit", onInit).on("reInit", onSelect).on("select", onSelect); }, [emblaApi, onInit, onSelect]); return { selectedIndex, scrollSnaps, onDotButtonClick, }; };