import React, { createContext, useContext, useEffect, useRef, useId } from 'react'; import WrapperTag from '../../common/WrapperTag'; import DSAccordion from '@scottish-government/design-system/dist/scripts/components/accordion/accordion'; import { AccordionItemProps, AccordionProps } from './types'; import clsx from 'clsx'; let accordionItemCounter = 0; const AccordionHeadingLevelContext = createContext('h3'); const AccordionItem = ({ children, className, id: rawId, isOpen = false, heading, title, ...props }: AccordionItemProps) => { accordionItemCounter = accordionItemCounter + 1; const processedId = rawId || `accordion-item-${useId()}`; const headingLevel = useContext(AccordionHeadingLevelContext); if (title) { console.warn( 'Warning: Using the `title` prop for heading text on an Accordion.Item is deprecated and will be removed in a future release. Please use the `heading` prop instead.' ); heading = heading || title; } return (
{heading}
{children}
); }; const Accordion = ({ children, className, headingLevel = 'h3', hideOpenAll, isSmall, ...props }: AccordionProps) => { const ref = useRef(null); useEffect(() => { /* istanbul ignore else */ if (ref.current) { new DSAccordion(ref.current).init(); } }, [ref]); if (!children) { hideOpenAll = true; } return (
{ !hideOpenAll && ( )} {children}
); }; Accordion.displayName = 'Accordion'; AccordionItem.displayName = 'Accordion.Item'; Accordion.Item = AccordionItem; export default Accordion;