UNPKG

1.11 kBJavaScriptView Raw
1import React, { useState } from 'react';
2import PropTypes from 'prop-types';
3import { tagPropType } from './utils';
4import Accordion from './Accordion';
5
6const propTypes = {
7 tag: tagPropType,
8 className: PropTypes.string,
9 cssModule: PropTypes.object,
10 innerRef: PropTypes.oneOfType([
11 PropTypes.object,
12 PropTypes.string,
13 PropTypes.func,
14 ]),
15 children: PropTypes.node,
16 defaultOpen: PropTypes.oneOfType([PropTypes.array, PropTypes.string]),
17 stayOpen: PropTypes.bool,
18};
19
20function UncontrolledAccordion({ defaultOpen, stayOpen, ...props }) {
21 const [open, setOpen] = useState(defaultOpen || (stayOpen ? [] : undefined));
22 const toggle = (id) => {
23 if (stayOpen) {
24 if (open.includes(id)) {
25 setOpen(open.filter((accordionId) => accordionId !== id));
26 } else {
27 setOpen([...open, id]);
28 }
29 } else if (open === id) {
30 setOpen('');
31 } else {
32 setOpen(id);
33 }
34 };
35
36 return (
37 <Accordion {...{ tag: 'div', ...props }} open={open} toggle={toggle} />
38 );
39}
40
41UncontrolledAccordion.propTypes = propTypes;
42
43export default UncontrolledAccordion;