UNPKG

@engie-group/fluid-design-system-react

Version:

Fluid Design System React

36 lines (33 loc) 1.6 kB
import { jsx } from 'react/jsx-runtime'; import React__default, { useContext, useEffect, useRef } from 'react'; import { Utils } from '../../utils/util.js'; import { NJAccordionContext } from './NJAccordionContext.js'; const NJAccordionItem = React__default.forwardRef(({ children, scale, hasLeadingToggleIcon, hasAlternativeToggleIcon, icon, className, ...props }, forwardedRef) => { const { setHasAlternativeToggleIcon, setCustomIcon } = useContext(NJAccordionContext); useEffect(() => { setHasAlternativeToggleIcon?.(hasAlternativeToggleIcon); }, [hasAlternativeToggleIcon]); useEffect(() => { setCustomIcon?.(icon); }, [icon]); const ref = useRef(null); const newRef = Utils.mergeRefs([forwardedRef, ref]); const onToggle = (e) => { if (e.nativeEvent.newState === 'open' || e.currentTarget.open) { const allItems = document.querySelectorAll(`details.nj-accordion-item[name=${props.name}]`); allItems.forEach((item) => { if (item !== ref.current) { item.removeAttribute('open'); } }); } props.onToggle?.(e); }; const classNames = Utils.classNames('nj-accordion-item', { [`nj-accordion-item--${scale}`]: !!scale && scale !== 'md', [`nj-accordion-item--leading-toggle`]: hasLeadingToggleIcon }, className); return (jsx("details", { ref: newRef, ...props, onToggle: onToggle, className: classNames, children: children })); }); NJAccordionItem.displayName = 'NJAccordionItem'; export { NJAccordionItem };