UNPKG

7.36 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.default = undefined;
5
6var _extends2 = require('babel-runtime/helpers/extends');
7
8var _extends3 = _interopRequireDefault(_extends2);
9
10var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
11
12var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
13
14var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
15
16var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
17
18var _inherits2 = require('babel-runtime/helpers/inherits');
19
20var _inherits3 = _interopRequireDefault(_inherits2);
21
22var _class, _temp;
23
24var _react = require('react');
25
26var _react2 = _interopRequireDefault(_react);
27
28var _propTypes = require('prop-types');
29
30var _propTypes2 = _interopRequireDefault(_propTypes);
31
32var _classnames = require('classnames');
33
34var _classnames2 = _interopRequireDefault(_classnames);
35
36var _icon = require('../../icon');
37
38var _icon2 = _interopRequireDefault(_icon);
39
40var _util = require('../../util');
41
42var _item = require('./item');
43
44var _item2 = _interopRequireDefault(_item);
45
46function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
47
48var bindCtx = _util.func.bindCtx;
49var pickOthers = _util.obj.pickOthers;
50
51/**
52 * Menu.Item
53 * @order 0
54 */
55
56var SelectableItem = (_temp = _class = function (_Component) {
57 (0, _inherits3.default)(SelectableItem, _Component);
58
59 function SelectableItem(props) {
60 (0, _classCallCheck3.default)(this, SelectableItem);
61
62 var _this = (0, _possibleConstructorReturn3.default)(this, _Component.call(this, props));
63
64 bindCtx(_this, ['handleKeyDown', 'handleClick']);
65 return _this;
66 }
67
68 SelectableItem.prototype.getSelected = function getSelected() {
69 var _props = this.props,
70 _key = _props._key,
71 root = _props.root,
72 selected = _props.selected;
73 var selectMode = root.props.selectMode;
74 var selectedKeys = root.state.selectedKeys;
75
76 return selected || !!selectMode && selectedKeys.indexOf(_key) > -1;
77 };
78
79 SelectableItem.prototype.handleSelect = function handleSelect(e) {
80 var _props2 = this.props,
81 _key = _props2._key,
82 root = _props2.root,
83 onSelect = _props2.onSelect;
84
85 if (onSelect) {
86 onSelect(!this.getSelected(), this, e);
87 } else {
88 root.handleSelect(_key, !this.getSelected(), this);
89 }
90 };
91
92 SelectableItem.prototype.handleKeyDown = function handleKeyDown(e) {
93 if (e.keyCode === _util.KEYCODE.SPACE && !this.props.disabled) {
94 this.handleSelect(e);
95 }
96
97 this.props.onKeyDown && this.props.onKeyDown(e);
98 };
99
100 SelectableItem.prototype.handleClick = function handleClick(e) {
101 this.handleSelect(e);
102
103 this.props.onClick && this.props.onClick(e);
104 };
105
106 SelectableItem.prototype.renderSelectedIcon = function renderSelectedIcon(selected) {
107 var _cx;
108
109 var _props3 = this.props,
110 root = _props3.root,
111 inlineIndent = _props3.inlineIndent,
112 needIndent = _props3.needIndent,
113 hasSelectedIcon = _props3.hasSelectedIcon,
114 isSelectIconRight = _props3.isSelectIconRight,
115 type = _props3.type;
116 var _root$props = root.props,
117 prefix = _root$props.prefix,
118 rootSelectedIcon = _root$props.hasSelectedIcon,
119 rootSelectIconRight = _root$props.isSelectIconRight,
120 icons = _root$props.icons;
121
122
123 var iconsSelect = icons.select;
124
125 if (!(0, _react.isValidElement)(icons.select) && icons.select) {
126 iconsSelect = _react2.default.createElement(
127 'span',
128 null,
129 icons.select
130 );
131 }
132
133 var cls = (0, _classnames2.default)((_cx = {}, _cx[prefix + 'menu-icon-selected'] = true, _cx[prefix + 'menu-symbol-icon-selected'] = !iconsSelect, _cx[prefix + 'menu-icon-right'] = ('isSelectIconRight' in this.props ? isSelectIconRight : rootSelectIconRight) && type !== 'submenu', _cx));
134
135 return ('hasSelectedIcon' in this.props ? hasSelectedIcon : rootSelectedIcon) && selected ? _react2.default.cloneElement(iconsSelect || _react2.default.createElement(_icon2.default, { type: 'select' }), {
136 style: needIndent && inlineIndent > 0 ? { left: inlineIndent + 'px' } : null,
137 className: cls
138 }) : null;
139 };
140
141 SelectableItem.prototype.render = function render() {
142 var _cx2;
143
144 var _props4 = this.props,
145 _key = _props4._key,
146 root = _props4.root,
147 className = _props4.className,
148 disabled = _props4.disabled,
149 helper = _props4.helper,
150 children = _props4.children,
151 needIndent = _props4.needIndent;
152 var prefix = root.props.prefix;
153
154 var others = pickOthers(Object.keys(SelectableItem.propTypes), this.props);
155 var selected = this.getSelected();
156
157 var newProps = (0, _extends3.default)({
158 _key: _key,
159 root: root,
160 disabled: disabled,
161 type: 'item',
162 className: (0, _classnames2.default)((_cx2 = {}, _cx2[prefix + 'selected'] = selected, _cx2[className] = !!className, _cx2)),
163 onKeyDown: this.handleKeyDown,
164 onClick: !disabled ? this.handleClick : this.props.onClick,
165 needIndent: needIndent
166 }, others);
167
168 if (!('title' in newProps) && typeof children === 'string') {
169 newProps.title = children;
170 }
171
172 var textProps = {};
173
174 if ('selectMode' in root.props) {
175 textProps['aria-selected'] = selected;
176 }
177
178 return _react2.default.createElement(
179 _item2.default,
180 newProps,
181 this.renderSelectedIcon(selected),
182 _react2.default.createElement(
183 'span',
184 (0, _extends3.default)({ className: prefix + 'menu-item-text' }, textProps),
185 children
186 ),
187 helper ? _react2.default.createElement(
188 'div',
189 { className: prefix + 'menu-item-helper' },
190 helper
191 ) : null
192 );
193 };
194
195 return SelectableItem;
196}(_react.Component), _class.menuChildType = 'item', _class.propTypes = {
197 _key: _propTypes2.default.string,
198 root: _propTypes2.default.object,
199 selected: _propTypes2.default.bool,
200 onSelect: _propTypes2.default.func,
201 inlineIndent: _propTypes2.default.number,
202 /**
203 * 是否禁用
204 */
205 disabled: _propTypes2.default.bool,
206 /**
207 * 帮助文本
208 */
209 helper: _propTypes2.default.node,
210 /**
211 * 菜单项标签内容
212 */
213 children: _propTypes2.default.node,
214 className: _propTypes2.default.string,
215 onKeyDown: _propTypes2.default.func,
216 onClick: _propTypes2.default.func,
217 needIndent: _propTypes2.default.bool,
218 hasSelectedIcon: _propTypes2.default.bool,
219 isSelectIconRight: _propTypes2.default.bool,
220 icons: _propTypes2.default.object
221}, _class.defaultProps = {
222 disabled: false,
223 needIndent: true,
224 icons: {}
225}, _temp);
226SelectableItem.displayName = 'SelectableItem';
227exports.default = SelectableItem;
228module.exports = exports['default'];
\No newline at end of file