@coreui/react-pro
Version:
UI Components Library for React.js
49 lines (45 loc) • 1.83 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 CLink = require('../link/CLink.js');
var CNavGroupContext = require('./CNavGroupContext.js');
require('@popperjs/core');
var useForkedRef = require('../../hooks/useForkedRef.js');
const CNavLink = React.forwardRef((_a, ref) => {
var _b;
var { children, className } = _a, rest = tslib_es6.__rest(_a, ["children", "className"]);
const navLinkRef = React.useRef(null);
const forkedRef = useForkedRef.useForkedRef(ref, navLinkRef);
const openBranch = (_b = React.useContext(CNavGroupContext.CNavGroupContext)) === null || _b === void 0 ? void 0 : _b.openBranch;
React.useEffect(() => {
const element = navLinkRef.current;
if (!element || !openBranch) {
return;
}
let wasActive = false;
const sync = () => {
const active = element.classList.contains('active');
if (active && !wasActive) {
openBranch();
}
wasActive = active;
};
sync();
const observer = new MutationObserver(sync);
observer.observe(element, { attributes: true, attributeFilter: ['class'] });
return () => observer.disconnect();
}, [openBranch]);
return (React.createElement(CLink.CLink, Object.assign({ className: index.default('nav-link', className) }, rest, { ref: forkedRef }), children));
});
CNavLink.propTypes = {
active: PropTypes.bool,
as: PropTypes.elementType,
children: PropTypes.node,
className: PropTypes.string,
disabled: PropTypes.bool,
};
CNavLink.displayName = 'CNavLink';
exports.CNavLink = CNavLink;
//# sourceMappingURL=CNavLink.js.map