1 | import React, { useContext } from 'react';
|
2 | import PropTypes from 'prop-types';
|
3 | import classNames from 'classnames';
|
4 | import { mapToCssModules, tagPropType } from './utils';
|
5 | import Collapse from './Collapse';
|
6 | import { AccordionContext } from './AccordionContext';
|
7 |
|
8 | const propTypes = {
|
9 |
|
10 | accordionId: PropTypes.string.isRequired,
|
11 |
|
12 | className: PropTypes.string,
|
13 | children: PropTypes.node,
|
14 |
|
15 | cssModule: PropTypes.object,
|
16 |
|
17 | innerRef: PropTypes.oneOfType([
|
18 | PropTypes.object,
|
19 | PropTypes.string,
|
20 | PropTypes.func,
|
21 | ]),
|
22 |
|
23 | tag: tagPropType,
|
24 | };
|
25 |
|
26 | function AccordionBody(props) {
|
27 | const {
|
28 | className,
|
29 | cssModule,
|
30 | tag: Tag = 'div',
|
31 | innerRef,
|
32 | children,
|
33 | accordionId,
|
34 | ...attributes
|
35 | } = props;
|
36 |
|
37 | const { open } = useContext(AccordionContext);
|
38 |
|
39 | const classes = mapToCssModules(
|
40 | classNames(className, 'accordion-collapse'),
|
41 | cssModule,
|
42 | );
|
43 |
|
44 | return (
|
45 | <Collapse
|
46 | {...attributes}
|
47 | className={classes}
|
48 | ref={innerRef}
|
49 | isOpen={
|
50 | Array.isArray(open) ? open.includes(accordionId) : open === accordionId
|
51 | }
|
52 | >
|
53 | <Tag className="accordion-body">{children}</Tag>
|
54 | </Collapse>
|
55 | );
|
56 | }
|
57 |
|
58 | AccordionBody.propTypes = propTypes;
|
59 |
|
60 | export default AccordionBody;
|