@kietpt2003/react-native-core-ui
Version:
React Native Core UI components by KietPT
33 lines (32 loc) • 1.16 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import React from 'react';
const AccordionGroupContext = React.createContext(null);
const AccordionGroup = ({ children, type = 'single', defaultOpenIds = [], }) => {
const [openIds, setOpenIds] = React.useState(() => new Set(defaultOpenIds));
const toggle = React.useCallback((id) => {
setOpenIds(prev => {
const next = new Set(prev);
if (type === 'single') {
next.clear();
if (!prev.has(id))
next.add(id);
}
else {
next.has(id) ? next.delete(id) : next.add(id);
}
return next;
});
}, [type]);
return (_jsx(AccordionGroupContext.Provider, { value: { openIds, toggle }, children: children }));
};
export const useAccordionGroup = () => {
const ctx = React.useContext(AccordionGroupContext);
if (!ctx) {
throw new Error('Accordion must be used inside AccordionGroup');
}
return ctx;
};
export const useOptionalAccordionGroup = () => {
return React.useContext(AccordionGroupContext);
};
export default AccordionGroup;