UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

178 lines (172 loc) β€’ 6.8 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _RightOutlined = _interopRequireDefault(require("@ant-design/icons/RightOutlined")); var _classnames = _interopRequireDefault(require("classnames")); var _rcDropdown = _interopRequireDefault(require("rc-dropdown")); var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent")); var _useMergedState = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState")); var React = _interopRequireWildcard(require("react")); var _menu = _interopRequireDefault(require("../menu")); var _configProvider = require("../config-provider"); var _OverrideContext = require("../menu/OverrideContext"); var _placements = _interopRequireDefault(require("../_util/placements")); var _reactNode = require("../_util/reactNode"); var _type = require("../_util/type"); var _warning = _interopRequireDefault(require("../_util/warning")); var _dropdownButton = _interopRequireDefault(require("./dropdown-button")); const Placements = (0, _type.tuple)('topLeft', 'topCenter', 'topRight', 'bottomLeft', 'bottomCenter', 'bottomRight', 'top', 'bottom'); const Dropdown = props => { const { getPopupContainer: getContextPopupContainer, getPrefixCls, direction } = React.useContext(_configProvider.ConfigContext); // Warning for deprecated usage if (process.env.NODE_ENV !== 'production') { [['visible', 'open'], ['onVisibleChange', 'onOpenChange']].forEach(([deprecatedName, newName]) => { (0, _warning.default)(!(deprecatedName in props), 'Dropdown', `\`${deprecatedName}\` is deprecated which will be removed in next major version, please use \`${newName}\` instead.`); }); (0, _warning.default)(!('overlay' in props), 'Dropdown', '`overlay` is deprecated. Please use `menu` instead.'); } const getTransitionName = () => { const rootPrefixCls = getPrefixCls(); const { placement = '', transitionName } = props; if (transitionName !== undefined) { return transitionName; } if (placement.includes('top')) { return `${rootPrefixCls}-slide-down`; } return `${rootPrefixCls}-slide-up`; }; const getPlacement = () => { const { placement } = props; if (!placement) { return direction === 'rtl' ? 'bottomRight' : 'bottomLeft'; } if (placement.includes('Center')) { const newPlacement = placement.slice(0, placement.indexOf('Center')); (0, _warning.default)(!placement.includes('Center'), 'Dropdown', `You are using '${placement}' placement in Dropdown, which is deprecated. Try to use '${newPlacement}' instead.`); return newPlacement; } return placement; }; const { menu, arrow, prefixCls: customizePrefixCls, children, trigger, disabled, dropdownRender, getPopupContainer, overlayClassName, visible, open, onVisibleChange, onOpenChange, mouseEnterDelay = 0.15, mouseLeaveDelay = 0.1 } = props; const prefixCls = getPrefixCls('dropdown', customizePrefixCls); const child = React.Children.only(children); const dropdownTrigger = (0, _reactNode.cloneElement)(child, { className: (0, _classnames.default)(`${prefixCls}-trigger`, { [`${prefixCls}-rtl`]: direction === 'rtl' }, child.props.className), disabled }); const triggerActions = disabled ? [] : trigger; let alignPoint; if (triggerActions && triggerActions.includes('contextMenu')) { alignPoint = true; } // =========================== Visible ============================ const [mergedOpen, setOpen] = (0, _useMergedState.default)(false, { value: open !== undefined ? open : visible }); const onInnerOpenChange = (0, _useEvent.default)(nextOpen => { onVisibleChange?.(nextOpen); onOpenChange?.(nextOpen); setOpen(nextOpen); }); // =========================== Overlay ============================ const overlayClassNameCustomized = (0, _classnames.default)(overlayClassName, { [`${prefixCls}-rtl`]: direction === 'rtl' }); const builtinPlacements = (0, _placements.default)({ arrowPointAtCenter: typeof arrow === 'object' && arrow.pointAtCenter, autoAdjustOverflow: true }); const onMenuClick = React.useCallback(() => { setOpen(false); }, []); const renderOverlay = () => { // rc-dropdown already can process the function of overlay, but we have check logic here. // So we need render the element to check and pass back to rc-dropdown. const { overlay } = props; let overlayNode; if (menu?.items) { overlayNode = /*#__PURE__*/React.createElement(_menu.default, menu); } else if (typeof overlay === 'function') { overlayNode = overlay(); } else { overlayNode = overlay; } if (dropdownRender) { overlayNode = dropdownRender(overlayNode); } overlayNode = React.Children.only(typeof overlayNode === 'string' ? /*#__PURE__*/React.createElement("span", null, overlayNode) : overlayNode); return /*#__PURE__*/React.createElement(_OverrideContext.OverrideProvider, { prefixCls: `${prefixCls}-menu`, expandIcon: /*#__PURE__*/React.createElement("span", { className: `${prefixCls}-menu-submenu-arrow` }, /*#__PURE__*/React.createElement(_RightOutlined.default, { className: `${prefixCls}-menu-submenu-arrow-icon` })), mode: "vertical", selectable: false, onClick: onMenuClick, validator: ({ mode }) => { // Warning if use other mode (0, _warning.default)(!mode || mode === 'vertical', 'Dropdown', `mode="${mode}" is not supported for Dropdown's Menu.`); } }, overlayNode); }; // ============================ Render ============================ return /*#__PURE__*/React.createElement(_rcDropdown.default, (0, _extends2.default)({ alignPoint: alignPoint }, props, { mouseEnterDelay: mouseEnterDelay, mouseLeaveDelay: mouseLeaveDelay, visible: mergedOpen, builtinPlacements: builtinPlacements, arrow: !!arrow, overlayClassName: overlayClassNameCustomized, prefixCls: prefixCls, getPopupContainer: getPopupContainer || getContextPopupContainer, transitionName: getTransitionName(), trigger: triggerActions, overlay: renderOverlay, placement: getPlacement(), onVisibleChange: onInnerOpenChange }), dropdownTrigger); }; Dropdown.Button = _dropdownButton.default; var _default = Dropdown; exports.default = _default;