UNPKG

@coreui/react-pro

Version:

UI Components Library for React.js

47 lines (44 loc) 1.77 kB
import { __rest } from '../../node_modules/tslib/tslib.es6.js'; import React, { forwardRef, useRef, useContext, useEffect } from 'react'; import PropTypes from 'prop-types'; import classNames from '../../_virtual/index.js'; import { CLink } from '../link/CLink.js'; import { CNavGroupContext } from './CNavGroupContext.js'; import '@popperjs/core'; import { useForkedRef } from '../../hooks/useForkedRef.js'; const CNavLink = forwardRef((_a, ref) => { var _b; var { children, className } = _a, rest = __rest(_a, ["children", "className"]); const navLinkRef = useRef(null); const forkedRef = useForkedRef(ref, navLinkRef); const openBranch = (_b = useContext(CNavGroupContext)) === null || _b === void 0 ? void 0 : _b.openBranch; 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, Object.assign({ className: classNames('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'; export { CNavLink }; //# sourceMappingURL=CNavLink.js.map