UNPKG

@szhsin/react-accordion

Version:

The complete accordion solution for React.

34 lines (31 loc) 889 B
import { useRef, useEffect, useCallback } from 'react'; import { useAccordionContext, getItemState } from './useAccordionContext.mjs'; const useAccordionItemEffect = ({ itemKey, initialEntered, disabled } = {}) => { const itemRef = useRef(null); const context = useAccordionContext(); const key = itemKey != null ? itemKey : itemRef.current; const state = getItemState(context, key, initialEntered); const { setItem, deleteItem, toggle } = context; useEffect(() => { if (disabled) return; const key = itemKey != null ? itemKey : itemRef.current; setItem(key, { initialEntered }); return () => void deleteItem(key); }, [setItem, deleteItem, itemKey, initialEntered, disabled]); return { itemRef, state, toggle: useCallback(toEnter => toggle(key, toEnter), [toggle, key]) }; }; export { useAccordionItemEffect };