@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.
- package/lib/cjs/Cascader.js +51 -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 +38 -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,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[
|
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[
|
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[
|
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
|
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[
|
401
|
-
|
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
|
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[
|
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[
|
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[
|
335
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
433
336
|
key: id,
|
434
337
|
className: "title__text--col"
|
435
|
-
}, beforeStr, /*#__PURE__*/React__default[
|
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;
|
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
|