1 | import React, { useState } from 'react';
|
2 | import PropTypes from 'prop-types';
|
3 | import { tagPropType } from './utils';
|
4 | import Accordion from './Accordion';
|
5 |
|
6 | const 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 |
|
20 | function 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 |
|
41 | UncontrolledAccordion.propTypes = propTypes;
|
42 |
|
43 | export default UncontrolledAccordion;
|