1 | import _extends from "@babel/runtime/helpers/esm/extends";
|
2 | import _typeof from "@babel/runtime/helpers/esm/typeof";
|
3 | import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
4 | import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
5 | import RightOutlined from "@ant-design/icons/es/icons/RightOutlined";
|
6 | import classNames from 'classnames';
|
7 | import RcDropdown from 'rc-dropdown';
|
8 | import useEvent from "rc-util/es/hooks/useEvent";
|
9 | import useMergedState from "rc-util/es/hooks/useMergedState";
|
10 | import * as React from 'react';
|
11 | import Menu from '../menu';
|
12 | import { ConfigContext } from '../config-provider';
|
13 | import { OverrideProvider } from '../menu/OverrideContext';
|
14 | import genPurePanel from '../_util/PurePanel';
|
15 | import getPlacements from '../_util/placements';
|
16 | import { cloneElement } from '../_util/reactNode';
|
17 | import { tuple } from '../_util/type';
|
18 | import warning from '../_util/warning';
|
19 | import DropdownButton from './dropdown-button';
|
20 | import useStyle from './style';
|
21 | var Placements = tuple('topLeft', 'topCenter', 'topRight', 'bottomLeft', 'bottomCenter', 'bottomRight', 'top', 'bottom');
|
22 | var Dropdown = function Dropdown(props) {
|
23 | var _React$useContext = React.useContext(ConfigContext),
|
24 | getContextPopupContainer = _React$useContext.getPopupContainer,
|
25 | getPrefixCls = _React$useContext.getPrefixCls,
|
26 | direction = _React$useContext.direction;
|
27 |
|
28 | if (process.env.NODE_ENV !== 'production') {
|
29 | [['visible', 'open'], ['onVisibleChange', 'onOpenChange']].forEach(function (_ref) {
|
30 | var _ref2 = _slicedToArray(_ref, 2),
|
31 | deprecatedName = _ref2[0],
|
32 | newName = _ref2[1];
|
33 | process.env.NODE_ENV !== "production" ? warning(!(deprecatedName in props), 'Dropdown', "`" + deprecatedName + "` is deprecated which will be removed in next major version, please use `" + newName + "` instead.") : void 0;
|
34 | });
|
35 | process.env.NODE_ENV !== "production" ? warning(!('overlay' in props), 'Dropdown', '`overlay` is deprecated. Please use `menu` instead.') : void 0;
|
36 | }
|
37 | var getTransitionName = function getTransitionName() {
|
38 | var rootPrefixCls = getPrefixCls();
|
39 | var _props$placement = props.placement,
|
40 | placement = _props$placement === void 0 ? '' : _props$placement,
|
41 | transitionName = props.transitionName;
|
42 | if (transitionName !== undefined) {
|
43 | return transitionName;
|
44 | }
|
45 | if (placement.includes('top')) {
|
46 | return rootPrefixCls + "-slide-down";
|
47 | }
|
48 | return rootPrefixCls + "-slide-up";
|
49 | };
|
50 | var getPlacement = function getPlacement() {
|
51 | var placement = props.placement;
|
52 | if (!placement) {
|
53 | return direction === 'rtl' ? 'bottomRight' : 'bottomLeft';
|
54 | }
|
55 | if (placement.includes('Center')) {
|
56 | var newPlacement = placement.slice(0, placement.indexOf('Center'));
|
57 | process.env.NODE_ENV !== "production" ? warning(!placement.includes('Center'), 'Dropdown', "You are using '" + placement + "' placement in Dropdown, which is deprecated. Try to use '" + newPlacement + "' instead.") : void 0;
|
58 | return newPlacement;
|
59 | }
|
60 | return placement;
|
61 | };
|
62 | var menu = props.menu,
|
63 | arrow = props.arrow,
|
64 | customizePrefixCls = props.prefixCls,
|
65 | children = props.children,
|
66 | trigger = props.trigger,
|
67 | disabled = props.disabled,
|
68 | dropdownRender = props.dropdownRender,
|
69 | getPopupContainer = props.getPopupContainer,
|
70 | overlayClassName = props.overlayClassName,
|
71 | open = props.open,
|
72 | onOpenChange = props.onOpenChange,
|
73 | visible = props.visible,
|
74 | onVisibleChange = props.onVisibleChange,
|
75 | _props$mouseEnterDela = props.mouseEnterDelay,
|
76 | mouseEnterDelay = _props$mouseEnterDela === void 0 ? 0.15 : _props$mouseEnterDela,
|
77 | _props$mouseLeaveDela = props.mouseLeaveDelay,
|
78 | mouseLeaveDelay = _props$mouseLeaveDela === void 0 ? 0.1 : _props$mouseLeaveDela;
|
79 | if (process.env.NODE_ENV !== 'production') {
|
80 | [['visible', 'open'], ['onVisibleChange', 'onOpenChange']].forEach(function (_ref3) {
|
81 | var _ref4 = _slicedToArray(_ref3, 2),
|
82 | deprecatedName = _ref4[0],
|
83 | newName = _ref4[1];
|
84 | process.env.NODE_ENV !== "production" ? warning(!(deprecatedName in props), 'Dropdown', "`" + deprecatedName + "` is deprecated, please use `" + newName + "` instead.") : void 0;
|
85 | });
|
86 | }
|
87 | var prefixCls = getPrefixCls('dropdown', customizePrefixCls);
|
88 | var _useStyle = useStyle(prefixCls),
|
89 | _useStyle2 = _slicedToArray(_useStyle, 2),
|
90 | wrapSSR = _useStyle2[0],
|
91 | hashId = _useStyle2[1];
|
92 | var child = React.Children.only(children);
|
93 | var dropdownTrigger = cloneElement(child, {
|
94 | className: classNames(prefixCls + "-trigger", _defineProperty({}, prefixCls + "-rtl", direction === 'rtl'), child.props.className),
|
95 | disabled: disabled
|
96 | });
|
97 | var triggerActions = disabled ? [] : trigger;
|
98 | var alignPoint;
|
99 | if (triggerActions && triggerActions.includes('contextMenu')) {
|
100 | alignPoint = true;
|
101 | }
|
102 |
|
103 | var _useMergedState = useMergedState(false, {
|
104 | value: open !== null && open !== void 0 ? open : visible
|
105 | }),
|
106 | _useMergedState2 = _slicedToArray(_useMergedState, 2),
|
107 | mergedOpen = _useMergedState2[0],
|
108 | setOpen = _useMergedState2[1];
|
109 | var onInnerOpenChange = useEvent(function (nextOpen) {
|
110 | onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen);
|
111 | onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(nextOpen);
|
112 | setOpen(nextOpen);
|
113 | });
|
114 |
|
115 | var overlayClassNameCustomized = classNames(overlayClassName, hashId, _defineProperty({}, prefixCls + "-rtl", direction === 'rtl'));
|
116 | var builtinPlacements = getPlacements({
|
117 | arrowPointAtCenter: _typeof(arrow) === 'object' && arrow.pointAtCenter,
|
118 | autoAdjustOverflow: true
|
119 | });
|
120 | var onMenuClick = React.useCallback(function () {
|
121 | setOpen(false);
|
122 | }, []);
|
123 | var renderOverlay = function renderOverlay() {
|
124 |
|
125 |
|
126 | var overlay = props.overlay;
|
127 | var overlayNode;
|
128 | if (menu === null || menu === void 0 ? void 0 : menu.items) {
|
129 | overlayNode = React.createElement(Menu, _extends({}, menu));
|
130 | } else if (typeof overlay === 'function') {
|
131 | overlayNode = overlay();
|
132 | } else {
|
133 | overlayNode = overlay;
|
134 | }
|
135 | if (dropdownRender) {
|
136 | overlayNode = dropdownRender(overlayNode);
|
137 | }
|
138 | overlayNode = React.Children.only(typeof overlayNode === 'string' ? React.createElement("span", null, overlayNode) : overlayNode);
|
139 | return React.createElement(OverrideProvider, {
|
140 | prefixCls: prefixCls + "-menu",
|
141 | expandIcon: React.createElement("span", {
|
142 | className: prefixCls + "-menu-submenu-arrow"
|
143 | }, React.createElement(RightOutlined, {
|
144 | className: prefixCls + "-menu-submenu-arrow-icon"
|
145 | })),
|
146 | mode: "vertical",
|
147 | selectable: false,
|
148 | onClick: onMenuClick,
|
149 | validator: function validator(_ref5) {
|
150 | var mode = _ref5.mode;
|
151 |
|
152 | process.env.NODE_ENV !== "production" ? warning(!mode || mode === 'vertical', 'Dropdown', "mode=\"" + mode + "\" is not supported for Dropdown's Menu.") : void 0;
|
153 | }
|
154 | }, overlayNode);
|
155 | };
|
156 |
|
157 | return wrapSSR( React.createElement(RcDropdown, _extends({
|
158 | alignPoint: alignPoint
|
159 | }, props, {
|
160 | mouseEnterDelay: mouseEnterDelay,
|
161 | mouseLeaveDelay: mouseLeaveDelay,
|
162 | visible: mergedOpen,
|
163 | builtinPlacements: builtinPlacements,
|
164 | arrow: !!arrow,
|
165 | overlayClassName: overlayClassNameCustomized,
|
166 | prefixCls: prefixCls,
|
167 | getPopupContainer: getPopupContainer || getContextPopupContainer,
|
168 | transitionName: getTransitionName(),
|
169 | trigger: triggerActions,
|
170 | overlay: renderOverlay,
|
171 | placement: getPlacement(),
|
172 | onVisibleChange: onInnerOpenChange
|
173 | }), dropdownTrigger));
|
174 | };
|
175 | Dropdown.Button = DropdownButton;
|
176 |
|
177 | var PurePanel = genPurePanel(Dropdown, 'dropdown', function (prefixCls) {
|
178 | return prefixCls;
|
179 | });
|
180 |
|
181 | var WrapPurePanel = function WrapPurePanel(props) {
|
182 | return React.createElement(PurePanel, _extends({}, props), React.createElement("span", null));
|
183 | };
|
184 | Dropdown._InternalPanelDoNotUseOrYouWillBeFired = WrapPurePanel;
|
185 | export default Dropdown; |
\ | No newline at end of file |