import { Context, createContext, useContext } from "react"; import type { AccordionGroupOwnProps, AccordionItemOwnProps, AccordionDisclosureProps, } from "./types"; /** * Accordion.Group context * ============================================================================= */ type AccordionGroupContextType = { totalItems?: number; currentValue?: string; setCurrentValue?(value: string): void; } & AccordionGroupOwnProps; const defaultGroupContext: AccordionGroupContextType = { defaultValue: undefined, disableAnimation: false, totalItems: 0, currentValue: undefined, setCurrentValue: () => {}, allowMultiple: true, allowToggle: true, }; export const AccordionGroupContext: Context = createContext( defaultGroupContext, ); export function useAccordionGroupContext() { const context = useContext( AccordionGroupContext, ) || { ...defaultGroupContext, }; return context; } /** * Accordion.Item context * ============================================================================= */ type AccordionItemContextType = AccordionItemOwnProps & AccordionDisclosureProps & { buttonId: string; contentId: string; currentValue?: string; setCurrentValue?(value: string): void; allowMultiple?: boolean; allowToggle?: boolean; }; const defaultContext: AccordionItemContextType = { defaultIsOpen: false, isOpen: false, onToggle: () => {}, onClose: () => {}, onOpen: () => {}, buttonId: "accordion-0-button", contentId: "accordion-0-content", currentValue: undefined, setCurrentValue: () => {}, allowMultiple: true, allowToggle: true, }; export const AccordionItemContext: Context = createContext( defaultContext, ); export function useAccordionItemContext() { const context = useContext(AccordionItemContext) || { ...defaultContext, }; return context; }