@coreui/react
Version:
UI Components Library for React.js
35 lines (32 loc) • 1.82 kB
JavaScript
import { __rest, __assign } from '../../node_modules/tslib/tslib.es6.js';
import React, { forwardRef, useId, useRef, useContext, useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import classNames from '../../_virtual/index.js';
import { CAccordionContext } from './CAccordionContext.js';
import { CAccordionItemContext } from './CAccordionItemContext.js';
var CAccordionItem = forwardRef(function (_a, ref) {
var children = _a.children, className = _a.className, id = _a.id, itemKey = _a.itemKey, rest = __rest(_a, ["children", "className", "id", "itemKey"]);
var uniqueId = useId();
var _id = id !== null && id !== void 0 ? id : uniqueId;
var _itemKey = useRef(itemKey !== null && itemKey !== void 0 ? itemKey : _id);
var _b = useContext(CAccordionContext), _activeItemKey = _b._activeItemKey, alwaysOpen = _b.alwaysOpen, setActiveKey = _b.setActiveKey;
var _c = useState(Boolean(_activeItemKey === _itemKey.current)), visible = _c[0], setVisible = _c[1];
useEffect(function () {
if (!alwaysOpen && visible) {
setActiveKey(_itemKey.current);
}
}, [visible]);
useEffect(function () {
setVisible(Boolean(_activeItemKey === _itemKey.current));
}, [_activeItemKey]);
return (React.createElement("div", __assign({ className: classNames('accordion-item', className) }, rest, { ref: ref }),
React.createElement(CAccordionItemContext.Provider, { value: { id: _id, setVisible: setVisible, visible: visible } }, children)));
});
CAccordionItem.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
itemKey: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
};
CAccordionItem.displayName = 'CAccordionItem';
export { CAccordionItem };
//# sourceMappingURL=CAccordionItem.js.map