@hi-ui/cascader 4.0.0-beta.9 → 4.0.0

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.
Files changed (51) hide show
  1. package/lib/cjs/Cascader.js +47 -150
  2. package/lib/cjs/CascaderMenuList.js +172 -0
  3. package/lib/cjs/context.js +1 -2
  4. package/lib/cjs/hooks/use-async-switch.js +5 -6
  5. package/lib/cjs/hooks/use-cache/lib/esm/index.js +2 -3
  6. package/lib/cjs/hooks/use-select.js +1 -2
  7. package/lib/cjs/icons/index.js +4 -5
  8. package/lib/cjs/index.js +1 -4
  9. package/lib/cjs/styles/index.scss.js +3 -4
  10. package/lib/cjs/use-cascader.js +3 -3
  11. package/lib/cjs/utils/index.js +30 -2
  12. package/lib/esm/Cascader.js +35 -139
  13. package/lib/esm/CascaderMenuList.js +146 -0
  14. package/lib/esm/context.js +1 -2
  15. package/lib/esm/hooks/use-async-switch.js +1 -2
  16. package/lib/esm/hooks/use-cache/lib/esm/index.js +2 -3
  17. package/lib/esm/hooks/use-select.js +1 -2
  18. package/lib/esm/icons/index.js +1 -2
  19. package/lib/esm/index.js +2 -3
  20. package/lib/esm/styles/index.scss.js +4 -6
  21. package/lib/esm/use-cascader.js +3 -3
  22. package/lib/esm/utils/index.js +30 -3
  23. package/lib/types/Cascader.d.ts +6 -12
  24. package/lib/types/CascaderMenuList.d.ts +13 -0
  25. package/lib/types/context.d.ts +7 -7
  26. package/lib/types/hooks/use-select.d.ts +2 -2
  27. package/lib/types/index.d.ts +1 -0
  28. package/lib/types/types.d.ts +15 -18
  29. package/lib/types/use-cascader.d.ts +6 -7
  30. package/lib/types/utils/index.d.ts +8 -7
  31. package/package.json +25 -23
  32. package/lib/cjs/Cascader.js.map +0 -1
  33. package/lib/cjs/context.js.map +0 -1
  34. package/lib/cjs/hooks/use-async-switch.js.map +0 -1
  35. package/lib/cjs/hooks/use-cache/lib/esm/index.js.map +0 -1
  36. package/lib/cjs/hooks/use-select.js.map +0 -1
  37. package/lib/cjs/icons/index.js.map +0 -1
  38. package/lib/cjs/index.js.map +0 -1
  39. package/lib/cjs/styles/index.scss.js.map +0 -1
  40. package/lib/cjs/use-cascader.js.map +0 -1
  41. package/lib/cjs/utils/index.js.map +0 -1
  42. package/lib/esm/Cascader.js.map +0 -1
  43. package/lib/esm/context.js.map +0 -1
  44. package/lib/esm/hooks/use-async-switch.js.map +0 -1
  45. package/lib/esm/hooks/use-cache/lib/esm/index.js.map +0 -1
  46. package/lib/esm/hooks/use-select.js.map +0 -1
  47. package/lib/esm/icons/index.js.map +0 -1
  48. package/lib/esm/index.js.map +0 -1
  49. package/lib/esm/styles/index.scss.js.map +0 -1
  50. package/lib/esm/use-cascader.js.map +0 -1
  51. package/lib/esm/utils/index.js.map +0 -1
@@ -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) HIUI <mi-hiui@xiaomi.com>.
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,10 +47,14 @@ 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 localeContext = require('@hi-ui/locale-context');
50
+ var core = require('@hi-ui/core');
53
51
 
54
52
  var funcUtils = require('@hi-ui/func-utils');
55
53
 
54
+ var CascaderMenuList = require('./CascaderMenuList.js');
55
+
56
+ var Highlighter = require('@hi-ui/highlighter');
57
+
56
58
  function _interopDefaultLegacy(e) {
57
59
  return e && _typeof(e) === 'object' && 'default' in e ? e : {
58
60
  'default': e
@@ -61,6 +63,8 @@ function _interopDefaultLegacy(e) {
61
63
 
62
64
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
63
65
 
66
+ var Highlighter__default = /*#__PURE__*/_interopDefaultLegacy(Highlighter);
67
+
64
68
  var _prefix = classname.getPrefixCls('cascader');
65
69
 
66
70
  var NOOP_ARRAY = [];
@@ -95,15 +99,18 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
95
99
  overlayClassName = props.overlayClassName,
96
100
  _props$data = props.data,
97
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,
98
105
  onOpen = props.onOpen,
99
106
  onClose = props.onClose,
100
- rest = tslib.__rest(props, ["prefixCls", "className", "placeholder", "disabled", "clearable", "type", "fieldNames", "expandTrigger", "displayRender", "onSelect", "onLoadChildren", "appearance", "invalid", "filterOption", "searchable", "onSearch", "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"]);
101
108
 
102
- var i18n = localeContext.useLocaleContext();
109
+ var i18n = core.useLocaleContext();
103
110
  var placeholder = typeAssertion.isUndef(placeholderProp) ? i18n.get('cascader.placeholder') : placeholderProp;
104
- var flatted = type === 'flatted';
105
111
 
106
112
  var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
113
+ visible: visible,
107
114
  disabled: disabled,
108
115
  onOpen: onOpen,
109
116
  onClose: onClose
@@ -129,7 +136,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
129
136
  var highlight = !!searchValue && searchMode === 'upMatch';
130
137
 
131
138
  if (highlight) {
132
- return renderHighlightTitle(searchValue, node, titleRender);
139
+ return flattedSearchResult ? renderHighlightTitles(searchValue, node, titleRender) : renderHighlightTitle(searchValue, node, titleRender);
133
140
  }
134
141
 
135
142
  return typeAssertion.isFunction(titleRender) ? titleRender(node) : true;
@@ -152,9 +159,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
152
159
  data: cascaderData,
153
160
  flattedData: flattedData,
154
161
  enabled: searchableProp,
155
- exclude: function exclude(option) {
156
- return index$1.checkCanLoadChildren(option, onLoadChildren);
157
- }
162
+ exclude: function exclude(node) {
163
+ return node.disabled;
164
+ } // exclude: (option: FlattedCascaderDataItem) => {
165
+ // return checkCanLoadChildren(option, onLoadChildren)
166
+ // },
167
+
158
168
  });
159
169
 
160
170
  var _useSearchMode = useSearchMode.useSearchMode({
@@ -187,16 +197,19 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
187
197
 
188
198
  return acc;
189
199
  }, []);
190
- return /*#__PURE__*/React__default['default'].createElement("span", {
200
+ return /*#__PURE__*/React__default["default"].createElement("span", {
191
201
  className: "title__text"
192
202
  }, mergedTitle);
193
203
  };
194
204
 
205
+ var shouldUseSearch = !!searchValue; // 搜索的结果列表也采用 flatted 模式进行展示
206
+
207
+ var flatted = shouldUseSearch ? flattedSearchResult : type === 'flatted';
208
+
195
209
  var _a = useCascader.useCascader(Object.assign(Object.assign({}, rest), {
196
210
  disabled: disabled,
197
211
  fieldNames: fieldNames,
198
- // 搜索的结果列表也采用 flatted 模式进行展示
199
- flatted: flatted || !!searchValue,
212
+ flatted: flatted,
200
213
  onSelect: onSelect,
201
214
  onLoadChildren: onLoadChildren,
202
215
  data: data,
@@ -213,14 +226,17 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
213
226
  reset = context$1.reset,
214
227
  menuList = context$1.menuList,
215
228
  getItemRequiredProps = context$1.getItemRequiredProps;
216
- var shouldUseSearch = !!searchValue;
217
229
  var showData = React.useMemo(function () {
218
230
  if (shouldUseSearch) {
231
+ if (!flattedSearchResult) {
232
+ return index$1.getFilteredMenuList(menuList, stateInSearch.data);
233
+ }
234
+
219
235
  return typeAssertion.isArrayNonEmpty(stateInSearch.data) ? [stateInSearch.data] : [];
220
236
  }
221
237
 
222
238
  return menuList;
223
- }, [shouldUseSearch, stateInSearch.data, menuList]);
239
+ }, [shouldUseSearch, flattedSearchResult, stateInSearch.data, menuList]);
224
240
  React.useEffect(function () {
225
241
  // 关闭展示后,重置展开要高亮的选项
226
242
  if (!menuVisible) {
@@ -237,13 +253,13 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
237
253
  return flattedData;
238
254
  }, [selectedItem, flattedData]);
239
255
  var cls = classname.cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed'));
240
- return /*#__PURE__*/React__default['default'].createElement(context.CascaderProvider, {
256
+ return /*#__PURE__*/React__default["default"].createElement(context.CascaderProvider, {
241
257
  value: Object.assign(Object.assign({}, context$1), {
242
258
  expandTrigger: expandTrigger,
243
259
  titleRender: proxyTitleRender,
244
260
  menuList: showData
245
261
  })
246
- }, /*#__PURE__*/React__default['default'].createElement(picker.Picker, Object.assign({
262
+ }, /*#__PURE__*/React__default["default"].createElement(picker.Picker, Object.assign({
247
263
  ref: ref,
248
264
  className: cls,
249
265
  overlayClassName: classname.cx(prefixCls + "__popper", overlayClassName)
@@ -258,11 +274,11 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
258
274
  onClose: menuVisibleAction.off,
259
275
  searchable: searchable,
260
276
  onSearch: funcUtils.callAllFuncs(onSearchProp, onSearch),
261
- trigger: /*#__PURE__*/React__default['default'].createElement(input.MockInput, {
277
+ trigger: /*#__PURE__*/React__default["default"].createElement(input.MockInput, {
262
278
  clearable: clearable,
263
279
  placeholder: placeholder,
264
280
  displayRender: displayRender,
265
- suffix: menuVisible ? /*#__PURE__*/React__default['default'].createElement(icons.UpOutlined, null) : /*#__PURE__*/React__default['default'].createElement(icons.DownOutlined, null),
281
+ suffix: menuVisible ? /*#__PURE__*/React__default["default"].createElement(icons.UpOutlined, null) : /*#__PURE__*/React__default["default"].createElement(icons.DownOutlined, null),
266
282
  focused: menuVisible,
267
283
  value: value[value.length - 1],
268
284
  onChange: function onChange() {
@@ -272,140 +288,24 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
272
288
  invalid: invalid,
273
289
  appearance: appearance
274
290
  })
275
- }), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default['default'].createElement(CascaderMenuList, null) : null));
291
+ }), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default["default"].createElement(CascaderMenuList.CascaderMenuList, null) : null));
276
292
  });
277
293
 
278
294
  if (env.__DEV__) {
279
295
  Cascader.displayName = 'Cascader';
280
296
  }
281
297
 
282
- var menuListPrefix = classname.getPrefixCls('cascader-menu-list');
283
- var CascaderMenuList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
284
- var _a$prefixCls = _a.prefixCls,
285
- prefixCls = _a$prefixCls === void 0 ? menuListPrefix : _a$prefixCls,
286
- className = _a.className,
287
- rest = tslib.__rest(_a, ["prefixCls", "className"]);
288
-
289
- var _useCascaderContext = context.useCascaderContext(),
290
- flatted = _useCascaderContext.flatted,
291
- menuList = _useCascaderContext.menuList;
292
-
293
- var cls = classname.cx(prefixCls, className, flatted && prefixCls + "--flatted");
294
- return /*#__PURE__*/React__default['default'].createElement("div", Object.assign({
295
- ref: ref,
296
- className: cls
297
- }, rest), menuList.map(function (menu, menuIndex) {
298
- // @ts-ignore
299
- return typeAssertion.isArrayNonEmpty(menu) ? /*#__PURE__*/React__default['default'].createElement(CascaderMenu, {
300
- key: menuIndex,
301
- data: menu
302
- }) : null;
303
- }));
304
- });
305
-
306
- if (env.__DEV__) {
307
- CascaderMenuList.displayName = 'CascaderMenuList';
308
- }
309
-
310
- var menuPrefix = classname.getPrefixCls('cascader-menu');
311
-
312
- var CascaderMenu = function CascaderMenu(_ref2) {
313
- var _ref2$prefixCls = _ref2.prefixCls,
314
- prefixCls = _ref2$prefixCls === void 0 ? menuPrefix : _ref2$prefixCls,
315
- _ref2$role = _ref2.role,
316
- role = _ref2$role === void 0 ? 'menu' : _ref2$role,
317
- className = _ref2.className,
318
- menu = _ref2.data;
319
-
320
- var _useCascaderContext2 = context.useCascaderContext(),
321
- flatted = _useCascaderContext2.flatted,
322
- disabledContext = _useCascaderContext2.disabled,
323
- expandTrigger = _useCascaderContext2.expandTrigger,
324
- onItemClick = _useCascaderContext2.onItemClick,
325
- onItemHover = _useCascaderContext2.onItemHover,
326
- titleRender = _useCascaderContext2.titleRender,
327
- onLoadChildren = _useCascaderContext2.onLoadChildren,
328
- getItemRequiredProps = _useCascaderContext2.getItemRequiredProps;
329
-
330
- var cls = classname.cx(prefixCls, className);
331
- return /*#__PURE__*/React__default['default'].createElement("ul", {
332
- className: cls,
333
- role: role
334
- }, menu.map(function (option) {
335
- var eventOption = index$1.getItemEventData(option, getItemRequiredProps(option));
336
- var selected = eventOption.selected,
337
- loading = eventOption.loading;
338
- var disabled = disabledContext || option.disabled;
339
- var optionCls = classname.cx(prefixCls + "-option", loading && prefixCls + "-option--loading", disabled && prefixCls + "-option--disabled", selected && prefixCls + "-option--selected");
340
- return /*#__PURE__*/React__default['default'].createElement("li", {
341
- key: option.id,
342
- role: "menu-item",
343
- className: prefixCls + "-item"
344
- }, /*#__PURE__*/React__default['default'].createElement("div", {
345
- className: optionCls,
346
- onClick: function onClick() {
347
- if (disabled) return;
348
- onItemClick(eventOption);
349
- },
350
- onMouseEnter: function onMouseEnter() {
351
- if (disabled) return;
352
-
353
- if (expandTrigger === 'hover') {
354
- onItemHover(eventOption);
355
- }
356
- }
357
- }, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
358
- }));
359
- };
360
- /**
361
- * 渲染菜单子项的展开提示图标
362
- */
363
-
364
-
365
- var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildren) {
366
- if (loading) {
367
- return /*#__PURE__*/React__default['default'].createElement("span", {
368
- className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--loading")
369
- }, index$2.defaultLoadingIcon);
370
- }
371
-
372
- var canLoadChildren = index$1.checkCanLoadChildren(item, onLoadChildren);
373
-
374
- if (canLoadChildren) {
375
- return /*#__PURE__*/React__default['default'].createElement("span", {
376
- className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--arrow")
377
- }, index$2.defaultSuffixIcon);
378
- }
379
-
380
- return /*#__PURE__*/React__default['default'].createElement("span", {
381
- className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--noop")
382
- }, index$2.defaultLeafIcon);
383
- };
384
-
385
- var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
386
- // 如果 titleRender 返回 `true`,则使用默认 title
387
- var title = titleRender ? titleRender(option) : true;
388
- if (title !== true) return title;
389
- return /*#__PURE__*/React__default['default'].createElement("span", {
390
- className: "title__text title__text--cols"
391
- }, treeUtils.getTopDownAncestors(option).map(function (item) {
392
- return /*#__PURE__*/React__default['default'].createElement("span", {
393
- key: item.id,
394
- className: "title__text--col"
395
- }, item.title);
396
- }));
397
- };
398
-
399
- var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
298
+ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
400
299
  // 如果 titleRender 返回 `true`,则使用默认 title
401
- var title = titleRender ? titleRender(option) : true;
300
+ var title = titleRender ? titleRender(option, keyword) : true;
402
301
  if (title !== true) return title;
403
- return /*#__PURE__*/React__default['default'].createElement("span", {
404
- className: "title__text"
302
+ return /*#__PURE__*/React__default["default"].createElement(Highlighter__default["default"], {
303
+ key: option.id,
304
+ keyword: keyword
405
305
  }, option.title);
406
306
  };
407
307
 
408
- var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
308
+ var renderHighlightTitles = function renderHighlightTitles(keyword, option, titleRender) {
409
309
  // 如果 titleRender 返回 `true`,则使用默认 title
410
310
  var title = titleRender ? titleRender(option, keyword) : true;
411
311
  if (title !== true) return title;
@@ -416,12 +316,12 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
416
316
  }
417
317
 
418
318
  var found = false;
419
- return /*#__PURE__*/React__default['default'].createElement("span", {
319
+ return /*#__PURE__*/React__default["default"].createElement("span", {
420
320
  className: classname.cx("title__text", "title__text--cols")
421
321
  }, treeUtils.getNodeAncestorsWithMe(option).map(function (item) {
422
322
  var title = item.title,
423
323
  id = item.id;
424
- var raw = /*#__PURE__*/React__default['default'].createElement("span", {
324
+ var raw = /*#__PURE__*/React__default["default"].createElement("span", {
425
325
  className: "title__text--col",
426
326
  key: id
427
327
  }, title);
@@ -432,16 +332,13 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
432
332
  found = true;
433
333
  var beforeStr = title.substr(0, index);
434
334
  var afterStr = title.substr(index + keyword.length);
435
- return /*#__PURE__*/React__default['default'].createElement("span", {
335
+ return /*#__PURE__*/React__default["default"].createElement("span", {
436
336
  key: id,
437
337
  className: "title__text--col"
438
- }, beforeStr, /*#__PURE__*/React__default['default'].createElement("span", {
338
+ }, beforeStr, /*#__PURE__*/React__default["default"].createElement("span", {
439
339
  className: "title__text--matched"
440
340
  }, keyword), afterStr);
441
341
  }).reverse());
442
342
  };
443
343
 
444
344
  exports.Cascader = Cascader;
445
- exports.CascaderMenu = CascaderMenu;
446
- exports.CascaderMenuList = CascaderMenuList;
447
- //# 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;
@@ -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) HIUI <mi-hiui@xiaomi.com>.
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) HIUI <mi-hiui@xiaomi.com>.
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['default'].mark(function _callee() {
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['default'].wrap(function _callee$(_context) {
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['default'].mark(function _callee2() {
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['default'].wrap(function _callee2$(_context2) {
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) HIUI <mi-hiui@xiaomi.com>.
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) HIUI <mi-hiui@xiaomi.com>.
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) HIUI <mi-hiui@xiaomi.com>.
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
@@ -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) HIUI <mi-hiui@xiaomi.com>.
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['default'].createElement(icons.DownOutlined, null);
33
- var defaultLeafIcon = /*#__PURE__*/React__default['default'].createElement("span", {
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['default'].createElement(spinner.Spinner, null);
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) HIUI <mi-hiui@xiaomi.com>.
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