1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.default = undefined;
|
5 |
|
6 | var _extends2 = require('babel-runtime/helpers/extends');
|
7 |
|
8 | var _extends3 = _interopRequireDefault(_extends2);
|
9 |
|
10 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
11 |
|
12 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
13 |
|
14 | var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
15 |
|
16 | var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
17 |
|
18 | var _inherits2 = require('babel-runtime/helpers/inherits');
|
19 |
|
20 | var _inherits3 = _interopRequireDefault(_inherits2);
|
21 |
|
22 | var _class, _temp;
|
23 |
|
24 | var _react = require('react');
|
25 |
|
26 | var _react2 = _interopRequireDefault(_react);
|
27 |
|
28 | var _propTypes = require('prop-types');
|
29 |
|
30 | var _propTypes2 = _interopRequireDefault(_propTypes);
|
31 |
|
32 | var _overlay = require('../overlay');
|
33 |
|
34 | var _overlay2 = _interopRequireDefault(_overlay);
|
35 |
|
36 | var _util = require('../util');
|
37 |
|
38 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
39 |
|
40 | var noop = _util.func.noop,
|
41 | makeChain = _util.func.makeChain,
|
42 | bindCtx = _util.func.bindCtx;
|
43 |
|
44 | var Popup = _overlay2.default.Popup;
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | var Dropdown = (_temp = _class = function (_Component) {
|
51 | (0, _inherits3.default)(Dropdown, _Component);
|
52 |
|
53 | function Dropdown(props) {
|
54 | (0, _classCallCheck3.default)(this, Dropdown);
|
55 |
|
56 | var _this = (0, _possibleConstructorReturn3.default)(this, _Component.call(this, props));
|
57 |
|
58 | _this.state = {
|
59 | visible: 'visible' in props ? props.visible : props.defaultVisible || false,
|
60 | autoFocus: 'autoFocus' in props ? props.autoFocus : false
|
61 | };
|
62 |
|
63 | bindCtx(_this, ['onTriggerKeyDown', 'onMenuClick', 'onVisibleChange']);
|
64 | return _this;
|
65 | }
|
66 |
|
67 | Dropdown.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps) {
|
68 | var state = {};
|
69 |
|
70 | if ('visible' in nextProps) {
|
71 | state.visible = nextProps.visible;
|
72 | }
|
73 |
|
74 | return state;
|
75 | };
|
76 |
|
77 | Dropdown.prototype.getVisible = function getVisible() {
|
78 | var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
|
79 |
|
80 | return 'visible' in props ? props.visible : this.state.visible;
|
81 | };
|
82 |
|
83 | Dropdown.prototype.onMenuClick = function onMenuClick() {
|
84 | var autoClose = this.props.autoClose;
|
85 |
|
86 |
|
87 | if (!('visible' in this.props) && autoClose) {
|
88 | this.setState({
|
89 | visible: false
|
90 | });
|
91 | }
|
92 | this.onVisibleChange(false, 'fromContent');
|
93 | };
|
94 |
|
95 | Dropdown.prototype.onVisibleChange = function onVisibleChange(visible, from) {
|
96 | this.setState({ visible: visible });
|
97 |
|
98 | this.props.onVisibleChange(visible, from);
|
99 | };
|
100 |
|
101 | Dropdown.prototype.onTriggerKeyDown = function onTriggerKeyDown() {
|
102 | var autoFocus = true;
|
103 |
|
104 | if ('autoFocus' in this.props) {
|
105 | autoFocus = this.props.autoFocus;
|
106 | }
|
107 |
|
108 | this.setState({
|
109 | autoFocus: autoFocus
|
110 | });
|
111 | };
|
112 |
|
113 | Dropdown.prototype.render = function render() {
|
114 | var _props = this.props,
|
115 | trigger = _props.trigger,
|
116 | rtl = _props.rtl,
|
117 | autoClose = _props.autoClose;
|
118 |
|
119 |
|
120 | var child = _react.Children.only(this.props.children);
|
121 | var content = child;
|
122 | if (typeof child.type === 'function' && child.type.isNextMenu) {
|
123 | content = _react2.default.cloneElement(child, {
|
124 | onItemClick: makeChain(this.onMenuClick, child.props.onItemClick)
|
125 | });
|
126 | } else if (autoClose) {
|
127 | content = _react2.default.cloneElement(child, {
|
128 | onClick: makeChain(this.onMenuClick, child.props.onClick)
|
129 | });
|
130 | }
|
131 |
|
132 | var newTrigger = _react2.default.cloneElement(trigger, {
|
133 | onKeyDown: makeChain(this.onTriggerKeyDown, trigger.props.onKeyDown)
|
134 | });
|
135 |
|
136 | return _react2.default.createElement(
|
137 | Popup,
|
138 | (0, _extends3.default)({}, this.props, {
|
139 | rtl: rtl,
|
140 | autoFocus: this.state.autoFocus,
|
141 | trigger: newTrigger,
|
142 | visible: this.getVisible(),
|
143 | onVisibleChange: this.onVisibleChange,
|
144 | canCloseByOutSideClick: true
|
145 | }),
|
146 | content
|
147 | );
|
148 | };
|
149 |
|
150 | return Dropdown;
|
151 | }(_react.Component), _class.propTypes = {
|
152 | prefix: _propTypes2.default.string,
|
153 | pure: _propTypes2.default.bool,
|
154 | rtl: _propTypes2.default.bool,
|
155 | className: _propTypes2.default.string,
|
156 | |
157 |
|
158 |
|
159 | children: _propTypes2.default.node,
|
160 | |
161 |
|
162 |
|
163 | visible: _propTypes2.default.bool,
|
164 | |
165 |
|
166 |
|
167 | defaultVisible: _propTypes2.default.bool,
|
168 | |
169 |
|
170 |
|
171 |
|
172 |
|
173 | onVisibleChange: _propTypes2.default.func,
|
174 | |
175 |
|
176 |
|
177 | trigger: _propTypes2.default.node,
|
178 | |
179 |
|
180 |
|
181 | triggerType: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.array]),
|
182 | |
183 |
|
184 |
|
185 | disabled: _propTypes2.default.bool,
|
186 | |
187 |
|
188 |
|
189 | align: _propTypes2.default.string,
|
190 | |
191 |
|
192 |
|
193 |
|
194 | offset: _propTypes2.default.array,
|
195 | |
196 |
|
197 |
|
198 | delay: _propTypes2.default.number,
|
199 | |
200 |
|
201 |
|
202 | autoFocus: _propTypes2.default.bool,
|
203 | |
204 |
|
205 |
|
206 | hasMask: _propTypes2.default.bool,
|
207 | |
208 |
|
209 |
|
210 |
|
211 | autoClose: _propTypes2.default.bool,
|
212 | |
213 |
|
214 |
|
215 | cache: _propTypes2.default.bool,
|
216 | |
217 |
|
218 |
|
219 |
|
220 | animation: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.bool])
|
221 | }, _class.defaultProps = {
|
222 | prefix: 'next-',
|
223 | pure: false,
|
224 | defaultVisible: false,
|
225 | autoClose: false,
|
226 | onVisibleChange: noop,
|
227 | triggerType: 'hover',
|
228 | disabled: false,
|
229 | align: 'tl bl',
|
230 | offset: [0, 0],
|
231 | delay: 200,
|
232 | hasMask: false,
|
233 | cache: false,
|
234 | onPosition: noop
|
235 | }, _temp);
|
236 | Dropdown.displayName = 'Dropdown';
|
237 | exports.default = Dropdown;
|
238 | module.exports = exports['default']; |
\ | No newline at end of file |