@hi-ui/cascader 4.0.0-beta.8 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/Cascader.js +52 -151
- package/lib/cjs/CascaderMenuList.js +172 -0
- package/lib/cjs/context.js +1 -2
- package/lib/cjs/hooks/use-async-switch.js +5 -6
- package/lib/cjs/hooks/use-cache/lib/esm/index.js +2 -3
- package/lib/cjs/hooks/use-select.js +1 -2
- package/lib/cjs/icons/index.js +4 -5
- package/lib/cjs/index.js +1 -4
- package/lib/cjs/styles/index.scss.js +3 -4
- package/lib/cjs/use-cascader.js +3 -3
- package/lib/cjs/utils/index.js +30 -2
- package/lib/esm/Cascader.js +39 -140
- package/lib/esm/CascaderMenuList.js +146 -0
- package/lib/esm/context.js +1 -2
- package/lib/esm/hooks/use-async-switch.js +1 -2
- package/lib/esm/hooks/use-cache/lib/esm/index.js +2 -3
- package/lib/esm/hooks/use-select.js +1 -2
- package/lib/esm/icons/index.js +1 -2
- package/lib/esm/index.js +2 -3
- package/lib/esm/styles/index.scss.js +4 -6
- package/lib/esm/use-cascader.js +3 -3
- package/lib/esm/utils/index.js +30 -3
- package/lib/types/Cascader.d.ts +6 -12
- package/lib/types/CascaderMenuList.d.ts +13 -0
- package/lib/types/context.d.ts +7 -7
- package/lib/types/hooks/use-select.d.ts +2 -2
- package/lib/types/index.d.ts +1 -0
- package/lib/types/types.d.ts +15 -18
- package/lib/types/use-cascader.d.ts +6 -7
- package/lib/types/utils/index.d.ts +8 -7
- package/package.json +25 -22
- package/lib/cjs/Cascader.js.map +0 -1
- package/lib/cjs/context.js.map +0 -1
- package/lib/cjs/hooks/use-async-switch.js.map +0 -1
- package/lib/cjs/hooks/use-cache/lib/esm/index.js.map +0 -1
- package/lib/cjs/hooks/use-select.js.map +0 -1
- package/lib/cjs/icons/index.js.map +0 -1
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/styles/index.scss.js.map +0 -1
- package/lib/cjs/use-cascader.js.map +0 -1
- package/lib/cjs/utils/index.js.map +0 -1
- package/lib/esm/Cascader.js.map +0 -1
- package/lib/esm/context.js.map +0 -1
- package/lib/esm/hooks/use-async-switch.js.map +0 -1
- package/lib/esm/hooks/use-cache/lib/esm/index.js.map +0 -1
- package/lib/esm/hooks/use-select.js.map +0 -1
- package/lib/esm/icons/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/styles/index.scss.js.map +0 -1
- package/lib/esm/use-cascader.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
package/lib/cjs/Cascader.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -31,8 +31,6 @@ var input = require('@hi-ui/input');
|
|
31
31
|
|
32
32
|
var icons = require('@hi-ui/icons');
|
33
33
|
|
34
|
-
var index$2 = require('./icons/index.js');
|
35
|
-
|
36
34
|
var index$1 = require('./utils/index.js');
|
37
35
|
|
38
36
|
var context = require('./context.js');
|
@@ -49,7 +47,13 @@ var arrayUtils = require('@hi-ui/array-utils');
|
|
49
47
|
|
50
48
|
var index = require('./hooks/use-cache/lib/esm/index.js');
|
51
49
|
|
52
|
-
var
|
50
|
+
var core = require('@hi-ui/core');
|
51
|
+
|
52
|
+
var funcUtils = require('@hi-ui/func-utils');
|
53
|
+
|
54
|
+
var CascaderMenuList = require('./CascaderMenuList.js');
|
55
|
+
|
56
|
+
var Highlighter = require('@hi-ui/highlighter');
|
53
57
|
|
54
58
|
function _interopDefaultLegacy(e) {
|
55
59
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
@@ -59,6 +63,8 @@ function _interopDefaultLegacy(e) {
|
|
59
63
|
|
60
64
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
61
65
|
|
66
|
+
var Highlighter__default = /*#__PURE__*/_interopDefaultLegacy(Highlighter);
|
67
|
+
|
62
68
|
var _prefix = classname.getPrefixCls('cascader');
|
63
69
|
|
64
70
|
var NOOP_ARRAY = [];
|
@@ -88,19 +94,23 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
88
94
|
invalid = props.invalid,
|
89
95
|
filterOption = props.filterOption,
|
90
96
|
searchableProp = props.searchable,
|
97
|
+
onSearchProp = props.onSearch,
|
91
98
|
titleRender = props.render,
|
92
99
|
overlayClassName = props.overlayClassName,
|
93
100
|
_props$data = props.data,
|
94
101
|
data = _props$data === void 0 ? NOOP_ARRAY : _props$data,
|
102
|
+
_props$flattedSearchR = props.flattedSearchResult,
|
103
|
+
flattedSearchResult = _props$flattedSearchR === void 0 ? true : _props$flattedSearchR,
|
104
|
+
visible = props.visible,
|
95
105
|
onOpen = props.onOpen,
|
96
106
|
onClose = props.onClose,
|
97
|
-
rest = tslib.__rest(props, ["prefixCls", "className", "placeholder", "disabled", "clearable", "type", "fieldNames", "expandTrigger", "displayRender", "onSelect", "onLoadChildren", "appearance", "invalid", "filterOption", "searchable", "render", "overlayClassName", "data", "onOpen", "onClose"]);
|
107
|
+
rest = tslib.__rest(props, ["prefixCls", "className", "placeholder", "disabled", "clearable", "type", "fieldNames", "expandTrigger", "displayRender", "onSelect", "onLoadChildren", "appearance", "invalid", "filterOption", "searchable", "onSearch", "render", "overlayClassName", "data", "flattedSearchResult", "visible", "onOpen", "onClose"]);
|
98
108
|
|
99
|
-
var i18n =
|
109
|
+
var i18n = core.useLocaleContext();
|
100
110
|
var placeholder = typeAssertion.isUndef(placeholderProp) ? i18n.get('cascader.placeholder') : placeholderProp;
|
101
|
-
var flatted = type === 'flatted';
|
102
111
|
|
103
112
|
var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
|
113
|
+
visible: visible,
|
104
114
|
disabled: disabled,
|
105
115
|
onOpen: onOpen,
|
106
116
|
onClose: onClose
|
@@ -126,7 +136,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
126
136
|
var highlight = !!searchValue && searchMode === 'upMatch';
|
127
137
|
|
128
138
|
if (highlight) {
|
129
|
-
return renderHighlightTitle(searchValue, node, titleRender);
|
139
|
+
return flattedSearchResult ? renderHighlightTitles(searchValue, node, titleRender) : renderHighlightTitle(searchValue, node, titleRender);
|
130
140
|
}
|
131
141
|
|
132
142
|
return typeAssertion.isFunction(titleRender) ? titleRender(node) : true;
|
@@ -149,9 +159,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
149
159
|
data: cascaderData,
|
150
160
|
flattedData: flattedData,
|
151
161
|
enabled: searchableProp,
|
152
|
-
exclude: function exclude(
|
153
|
-
return
|
154
|
-
}
|
162
|
+
exclude: function exclude(node) {
|
163
|
+
return node.disabled;
|
164
|
+
} // exclude: (option: FlattedCascaderDataItem) => {
|
165
|
+
// return checkCanLoadChildren(option, onLoadChildren)
|
166
|
+
// },
|
167
|
+
|
155
168
|
});
|
156
169
|
|
157
170
|
var _useSearchMode = useSearchMode.useSearchMode({
|
@@ -184,16 +197,19 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
184
197
|
|
185
198
|
return acc;
|
186
199
|
}, []);
|
187
|
-
return /*#__PURE__*/React__default[
|
200
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
188
201
|
className: "title__text"
|
189
202
|
}, mergedTitle);
|
190
203
|
};
|
191
204
|
|
205
|
+
var shouldUseSearch = !!searchValue; // 搜索的结果列表也采用 flatted 模式进行展示
|
206
|
+
|
207
|
+
var flatted = shouldUseSearch ? flattedSearchResult : type === 'flatted';
|
208
|
+
|
192
209
|
var _a = useCascader.useCascader(Object.assign(Object.assign({}, rest), {
|
193
210
|
disabled: disabled,
|
194
211
|
fieldNames: fieldNames,
|
195
|
-
|
196
|
-
flatted: flatted || !!searchValue,
|
212
|
+
flatted: flatted,
|
197
213
|
onSelect: onSelect,
|
198
214
|
onLoadChildren: onLoadChildren,
|
199
215
|
data: data,
|
@@ -210,14 +226,17 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
210
226
|
reset = context$1.reset,
|
211
227
|
menuList = context$1.menuList,
|
212
228
|
getItemRequiredProps = context$1.getItemRequiredProps;
|
213
|
-
var shouldUseSearch = !!searchValue;
|
214
229
|
var showData = React.useMemo(function () {
|
215
230
|
if (shouldUseSearch) {
|
231
|
+
if (!flattedSearchResult) {
|
232
|
+
return index$1.getFilteredMenuList(menuList, stateInSearch.data);
|
233
|
+
}
|
234
|
+
|
216
235
|
return typeAssertion.isArrayNonEmpty(stateInSearch.data) ? [stateInSearch.data] : [];
|
217
236
|
}
|
218
237
|
|
219
238
|
return menuList;
|
220
|
-
}, [shouldUseSearch, stateInSearch.data, menuList]);
|
239
|
+
}, [shouldUseSearch, flattedSearchResult, stateInSearch.data, menuList]);
|
221
240
|
React.useEffect(function () {
|
222
241
|
// 关闭展示后,重置展开要高亮的选项
|
223
242
|
if (!menuVisible) {
|
@@ -234,13 +253,13 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
234
253
|
return flattedData;
|
235
254
|
}, [selectedItem, flattedData]);
|
236
255
|
var cls = classname.cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed'));
|
237
|
-
return /*#__PURE__*/React__default[
|
256
|
+
return /*#__PURE__*/React__default["default"].createElement(context.CascaderProvider, {
|
238
257
|
value: Object.assign(Object.assign({}, context$1), {
|
239
258
|
expandTrigger: expandTrigger,
|
240
259
|
titleRender: proxyTitleRender,
|
241
260
|
menuList: showData
|
242
261
|
})
|
243
|
-
}, /*#__PURE__*/React__default[
|
262
|
+
}, /*#__PURE__*/React__default["default"].createElement(picker.Picker, Object.assign({
|
244
263
|
ref: ref,
|
245
264
|
className: cls,
|
246
265
|
overlayClassName: classname.cx(prefixCls + "__popper", overlayClassName)
|
@@ -254,12 +273,13 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
254
273
|
onOpen: menuVisibleAction.on,
|
255
274
|
onClose: menuVisibleAction.off,
|
256
275
|
searchable: searchable,
|
257
|
-
|
258
|
-
|
276
|
+
scrollable: false,
|
277
|
+
onSearch: funcUtils.callAllFuncs(onSearchProp, onSearch),
|
278
|
+
trigger: /*#__PURE__*/React__default["default"].createElement(input.MockInput, {
|
259
279
|
clearable: clearable,
|
260
280
|
placeholder: placeholder,
|
261
281
|
displayRender: displayRender,
|
262
|
-
suffix: menuVisible ? /*#__PURE__*/React__default[
|
282
|
+
suffix: menuVisible ? /*#__PURE__*/React__default["default"].createElement(icons.UpOutlined, null) : /*#__PURE__*/React__default["default"].createElement(icons.DownOutlined, null),
|
263
283
|
focused: menuVisible,
|
264
284
|
value: value[value.length - 1],
|
265
285
|
onChange: function onChange() {
|
@@ -269,140 +289,24 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
269
289
|
invalid: invalid,
|
270
290
|
appearance: appearance
|
271
291
|
})
|
272
|
-
}), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default[
|
292
|
+
}), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default["default"].createElement(CascaderMenuList.CascaderMenuList, null) : null));
|
273
293
|
});
|
274
294
|
|
275
295
|
if (env.__DEV__) {
|
276
296
|
Cascader.displayName = 'Cascader';
|
277
297
|
}
|
278
298
|
|
279
|
-
var
|
280
|
-
var CascaderMenuList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
281
|
-
var _a$prefixCls = _a.prefixCls,
|
282
|
-
prefixCls = _a$prefixCls === void 0 ? menuListPrefix : _a$prefixCls,
|
283
|
-
className = _a.className,
|
284
|
-
rest = tslib.__rest(_a, ["prefixCls", "className"]);
|
285
|
-
|
286
|
-
var _useCascaderContext = context.useCascaderContext(),
|
287
|
-
flatted = _useCascaderContext.flatted,
|
288
|
-
menuList = _useCascaderContext.menuList;
|
289
|
-
|
290
|
-
var cls = classname.cx(prefixCls, className, flatted && prefixCls + "--flatted");
|
291
|
-
return /*#__PURE__*/React__default['default'].createElement("div", Object.assign({
|
292
|
-
ref: ref,
|
293
|
-
className: cls
|
294
|
-
}, rest), menuList.map(function (menu, menuIndex) {
|
295
|
-
// @ts-ignore
|
296
|
-
return typeAssertion.isArrayNonEmpty(menu) ? /*#__PURE__*/React__default['default'].createElement(CascaderMenu, {
|
297
|
-
key: menuIndex,
|
298
|
-
data: menu
|
299
|
-
}) : null;
|
300
|
-
}));
|
301
|
-
});
|
302
|
-
|
303
|
-
if (env.__DEV__) {
|
304
|
-
CascaderMenuList.displayName = 'CascaderMenuList';
|
305
|
-
}
|
306
|
-
|
307
|
-
var menuPrefix = classname.getPrefixCls('cascader-menu');
|
308
|
-
|
309
|
-
var CascaderMenu = function CascaderMenu(_ref2) {
|
310
|
-
var _ref2$prefixCls = _ref2.prefixCls,
|
311
|
-
prefixCls = _ref2$prefixCls === void 0 ? menuPrefix : _ref2$prefixCls,
|
312
|
-
_ref2$role = _ref2.role,
|
313
|
-
role = _ref2$role === void 0 ? 'menu' : _ref2$role,
|
314
|
-
className = _ref2.className,
|
315
|
-
menu = _ref2.data;
|
316
|
-
|
317
|
-
var _useCascaderContext2 = context.useCascaderContext(),
|
318
|
-
flatted = _useCascaderContext2.flatted,
|
319
|
-
disabledContext = _useCascaderContext2.disabled,
|
320
|
-
expandTrigger = _useCascaderContext2.expandTrigger,
|
321
|
-
onItemClick = _useCascaderContext2.onItemClick,
|
322
|
-
onItemHover = _useCascaderContext2.onItemHover,
|
323
|
-
titleRender = _useCascaderContext2.titleRender,
|
324
|
-
onLoadChildren = _useCascaderContext2.onLoadChildren,
|
325
|
-
getItemRequiredProps = _useCascaderContext2.getItemRequiredProps;
|
326
|
-
|
327
|
-
var cls = classname.cx(prefixCls, className);
|
328
|
-
return /*#__PURE__*/React__default['default'].createElement("ul", {
|
329
|
-
className: cls,
|
330
|
-
role: role
|
331
|
-
}, menu.map(function (option) {
|
332
|
-
var eventOption = index$1.getItemEventData(option, getItemRequiredProps(option));
|
333
|
-
var selected = eventOption.selected,
|
334
|
-
loading = eventOption.loading;
|
335
|
-
var disabled = disabledContext || option.disabled;
|
336
|
-
var optionCls = classname.cx(prefixCls + "-option", loading && prefixCls + "-option--loading", disabled && prefixCls + "-option--disabled", selected && prefixCls + "-option--selected");
|
337
|
-
return /*#__PURE__*/React__default['default'].createElement("li", {
|
338
|
-
key: option.id,
|
339
|
-
role: "menu-item",
|
340
|
-
className: prefixCls + "-item"
|
341
|
-
}, /*#__PURE__*/React__default['default'].createElement("div", {
|
342
|
-
className: optionCls,
|
343
|
-
onClick: function onClick() {
|
344
|
-
if (disabled) return;
|
345
|
-
onItemClick(eventOption);
|
346
|
-
},
|
347
|
-
onMouseEnter: function onMouseEnter() {
|
348
|
-
if (disabled) return;
|
349
|
-
|
350
|
-
if (expandTrigger === 'hover') {
|
351
|
-
onItemHover(eventOption);
|
352
|
-
}
|
353
|
-
}
|
354
|
-
}, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
|
355
|
-
}));
|
356
|
-
};
|
357
|
-
/**
|
358
|
-
* 渲染菜单子项的展开提示图标
|
359
|
-
*/
|
360
|
-
|
361
|
-
|
362
|
-
var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildren) {
|
363
|
-
if (loading) {
|
364
|
-
return /*#__PURE__*/React__default['default'].createElement("span", {
|
365
|
-
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--loading")
|
366
|
-
}, index$2.defaultLoadingIcon);
|
367
|
-
}
|
368
|
-
|
369
|
-
var canLoadChildren = index$1.checkCanLoadChildren(item, onLoadChildren);
|
370
|
-
|
371
|
-
if (canLoadChildren) {
|
372
|
-
return /*#__PURE__*/React__default['default'].createElement("span", {
|
373
|
-
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--arrow")
|
374
|
-
}, index$2.defaultSuffixIcon);
|
375
|
-
}
|
376
|
-
|
377
|
-
return /*#__PURE__*/React__default['default'].createElement("span", {
|
378
|
-
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--noop")
|
379
|
-
}, index$2.defaultLeafIcon);
|
380
|
-
};
|
381
|
-
|
382
|
-
var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
|
383
|
-
// 如果 titleRender 返回 `true`,则使用默认 title
|
384
|
-
var title = titleRender ? titleRender(option) : true;
|
385
|
-
if (title !== true) return title;
|
386
|
-
return /*#__PURE__*/React__default['default'].createElement("span", {
|
387
|
-
className: "title__text title__text--cols"
|
388
|
-
}, treeUtils.getTopDownAncestors(option).map(function (item) {
|
389
|
-
return /*#__PURE__*/React__default['default'].createElement("span", {
|
390
|
-
key: item.id,
|
391
|
-
className: "title__text--col"
|
392
|
-
}, item.title);
|
393
|
-
}));
|
394
|
-
};
|
395
|
-
|
396
|
-
var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
|
299
|
+
var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
|
397
300
|
// 如果 titleRender 返回 `true`,则使用默认 title
|
398
|
-
var title = titleRender ? titleRender(option) : true;
|
301
|
+
var title = titleRender ? titleRender(option, keyword) : true;
|
399
302
|
if (title !== true) return title;
|
400
|
-
return /*#__PURE__*/React__default[
|
401
|
-
|
303
|
+
return /*#__PURE__*/React__default["default"].createElement(Highlighter__default["default"], {
|
304
|
+
key: option.id,
|
305
|
+
keyword: keyword
|
402
306
|
}, option.title);
|
403
307
|
};
|
404
308
|
|
405
|
-
var
|
309
|
+
var renderHighlightTitles = function renderHighlightTitles(keyword, option, titleRender) {
|
406
310
|
// 如果 titleRender 返回 `true`,则使用默认 title
|
407
311
|
var title = titleRender ? titleRender(option, keyword) : true;
|
408
312
|
if (title !== true) return title;
|
@@ -413,12 +317,12 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
|
|
413
317
|
}
|
414
318
|
|
415
319
|
var found = false;
|
416
|
-
return /*#__PURE__*/React__default[
|
320
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
417
321
|
className: classname.cx("title__text", "title__text--cols")
|
418
322
|
}, treeUtils.getNodeAncestorsWithMe(option).map(function (item) {
|
419
323
|
var title = item.title,
|
420
324
|
id = item.id;
|
421
|
-
var raw = /*#__PURE__*/React__default[
|
325
|
+
var raw = /*#__PURE__*/React__default["default"].createElement("span", {
|
422
326
|
className: "title__text--col",
|
423
327
|
key: id
|
424
328
|
}, title);
|
@@ -429,16 +333,13 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
|
|
429
333
|
found = true;
|
430
334
|
var beforeStr = title.substr(0, index);
|
431
335
|
var afterStr = title.substr(index + keyword.length);
|
432
|
-
return /*#__PURE__*/React__default[
|
336
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
433
337
|
key: id,
|
434
338
|
className: "title__text--col"
|
435
|
-
}, beforeStr, /*#__PURE__*/React__default[
|
339
|
+
}, beforeStr, /*#__PURE__*/React__default["default"].createElement("span", {
|
436
340
|
className: "title__text--matched"
|
437
341
|
}, keyword), afterStr);
|
438
342
|
}).reverse());
|
439
343
|
};
|
440
344
|
|
441
345
|
exports.Cascader = Cascader;
|
442
|
-
exports.CascaderMenu = CascaderMenu;
|
443
|
-
exports.CascaderMenuList = CascaderMenuList;
|
444
|
-
//# sourceMappingURL=Cascader.js.map
|
@@ -0,0 +1,172 @@
|
|
1
|
+
/** @LICENSE
|
2
|
+
* @hi-ui/cascader
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
|
+
*
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
|
+
*
|
7
|
+
* This source code is licensed under the MIT license found in the
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
9
|
+
*/
|
10
|
+
'use strict';
|
11
|
+
|
12
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
13
|
+
|
14
|
+
Object.defineProperty(exports, '__esModule', {
|
15
|
+
value: true
|
16
|
+
});
|
17
|
+
|
18
|
+
var tslib = require('tslib');
|
19
|
+
|
20
|
+
var React = require('react');
|
21
|
+
|
22
|
+
var classname = require('@hi-ui/classname');
|
23
|
+
|
24
|
+
var env = require('@hi-ui/env');
|
25
|
+
|
26
|
+
var index$1 = require('./icons/index.js');
|
27
|
+
|
28
|
+
var index = require('./utils/index.js');
|
29
|
+
|
30
|
+
var context = require('./context.js');
|
31
|
+
|
32
|
+
var treeUtils = require('@hi-ui/tree-utils');
|
33
|
+
|
34
|
+
var typeAssertion = require('@hi-ui/type-assertion');
|
35
|
+
|
36
|
+
function _interopDefaultLegacy(e) {
|
37
|
+
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
38
|
+
'default': e
|
39
|
+
};
|
40
|
+
}
|
41
|
+
|
42
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
43
|
+
|
44
|
+
var menuListPrefix = classname.getPrefixCls('cascader-menu-list');
|
45
|
+
var CascaderMenuList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
46
|
+
var _a$prefixCls = _a.prefixCls,
|
47
|
+
prefixCls = _a$prefixCls === void 0 ? menuListPrefix : _a$prefixCls,
|
48
|
+
className = _a.className,
|
49
|
+
rest = tslib.__rest(_a, ["prefixCls", "className"]);
|
50
|
+
|
51
|
+
var _useCascaderContext = context.useCascaderContext(),
|
52
|
+
flatted = _useCascaderContext.flatted,
|
53
|
+
menuList = _useCascaderContext.menuList;
|
54
|
+
|
55
|
+
var cls = classname.cx(prefixCls, className, flatted && prefixCls + "--flatted");
|
56
|
+
return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
|
57
|
+
ref: ref,
|
58
|
+
className: cls
|
59
|
+
}, rest), menuList.map(function (menu, menuIndex) {
|
60
|
+
// @ts-ignore
|
61
|
+
return typeAssertion.isArrayNonEmpty(menu) ? /*#__PURE__*/React__default["default"].createElement(CascaderMenu, {
|
62
|
+
key: menuIndex,
|
63
|
+
data: menu
|
64
|
+
}) : null;
|
65
|
+
}));
|
66
|
+
});
|
67
|
+
|
68
|
+
if (env.__DEV__) {
|
69
|
+
CascaderMenuList.displayName = 'CascaderMenuList';
|
70
|
+
}
|
71
|
+
|
72
|
+
var menuPrefix = classname.getPrefixCls('cascader-menu');
|
73
|
+
|
74
|
+
var CascaderMenu = function CascaderMenu(_ref) {
|
75
|
+
var _ref$prefixCls = _ref.prefixCls,
|
76
|
+
prefixCls = _ref$prefixCls === void 0 ? menuPrefix : _ref$prefixCls,
|
77
|
+
_ref$role = _ref.role,
|
78
|
+
role = _ref$role === void 0 ? 'menu' : _ref$role,
|
79
|
+
className = _ref.className,
|
80
|
+
menu = _ref.data;
|
81
|
+
|
82
|
+
var _useCascaderContext2 = context.useCascaderContext(),
|
83
|
+
flatted = _useCascaderContext2.flatted,
|
84
|
+
disabledContext = _useCascaderContext2.disabled,
|
85
|
+
expandTrigger = _useCascaderContext2.expandTrigger,
|
86
|
+
onItemClick = _useCascaderContext2.onItemClick,
|
87
|
+
onItemHover = _useCascaderContext2.onItemHover,
|
88
|
+
titleRender = _useCascaderContext2.titleRender,
|
89
|
+
onLoadChildren = _useCascaderContext2.onLoadChildren,
|
90
|
+
getItemRequiredProps = _useCascaderContext2.getItemRequiredProps;
|
91
|
+
|
92
|
+
var cls = classname.cx(prefixCls, className);
|
93
|
+
return /*#__PURE__*/React__default["default"].createElement("ul", {
|
94
|
+
className: cls,
|
95
|
+
role: role
|
96
|
+
}, menu.map(function (option) {
|
97
|
+
var eventOption = index.getItemEventData(option, getItemRequiredProps(option));
|
98
|
+
var selected = eventOption.selected,
|
99
|
+
loading = eventOption.loading,
|
100
|
+
active = eventOption.active;
|
101
|
+
var disabled = disabledContext || option.disabled;
|
102
|
+
var optionCls = classname.cx(prefixCls + "-option", active && prefixCls + "-option--active", loading && prefixCls + "-option--loading", disabled && prefixCls + "-option--disabled", selected && prefixCls + "-option--selected");
|
103
|
+
return /*#__PURE__*/React__default["default"].createElement("li", {
|
104
|
+
key: option.id,
|
105
|
+
role: "menu-item",
|
106
|
+
className: prefixCls + "-item"
|
107
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
108
|
+
className: optionCls,
|
109
|
+
onClick: function onClick() {
|
110
|
+
if (disabled) return;
|
111
|
+
onItemClick(eventOption);
|
112
|
+
},
|
113
|
+
onMouseEnter: function onMouseEnter() {
|
114
|
+
if (disabled) return;
|
115
|
+
|
116
|
+
if (expandTrigger === 'hover') {
|
117
|
+
onItemHover(eventOption);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
|
121
|
+
}));
|
122
|
+
};
|
123
|
+
/**
|
124
|
+
* 渲染菜单子项的展开提示图标
|
125
|
+
*/
|
126
|
+
|
127
|
+
|
128
|
+
var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildren) {
|
129
|
+
if (loading) {
|
130
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
131
|
+
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--loading")
|
132
|
+
}, index$1.defaultLoadingIcon);
|
133
|
+
}
|
134
|
+
|
135
|
+
var canLoadChildren = index.checkCanLoadChildren(item, onLoadChildren);
|
136
|
+
|
137
|
+
if (canLoadChildren) {
|
138
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
139
|
+
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--arrow")
|
140
|
+
}, index$1.defaultSuffixIcon);
|
141
|
+
}
|
142
|
+
|
143
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
144
|
+
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--noop")
|
145
|
+
}, index$1.defaultLeafIcon);
|
146
|
+
};
|
147
|
+
|
148
|
+
var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
|
149
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
150
|
+
var title = titleRender ? titleRender(option) : true;
|
151
|
+
if (title !== true) return title;
|
152
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
153
|
+
className: "title__text title__text--cols"
|
154
|
+
}, treeUtils.getTopDownAncestors(option).map(function (item) {
|
155
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
156
|
+
key: item.id,
|
157
|
+
className: "title__text--col"
|
158
|
+
}, item.title);
|
159
|
+
}));
|
160
|
+
};
|
161
|
+
|
162
|
+
var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
|
163
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
164
|
+
var title = titleRender ? titleRender(option) : true;
|
165
|
+
if (title !== true) return title;
|
166
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
167
|
+
className: "title__text"
|
168
|
+
}, option.title);
|
169
|
+
};
|
170
|
+
|
171
|
+
exports.CascaderMenu = CascaderMenu;
|
172
|
+
exports.CascaderMenuList = CascaderMenuList;
|
package/lib/cjs/context.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -30,4 +30,3 @@ var useCascaderContext = function useCascaderContext() {
|
|
30
30
|
|
31
31
|
exports.CascaderProvider = CascaderProvider;
|
32
32
|
exports.useCascaderContext = useCascaderContext;
|
33
|
-
//# sourceMappingURL=context.js.map
|
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -39,9 +39,9 @@ var useAsyncSwitch = function useAsyncSwitch(setCascaderData, onExpand, onLoadCh
|
|
39
39
|
var onLoadChildrenLatest = useLatest.useLatestCallback(onLoadChildren); // 加载节点
|
40
40
|
|
41
41
|
var loadChildren = React.useCallback(function (node) {
|
42
|
-
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default[
|
42
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
|
43
43
|
var childrenNodes;
|
44
|
-
return _regeneratorRuntime__default[
|
44
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
|
45
45
|
while (1) {
|
46
46
|
switch (_context.prev = _context.next) {
|
47
47
|
case 0:
|
@@ -82,9 +82,9 @@ var useAsyncSwitch = function useAsyncSwitch(setCascaderData, onExpand, onLoadCh
|
|
82
82
|
onlyExpand = false;
|
83
83
|
}
|
84
84
|
|
85
|
-
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default[
|
85
|
+
return tslib.__awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2() {
|
86
86
|
var id, children, isLeaf;
|
87
|
-
return _regeneratorRuntime__default[
|
87
|
+
return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
|
88
88
|
while (1) {
|
89
89
|
switch (_context2.prev = _context2.next) {
|
90
90
|
case 0:
|
@@ -140,4 +140,3 @@ var useAsyncSwitch = function useAsyncSwitch(setCascaderData, onExpand, onLoadCh
|
|
140
140
|
};
|
141
141
|
|
142
142
|
exports.useAsyncSwitch = useAsyncSwitch;
|
143
|
-
//# sourceMappingURL=use-async-switch.js.map
|
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -18,7 +18,7 @@ var React = require('react');
|
|
18
18
|
* @hi-ui/use-cache
|
19
19
|
* https://github.com/XiaoMi/hiui/tree/master/packages/hooks/use-cache#readme
|
20
20
|
*
|
21
|
-
* Copyright (c)
|
21
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
22
22
|
*
|
23
23
|
* This source code is licensed under the MIT license found in the
|
24
24
|
* LICENSE file in the root directory of this source tree.
|
@@ -41,4 +41,3 @@ var useCache = function useCache(data) {
|
|
41
41
|
};
|
42
42
|
|
43
43
|
exports.useCache = useCache;
|
44
|
-
//# sourceMappingURL=index.js.map
|
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -65,4 +65,3 @@ var useSelect = function useSelect(disabled, onSelect, changeOnSelect, onLoadChi
|
|
65
65
|
};
|
66
66
|
|
67
67
|
exports.useSelect = useSelect;
|
68
|
-
//# sourceMappingURL=use-select.js.map
|
package/lib/cjs/icons/index.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -29,15 +29,14 @@ function _interopDefaultLegacy(e) {
|
|
29
29
|
|
30
30
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
31
31
|
|
32
|
-
var defaultSuffixIcon = /*#__PURE__*/React__default[
|
33
|
-
var defaultLeafIcon = /*#__PURE__*/React__default[
|
32
|
+
var defaultSuffixIcon = /*#__PURE__*/React__default["default"].createElement(icons.DownOutlined, null);
|
33
|
+
var defaultLeafIcon = /*#__PURE__*/React__default["default"].createElement("span", {
|
34
34
|
style: {
|
35
35
|
display: 'inline-block',
|
36
36
|
width: 16
|
37
37
|
}
|
38
38
|
});
|
39
|
-
var defaultLoadingIcon = /*#__PURE__*/React__default[
|
39
|
+
var defaultLoadingIcon = /*#__PURE__*/React__default["default"].createElement(spinner.Spinner, null);
|
40
40
|
exports.defaultLeafIcon = defaultLeafIcon;
|
41
41
|
exports.defaultLoadingIcon = defaultLoadingIcon;
|
42
42
|
exports.defaultSuffixIcon = defaultSuffixIcon;
|
43
|
-
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @hi-ui/cascader
|
3
3
|
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/cascader#readme
|
4
4
|
*
|
5
|
-
* Copyright (c)
|
5
|
+
* Copyright (c) HiUI <mi-hiui@xiaomi.com>.
|
6
6
|
*
|
7
7
|
* This source code is licensed under the MIT license found in the
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
@@ -18,7 +18,4 @@ require('./styles/index.scss.js');
|
|
18
18
|
var Cascader = require('./Cascader.js');
|
19
19
|
|
20
20
|
exports.Cascader = Cascader.Cascader;
|
21
|
-
exports.CascaderMenu = Cascader.CascaderMenu;
|
22
|
-
exports.CascaderMenuList = Cascader.CascaderMenuList;
|
23
21
|
exports["default"] = Cascader.Cascader;
|
24
|
-
//# sourceMappingURL=index.js.map
|