@coreui/react
Version:
UI Components Library for React.js
36 lines (33 loc) • 2.01 kB
JavaScript
import { __rest, __assign } from '../../node_modules/tslib/tslib.es6.js';
import React, { forwardRef, useContext } from 'react';
import PropTypes from 'prop-types';
import classNames from '../../_virtual/index.js';
import { CConditionalPortal } from '../conditional-portal/CConditionalPortal.js';
import { CDropdownContext } from './CDropdownContext.js';
import { useForkedRef } from '../../hooks/useForkedRef.js';
import '@popperjs/core';
import { getAlignmentClassNames } from './utils.js';
var CDropdownMenu = forwardRef(function (_a, ref) {
var children = _a.children, _b = _a.as, Component = _b === void 0 ? 'ul' : _b, className = _a.className, rest = __rest(_a, ["children", "as", "className"]);
var _c = useContext(CDropdownContext), alignment = _c.alignment, container = _c.container, dark = _c.dark, dropdownMenuRef = _c.dropdownMenuRef, popper = _c.popper, portal = _c.portal, visible = _c.visible;
var forkedRef = useForkedRef(ref, dropdownMenuRef);
return (React.createElement(CConditionalPortal, { container: container, portal: portal !== null && portal !== void 0 ? portal : false },
React.createElement(Component, __assign({ className: classNames('dropdown-menu', {
show: visible,
}, alignment && getAlignmentClassNames(alignment), className), ref: forkedRef, role: "menu" }, (!popper && { 'data-coreui-popper': 'static' }), (dark && { 'data-coreui-theme': 'dark' }), rest), Component === 'ul'
? React.Children.map(children, function (child, index) {
if (React.isValidElement(child)) {
return React.createElement("li", { key: index }, React.cloneElement(child));
}
return;
})
: children)));
});
CDropdownMenu.propTypes = {
as: PropTypes.elementType,
children: PropTypes.node,
className: PropTypes.string,
};
CDropdownMenu.displayName = 'CDropdownMenu';
export { CDropdownMenu };
//# sourceMappingURL=CDropdownMenu.js.map