UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

100 lines (99 loc) 2.99 kB
"use client"; import React, { useContext, useEffect, useRef } from 'react'; import clsx from 'clsx'; import { makeUniqueId, extendPropsWithContext, validateDOMAttributes, dispatchCustomElementEvent } from "../../shared/component-helper.js"; import { applySpacing } from "../space/SpacingUtils.js"; import Context from "../../shared/Context.js"; import AccordionGroupContext from "./AccordionProviderContext.js"; import { accordionDefaultProps } from "./types.js"; import withComponentMarkers from "../../shared/helpers/withComponentMarkers.js"; import { jsx as _jsx } from "react/jsx-runtime"; const AccordionGroup = props => { const context = useContext(Context); const id = props.id || makeUniqueId(); const thisInstance = { _id: id, props, context, onChangeHandler }; function onChangeHandler(event) { dispatchCustomElementEvent(thisInstance, 'onChange', { id: event.id, expanded: event.expanded, event }); } const extendedProps = extendPropsWithContext(props, accordionDefaultProps, context.Accordion, context.getTranslation(props)['Accordion']); const { expanded, expandedId, keepInDOM, preventRerender, singleContainer, contentRef, allowCloseAll, rememberState, flushRememberedState, noAnimation, iconSize, disabled, group, iconPosition, onInit, className, id: _id, children, collapseAllHandleRef, expandBehavior, ...restOfExtendedProps } = extendedProps; const collapseAccordionCallbacks = useRef([]); useEffect(() => { if (collapseAllHandleRef) { const mutableCollapseAllHandleRef = collapseAllHandleRef; mutableCollapseAllHandleRef.current = () => { collapseAccordionCallbacks.current.forEach(callback => callback()); }; } }, [collapseAllHandleRef]); const rootProps = applySpacing(extendedProps, { className: clsx('dnb-accordion-group', className, singleContainer && 'dnb-accordion-group--single-container') }); const params = { ...restOfExtendedProps }; validateDOMAttributes(props, params); if (!(extendedProps !== null && extendedProps !== void 0 && extendedProps.group) && props.singleContainer) { extendedProps.group = makeUniqueId(); } const contextForProvider = { ...extendedProps, id, onChange: onChangeHandler, collapseAllHandleRef, collapseAccordionCallbacks, expandBehavior }; return _jsx(AccordionGroupContext, { value: contextForProvider, children: _jsx("div", { ...rootProps, children: _jsx("span", { id: id, className: "dnb-accordion-group__shell", role: "group", ...params, children: _jsx("span", { className: "dnb-accordion-group__children", children: children }) }) }) }); }; withComponentMarkers(AccordionGroup, { _supportsSpacingProps: true }); export default AccordionGroup; //# sourceMappingURL=AccordionGroup.js.map