import { useEffect, useRef, useCallback } from "react" type ElementRef = T | null type ElementRefs = ElementRef[] interface ActiveItemScrollOptions { activeIndex: number | null } export function useActiveItemScroll(options: ActiveItemScrollOptions) { const { activeIndex } = options const elementRefs = useRef>([]) const scrollActiveElementIntoView = (index: number) => { const activeElement = elementRefs.current[index] activeElement?.focus() // activeElement?.scrollIntoView({ block: "nearest" }) } useEffect(() => { if (activeIndex !== null) { scrollActiveElementIntoView(activeIndex) } }, [activeIndex, scrollActiveElementIntoView]) const setElementRef = useCallback((element: ElementRef, index: number) => { elementRefs.current[index] = element }, []) return { setElementRef, scrollActiveElementIntoView } }