UNPKG

5.66 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.default = undefined;
5
6var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
7
8var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
9
10var _extends2 = require('babel-runtime/helpers/extends');
11
12var _extends3 = _interopRequireDefault(_extends2);
13
14var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
15
16var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
17
18var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
19
20var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
21
22var _inherits2 = require('babel-runtime/helpers/inherits');
23
24var _inherits3 = _interopRequireDefault(_inherits2);
25
26var _class, _temp2;
27
28var _react = require('react');
29
30var _react2 = _interopRequireDefault(_react);
31
32var _propTypes = require('prop-types');
33
34var _propTypes2 = _interopRequireDefault(_propTypes);
35
36var _reactDom = require('react-dom');
37
38var _menu = require('../menu');
39
40var _menu2 = _interopRequireDefault(_menu);
41
42var _virtualList = require('../virtual-list');
43
44var _virtualList2 = _interopRequireDefault(_virtualList);
45
46function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
47
48var CascaderMenu = (_temp2 = _class = function (_Component) {
49 (0, _inherits3.default)(CascaderMenu, _Component);
50
51 function CascaderMenu() {
52 var _temp, _this, _ret;
53
54 (0, _classCallCheck3.default)(this, CascaderMenu);
55
56 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
57 args[_key] = arguments[_key];
58 }
59
60 return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.saveMenuRef = function (ref) {
61 _this.menuEl = ref;
62 }, _this.saveVirtualRef = function (ref) {
63 _this.virtualEl = ref;
64 }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
65 }
66
67 CascaderMenu.prototype.componentDidMount = function componentDidMount() {
68 this.scrollToSelectedItem();
69 };
70
71 CascaderMenu.prototype.scrollToSelectedItem = function scrollToSelectedItem() {
72 var _props = this.props,
73 prefix = _props.prefix,
74 useVirtual = _props.useVirtual,
75 children = _props.children;
76
77 if (!children || children.length === 0) {
78 return;
79 }
80 var selectedIndex = children.findIndex(function (item) {
81 return !!item.props.checked || !!item.props.selected || !!item.props.expanded;
82 });
83
84 if (selectedIndex === -1) {
85 return;
86 }
87
88 if (useVirtual) {
89 var instance = this.virtualEl.getInstance();
90 setTimeout(function () {
91 return instance.scrollTo(selectedIndex);
92 }, 0);
93 } else {
94 var itemSelector = '.' + prefix + 'menu-item';
95 var menu = (0, _reactDom.findDOMNode)(this.menuEl);
96 var targetItem = menu.querySelectorAll(itemSelector)[selectedIndex];
97 if (targetItem) {
98 menu.scrollTop = targetItem.offsetTop - Math.floor((menu.clientHeight / targetItem.clientHeight - 1) / 2) * targetItem.clientHeight;
99 }
100 }
101 };
102
103 CascaderMenu.prototype.renderMenu = function renderMenu(items, ref, props) {
104 var _this2 = this;
105
106 return _react2.default.createElement(
107 _menu2.default,
108 (0, _extends3.default)({ ref: ref, role: 'listbox' }, props),
109 items.map(function (node) {
110 if (_react2.default.isValidElement(node) && node.type.menuChildType === 'item') {
111 return _react2.default.cloneElement(node, {
112 menu: _this2
113 });
114 }
115
116 return node;
117 })
118 );
119 };
120
121 CascaderMenu.prototype.render = function render() {
122 var _this3 = this;
123
124 var _props2 = this.props,
125 prefix = _props2.prefix,
126 useVirtual = _props2.useVirtual,
127 className = _props2.className,
128 style = _props2.style,
129 children = _props2.children,
130 others = (0, _objectWithoutProperties3.default)(_props2, ['prefix', 'useVirtual', 'className', 'style', 'children']);
131
132 var menuProps = (0, _extends3.default)({
133 labelToggleChecked: false,
134 className: prefix + 'cascader-menu'
135 }, others);
136 return _react2.default.createElement(
137 'div',
138 {
139 ref: this.saveMenuRef,
140 className: prefix + 'cascader-menu-wrapper ' + (className ? className : ''),
141 style: style
142 },
143 useVirtual ? _react2.default.createElement(
144 _virtualList2.default,
145 {
146 ref: this.saveVirtualRef,
147 itemsRenderer: function itemsRenderer(items, ref) {
148 return _this3.renderMenu(items, ref, menuProps);
149 }
150 },
151 children
152 ) : this.renderMenu(children, undefined, menuProps)
153 );
154 };
155
156 return CascaderMenu;
157}(_react.Component), _class.propTypes = {
158 prefix: _propTypes2.default.string,
159 className: _propTypes2.default.string,
160 useVirtual: _propTypes2.default.bool,
161 children: _propTypes2.default.node
162}, _temp2);
163CascaderMenu.displayName = 'CascaderMenu';
164exports.default = CascaderMenu;
165module.exports = exports['default'];
\No newline at end of file