@coreui/react-pro
Version:
UI Components Library for React.js
55 lines (51 loc) • 2.03 kB
JavaScript
;
var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
var React = require('react');
var PropTypes = require('prop-types');
var index = require('../../_virtual/index.js');
var CSidebarNavContext = require('./CSidebarNavContext.js');
const isNavElement = (child) => {
if (!React.isValidElement(child))
return false;
const type = child.type;
return (type.displayName === 'CNavGroup' ||
type.displayName === 'CNavLink' ||
type.displayName === 'CNavItem');
};
const recursiveClone = (children, id, updateId) => {
return React.Children.map(children, (child, index) => {
if (!isNavElement(child)) {
return child;
}
const _id = id ? (updateId ? `${id}.${index}` : `${id}`) : `${index}`;
if (child.props.children) {
const type = child.type;
const shouldUpdateId = type.displayName !== 'CNavItem';
return React.cloneElement(child, {
idx: _id,
children: recursiveClone(child.props.children, _id, shouldUpdateId),
});
}
return React.cloneElement(child, {
idx: _id,
});
});
};
const CSidebarNav = React.forwardRef((_a, ref) => {
var { children, as: Component = 'ul', className } = _a, rest = tslib_es6.__rest(_a, ["children", "as", "className"]);
const [visibleGroup, setVisibleGroup] = React.useState('');
const CNavContextValues = {
visibleGroup,
setVisibleGroup,
};
return (React.createElement(CSidebarNavContext.CSidebarNavContext.Provider, { value: CNavContextValues },
React.createElement(Component, Object.assign({ className: index.default('sidebar-nav', className), ref: ref }, rest), recursiveClone(children))));
});
CSidebarNav.propTypes = {
as: PropTypes.elementType,
children: PropTypes.node,
className: PropTypes.string,
};
CSidebarNav.displayName = 'CSidebarNav';
exports.CSidebarNav = CSidebarNav;
//# sourceMappingURL=CSidebarNav.js.map