import * as React from "react"; type Props = { /** * Function to execute on selection change. */ onAccordionPress?: (expandedId: string | number) => void; /** * Id of the currently expanded list accordion */ expandedId?: string | number; /** * React elements containing list accordions */ children: React.ReactNode; }; export type ListAccordionGroupContextType = { expandedId: string | number | undefined; onAccordionPress: (expandedId: string | number) => void; } | null; export const ListAccordionGroupContext = React.createContext< ListAccordionGroupContextType >(null); /** * List.AccordionGroup allows to control a group of List Accordions. `id` prop for List.Accordion is required in order for group to work. * List.AccordionGroup can be a controlled or uncontrolled component. The example shows the uncontrolled version. * At most one Accordion can be expanded at a given time. * *
* *
* * ## Usage * ```js * import * as React from 'react'; * import { View, Text } from 'react-native'; * import { ListItem } from 'react-native-simple-elements/components/List'; * * const MyComponent = () => ( * * * * * * * * * * List.Accordion can be wrapped because implementation uses React.Context. * * * * * * * ); * * export default MyComponent; *``` */ const ListAccordionGroup = ({ expandedId: expandedIdProp, onAccordionPress, children, }: Props) => { const [expandedId, setExpandedId] = React.useState< string | number | undefined >(undefined); const onAccordionPressDefault = (newExpandedId: string | number) => { setExpandedId((currentExpandedId) => currentExpandedId === newExpandedId ? undefined : newExpandedId ); }; return ( {children} ); }; ListAccordionGroup.displayName = "List.AccordionGroup"; export default ListAccordionGroup;