@hi-ui/cascader 4.0.0-beta.7 → 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 +51 -151
  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 +38 -140
  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 -22
  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,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 localeContext = require('@hi-ui/locale-context');
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 = localeContext.useLocaleContext();
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(option) {
153
- return index$1.checkCanLoadChildren(option, onLoadChildren);
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['default'].createElement("span", {
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
- // 搜索的结果列表也采用 flatted 模式进行展示
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['default'].createElement(context.CascaderProvider, {
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['default'].createElement(picker.Picker, Object.assign({
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,12 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
254
273
  onOpen: menuVisibleAction.on,
255
274
  onClose: menuVisibleAction.off,
256
275
  searchable: searchable,
257
- onSearch: onSearch,
258
- trigger: /*#__PURE__*/React__default['default'].createElement(input.MockInput, {
276
+ onSearch: funcUtils.callAllFuncs(onSearchProp, onSearch),
277
+ trigger: /*#__PURE__*/React__default["default"].createElement(input.MockInput, {
259
278
  clearable: clearable,
260
279
  placeholder: placeholder,
261
280
  displayRender: displayRender,
262
- 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),
263
282
  focused: menuVisible,
264
283
  value: value[value.length - 1],
265
284
  onChange: function onChange() {
@@ -269,140 +288,24 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
269
288
  invalid: invalid,
270
289
  appearance: appearance
271
290
  })
272
- }), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default['default'].createElement(CascaderMenuList, null) : null));
291
+ }), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default["default"].createElement(CascaderMenuList.CascaderMenuList, null) : null));
273
292
  });
274
293
 
275
294
  if (env.__DEV__) {
276
295
  Cascader.displayName = 'Cascader';
277
296
  }
278
297
 
279
- var menuListPrefix = classname.getPrefixCls('cascader-menu-list');
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) {
298
+ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
397
299
  // 如果 titleRender 返回 `true`,则使用默认 title
398
- var title = titleRender ? titleRender(option) : true;
300
+ var title = titleRender ? titleRender(option, keyword) : true;
399
301
  if (title !== true) return title;
400
- return /*#__PURE__*/React__default['default'].createElement("span", {
401
- className: "title__text"
302
+ return /*#__PURE__*/React__default["default"].createElement(Highlighter__default["default"], {
303
+ key: option.id,
304
+ keyword: keyword
402
305
  }, option.title);
403
306
  };
404
307
 
405
- var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
308
+ var renderHighlightTitles = function renderHighlightTitles(keyword, option, titleRender) {
406
309
  // 如果 titleRender 返回 `true`,则使用默认 title
407
310
  var title = titleRender ? titleRender(option, keyword) : true;
408
311
  if (title !== true) return title;
@@ -413,12 +316,12 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
413
316
  }
414
317
 
415
318
  var found = false;
416
- return /*#__PURE__*/React__default['default'].createElement("span", {
319
+ return /*#__PURE__*/React__default["default"].createElement("span", {
417
320
  className: classname.cx("title__text", "title__text--cols")
418
321
  }, treeUtils.getNodeAncestorsWithMe(option).map(function (item) {
419
322
  var title = item.title,
420
323
  id = item.id;
421
- var raw = /*#__PURE__*/React__default['default'].createElement("span", {
324
+ var raw = /*#__PURE__*/React__default["default"].createElement("span", {
422
325
  className: "title__text--col",
423
326
  key: id
424
327
  }, title);
@@ -429,16 +332,13 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
429
332
  found = true;
430
333
  var beforeStr = title.substr(0, index);
431
334
  var afterStr = title.substr(index + keyword.length);
432
- return /*#__PURE__*/React__default['default'].createElement("span", {
335
+ return /*#__PURE__*/React__default["default"].createElement("span", {
433
336
  key: id,
434
337
  className: "title__text--col"
435
- }, beforeStr, /*#__PURE__*/React__default['default'].createElement("span", {
338
+ }, beforeStr, /*#__PURE__*/React__default["default"].createElement("span", {
436
339
  className: "title__text--matched"
437
340
  }, keyword), afterStr);
438
341
  }).reverse());
439
342
  };
440
343
 
441
344
  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;
@@ -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