@hi-ui/cascader 4.0.0-beta.24 → 4.0.0-beta.27
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 +3 -131
- package/lib/cjs/CascaderMenuList.js +171 -0
- package/lib/cjs/index.js +0 -2
- package/lib/esm/Cascader.js +3 -129
- package/lib/esm/CascaderMenuList.js +145 -0
- package/lib/esm/index.js +1 -1
- package/lib/types/Cascader.d.ts +3 -13
- 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/types.d.ts +14 -14
- package/lib/types/use-cascader.d.ts +6 -7
- package/lib/types/utils/index.d.ts +7 -7
- package/package.json +9 -9
package/lib/cjs/Cascader.js
CHANGED
@@ -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');
|
@@ -53,6 +51,8 @@ var localeContext = require('@hi-ui/locale-context');
|
|
53
51
|
|
54
52
|
var funcUtils = require('@hi-ui/func-utils');
|
55
53
|
|
54
|
+
var CascaderMenuList = require('./CascaderMenuList.js');
|
55
|
+
|
56
56
|
function _interopDefaultLegacy(e) {
|
57
57
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
58
58
|
'default': e
|
@@ -272,139 +272,13 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
272
272
|
invalid: invalid,
|
273
273
|
appearance: appearance
|
274
274
|
})
|
275
|
-
}), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default["default"].createElement(CascaderMenuList, null) : null));
|
275
|
+
}), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default["default"].createElement(CascaderMenuList.CascaderMenuList, null) : null));
|
276
276
|
});
|
277
277
|
|
278
278
|
if (env.__DEV__) {
|
279
279
|
Cascader.displayName = 'Cascader';
|
280
280
|
}
|
281
281
|
|
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) {
|
400
|
-
// 如果 titleRender 返回 `true`,则使用默认 title
|
401
|
-
var title = titleRender ? titleRender(option) : true;
|
402
|
-
if (title !== true) return title;
|
403
|
-
return /*#__PURE__*/React__default["default"].createElement("span", {
|
404
|
-
className: "title__text"
|
405
|
-
}, option.title);
|
406
|
-
};
|
407
|
-
|
408
282
|
var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
|
409
283
|
// 如果 titleRender 返回 `true`,则使用默认 title
|
410
284
|
var title = titleRender ? titleRender(option, keyword) : true;
|
@@ -442,5 +316,3 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
|
|
442
316
|
};
|
443
317
|
|
444
318
|
exports.Cascader = Cascader;
|
445
|
-
exports.CascaderMenu = CascaderMenu;
|
446
|
-
exports.CascaderMenuList = CascaderMenuList;
|
@@ -0,0 +1,171 @@
|
|
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
|
+
var disabled = disabledContext || option.disabled;
|
101
|
+
var optionCls = classname.cx(prefixCls + "-option", loading && prefixCls + "-option--loading", disabled && prefixCls + "-option--disabled", selected && prefixCls + "-option--selected");
|
102
|
+
return /*#__PURE__*/React__default["default"].createElement("li", {
|
103
|
+
key: option.id,
|
104
|
+
role: "menu-item",
|
105
|
+
className: prefixCls + "-item"
|
106
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
107
|
+
className: optionCls,
|
108
|
+
onClick: function onClick() {
|
109
|
+
if (disabled) return;
|
110
|
+
onItemClick(eventOption);
|
111
|
+
},
|
112
|
+
onMouseEnter: function onMouseEnter() {
|
113
|
+
if (disabled) return;
|
114
|
+
|
115
|
+
if (expandTrigger === 'hover') {
|
116
|
+
onItemHover(eventOption);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
|
120
|
+
}));
|
121
|
+
};
|
122
|
+
/**
|
123
|
+
* 渲染菜单子项的展开提示图标
|
124
|
+
*/
|
125
|
+
|
126
|
+
|
127
|
+
var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildren) {
|
128
|
+
if (loading) {
|
129
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
130
|
+
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--loading")
|
131
|
+
}, index$1.defaultLoadingIcon);
|
132
|
+
}
|
133
|
+
|
134
|
+
var canLoadChildren = index.checkCanLoadChildren(item, onLoadChildren);
|
135
|
+
|
136
|
+
if (canLoadChildren) {
|
137
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
138
|
+
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--arrow")
|
139
|
+
}, index$1.defaultSuffixIcon);
|
140
|
+
}
|
141
|
+
|
142
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
143
|
+
className: classname.cx(prefixCls + "-switcher", prefixCls + "-switcher--noop")
|
144
|
+
}, index$1.defaultLeafIcon);
|
145
|
+
};
|
146
|
+
|
147
|
+
var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
|
148
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
149
|
+
var title = titleRender ? titleRender(option) : true;
|
150
|
+
if (title !== true) return title;
|
151
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
152
|
+
className: "title__text title__text--cols"
|
153
|
+
}, treeUtils.getTopDownAncestors(option).map(function (item) {
|
154
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
155
|
+
key: item.id,
|
156
|
+
className: "title__text--col"
|
157
|
+
}, item.title);
|
158
|
+
}));
|
159
|
+
};
|
160
|
+
|
161
|
+
var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
|
162
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
163
|
+
var title = titleRender ? titleRender(option) : true;
|
164
|
+
if (title !== true) return title;
|
165
|
+
return /*#__PURE__*/React__default["default"].createElement("span", {
|
166
|
+
className: "title__text"
|
167
|
+
}, option.title);
|
168
|
+
};
|
169
|
+
|
170
|
+
exports.CascaderMenu = CascaderMenu;
|
171
|
+
exports.CascaderMenuList = CascaderMenuList;
|
package/lib/cjs/index.js
CHANGED
@@ -18,6 +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;
|
package/lib/esm/Cascader.js
CHANGED
@@ -15,9 +15,8 @@ import { useUncontrolledToggle } from '@hi-ui/use-toggle';
|
|
15
15
|
import { useCascader } from './use-cascader.js';
|
16
16
|
import { MockInput } from '@hi-ui/input';
|
17
17
|
import { UpOutlined, DownOutlined } from '@hi-ui/icons';
|
18
|
-
import { defaultLoadingIcon, defaultSuffixIcon, defaultLeafIcon } from './icons/index.js';
|
19
18
|
import { flattenTreeData, checkCanLoadChildren, getItemEventData } from './utils/index.js';
|
20
|
-
import { CascaderProvider
|
19
|
+
import { CascaderProvider } from './context.js';
|
21
20
|
import { getTopDownAncestors, getNodeAncestorsWithMe } from '@hi-ui/tree-utils';
|
22
21
|
import { isUndef, isArrayNonEmpty, isFunction } from '@hi-ui/type-assertion';
|
23
22
|
import { Picker } from '@hi-ui/picker';
|
@@ -26,6 +25,7 @@ import { uniqBy } from '@hi-ui/array-utils';
|
|
26
25
|
import { useCache } from './hooks/use-cache/lib/esm/index.js';
|
27
26
|
import { useLocaleContext } from '@hi-ui/locale-context';
|
28
27
|
import { callAllFuncs } from '@hi-ui/func-utils';
|
28
|
+
import { CascaderMenuList } from './CascaderMenuList.js';
|
29
29
|
|
30
30
|
var _prefix = getPrefixCls('cascader');
|
31
31
|
|
@@ -245,132 +245,6 @@ if (__DEV__) {
|
|
245
245
|
Cascader.displayName = 'Cascader';
|
246
246
|
}
|
247
247
|
|
248
|
-
var menuListPrefix = getPrefixCls('cascader-menu-list');
|
249
|
-
var CascaderMenuList = /*#__PURE__*/forwardRef(function (_a, ref) {
|
250
|
-
var _a$prefixCls = _a.prefixCls,
|
251
|
-
prefixCls = _a$prefixCls === void 0 ? menuListPrefix : _a$prefixCls,
|
252
|
-
className = _a.className,
|
253
|
-
rest = __rest(_a, ["prefixCls", "className"]);
|
254
|
-
|
255
|
-
var _useCascaderContext = useCascaderContext(),
|
256
|
-
flatted = _useCascaderContext.flatted,
|
257
|
-
menuList = _useCascaderContext.menuList;
|
258
|
-
|
259
|
-
var cls = cx(prefixCls, className, flatted && prefixCls + "--flatted");
|
260
|
-
return /*#__PURE__*/React.createElement("div", Object.assign({
|
261
|
-
ref: ref,
|
262
|
-
className: cls
|
263
|
-
}, rest), menuList.map(function (menu, menuIndex) {
|
264
|
-
// @ts-ignore
|
265
|
-
return isArrayNonEmpty(menu) ? /*#__PURE__*/React.createElement(CascaderMenu, {
|
266
|
-
key: menuIndex,
|
267
|
-
data: menu
|
268
|
-
}) : null;
|
269
|
-
}));
|
270
|
-
});
|
271
|
-
|
272
|
-
if (__DEV__) {
|
273
|
-
CascaderMenuList.displayName = 'CascaderMenuList';
|
274
|
-
}
|
275
|
-
|
276
|
-
var menuPrefix = getPrefixCls('cascader-menu');
|
277
|
-
|
278
|
-
var CascaderMenu = function CascaderMenu(_ref2) {
|
279
|
-
var _ref2$prefixCls = _ref2.prefixCls,
|
280
|
-
prefixCls = _ref2$prefixCls === void 0 ? menuPrefix : _ref2$prefixCls,
|
281
|
-
_ref2$role = _ref2.role,
|
282
|
-
role = _ref2$role === void 0 ? 'menu' : _ref2$role,
|
283
|
-
className = _ref2.className,
|
284
|
-
menu = _ref2.data;
|
285
|
-
|
286
|
-
var _useCascaderContext2 = useCascaderContext(),
|
287
|
-
flatted = _useCascaderContext2.flatted,
|
288
|
-
disabledContext = _useCascaderContext2.disabled,
|
289
|
-
expandTrigger = _useCascaderContext2.expandTrigger,
|
290
|
-
onItemClick = _useCascaderContext2.onItemClick,
|
291
|
-
onItemHover = _useCascaderContext2.onItemHover,
|
292
|
-
titleRender = _useCascaderContext2.titleRender,
|
293
|
-
onLoadChildren = _useCascaderContext2.onLoadChildren,
|
294
|
-
getItemRequiredProps = _useCascaderContext2.getItemRequiredProps;
|
295
|
-
|
296
|
-
var cls = cx(prefixCls, className);
|
297
|
-
return /*#__PURE__*/React.createElement("ul", {
|
298
|
-
className: cls,
|
299
|
-
role: role
|
300
|
-
}, menu.map(function (option) {
|
301
|
-
var eventOption = getItemEventData(option, getItemRequiredProps(option));
|
302
|
-
var selected = eventOption.selected,
|
303
|
-
loading = eventOption.loading;
|
304
|
-
var disabled = disabledContext || option.disabled;
|
305
|
-
var optionCls = cx(prefixCls + "-option", loading && prefixCls + "-option--loading", disabled && prefixCls + "-option--disabled", selected && prefixCls + "-option--selected");
|
306
|
-
return /*#__PURE__*/React.createElement("li", {
|
307
|
-
key: option.id,
|
308
|
-
role: "menu-item",
|
309
|
-
className: prefixCls + "-item"
|
310
|
-
}, /*#__PURE__*/React.createElement("div", {
|
311
|
-
className: optionCls,
|
312
|
-
onClick: function onClick() {
|
313
|
-
if (disabled) return;
|
314
|
-
onItemClick(eventOption);
|
315
|
-
},
|
316
|
-
onMouseEnter: function onMouseEnter() {
|
317
|
-
if (disabled) return;
|
318
|
-
|
319
|
-
if (expandTrigger === 'hover') {
|
320
|
-
onItemHover(eventOption);
|
321
|
-
}
|
322
|
-
}
|
323
|
-
}, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React.createElement(React.Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
|
324
|
-
}));
|
325
|
-
};
|
326
|
-
/**
|
327
|
-
* 渲染菜单子项的展开提示图标
|
328
|
-
*/
|
329
|
-
|
330
|
-
|
331
|
-
var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildren) {
|
332
|
-
if (loading) {
|
333
|
-
return /*#__PURE__*/React.createElement("span", {
|
334
|
-
className: cx(prefixCls + "-switcher", prefixCls + "-switcher--loading")
|
335
|
-
}, defaultLoadingIcon);
|
336
|
-
}
|
337
|
-
|
338
|
-
var canLoadChildren = checkCanLoadChildren(item, onLoadChildren);
|
339
|
-
|
340
|
-
if (canLoadChildren) {
|
341
|
-
return /*#__PURE__*/React.createElement("span", {
|
342
|
-
className: cx(prefixCls + "-switcher", prefixCls + "-switcher--arrow")
|
343
|
-
}, defaultSuffixIcon);
|
344
|
-
}
|
345
|
-
|
346
|
-
return /*#__PURE__*/React.createElement("span", {
|
347
|
-
className: cx(prefixCls + "-switcher", prefixCls + "-switcher--noop")
|
348
|
-
}, defaultLeafIcon);
|
349
|
-
};
|
350
|
-
|
351
|
-
var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
|
352
|
-
// 如果 titleRender 返回 `true`,则使用默认 title
|
353
|
-
var title = titleRender ? titleRender(option) : true;
|
354
|
-
if (title !== true) return title;
|
355
|
-
return /*#__PURE__*/React.createElement("span", {
|
356
|
-
className: "title__text title__text--cols"
|
357
|
-
}, getTopDownAncestors(option).map(function (item) {
|
358
|
-
return /*#__PURE__*/React.createElement("span", {
|
359
|
-
key: item.id,
|
360
|
-
className: "title__text--col"
|
361
|
-
}, item.title);
|
362
|
-
}));
|
363
|
-
};
|
364
|
-
|
365
|
-
var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
|
366
|
-
// 如果 titleRender 返回 `true`,则使用默认 title
|
367
|
-
var title = titleRender ? titleRender(option) : true;
|
368
|
-
if (title !== true) return title;
|
369
|
-
return /*#__PURE__*/React.createElement("span", {
|
370
|
-
className: "title__text"
|
371
|
-
}, option.title);
|
372
|
-
};
|
373
|
-
|
374
248
|
var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
|
375
249
|
// 如果 titleRender 返回 `true`,则使用默认 title
|
376
250
|
var title = titleRender ? titleRender(option, keyword) : true;
|
@@ -407,4 +281,4 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
|
|
407
281
|
}).reverse());
|
408
282
|
};
|
409
283
|
|
410
|
-
export { Cascader
|
284
|
+
export { Cascader };
|
@@ -0,0 +1,145 @@
|
|
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
|
+
import { __rest } from 'tslib';
|
11
|
+
import React, { forwardRef } from 'react';
|
12
|
+
import { getPrefixCls, cx } from '@hi-ui/classname';
|
13
|
+
import { __DEV__ } from '@hi-ui/env';
|
14
|
+
import { defaultLoadingIcon, defaultSuffixIcon, defaultLeafIcon } from './icons/index.js';
|
15
|
+
import { getItemEventData, checkCanLoadChildren } from './utils/index.js';
|
16
|
+
import { useCascaderContext } from './context.js';
|
17
|
+
import { getTopDownAncestors } from '@hi-ui/tree-utils';
|
18
|
+
import { isArrayNonEmpty } from '@hi-ui/type-assertion';
|
19
|
+
var menuListPrefix = getPrefixCls('cascader-menu-list');
|
20
|
+
var CascaderMenuList = /*#__PURE__*/forwardRef(function (_a, ref) {
|
21
|
+
var _a$prefixCls = _a.prefixCls,
|
22
|
+
prefixCls = _a$prefixCls === void 0 ? menuListPrefix : _a$prefixCls,
|
23
|
+
className = _a.className,
|
24
|
+
rest = __rest(_a, ["prefixCls", "className"]);
|
25
|
+
|
26
|
+
var _useCascaderContext = useCascaderContext(),
|
27
|
+
flatted = _useCascaderContext.flatted,
|
28
|
+
menuList = _useCascaderContext.menuList;
|
29
|
+
|
30
|
+
var cls = cx(prefixCls, className, flatted && prefixCls + "--flatted");
|
31
|
+
return /*#__PURE__*/React.createElement("div", Object.assign({
|
32
|
+
ref: ref,
|
33
|
+
className: cls
|
34
|
+
}, rest), menuList.map(function (menu, menuIndex) {
|
35
|
+
// @ts-ignore
|
36
|
+
return isArrayNonEmpty(menu) ? /*#__PURE__*/React.createElement(CascaderMenu, {
|
37
|
+
key: menuIndex,
|
38
|
+
data: menu
|
39
|
+
}) : null;
|
40
|
+
}));
|
41
|
+
});
|
42
|
+
|
43
|
+
if (__DEV__) {
|
44
|
+
CascaderMenuList.displayName = 'CascaderMenuList';
|
45
|
+
}
|
46
|
+
|
47
|
+
var menuPrefix = getPrefixCls('cascader-menu');
|
48
|
+
|
49
|
+
var CascaderMenu = function CascaderMenu(_ref) {
|
50
|
+
var _ref$prefixCls = _ref.prefixCls,
|
51
|
+
prefixCls = _ref$prefixCls === void 0 ? menuPrefix : _ref$prefixCls,
|
52
|
+
_ref$role = _ref.role,
|
53
|
+
role = _ref$role === void 0 ? 'menu' : _ref$role,
|
54
|
+
className = _ref.className,
|
55
|
+
menu = _ref.data;
|
56
|
+
|
57
|
+
var _useCascaderContext2 = useCascaderContext(),
|
58
|
+
flatted = _useCascaderContext2.flatted,
|
59
|
+
disabledContext = _useCascaderContext2.disabled,
|
60
|
+
expandTrigger = _useCascaderContext2.expandTrigger,
|
61
|
+
onItemClick = _useCascaderContext2.onItemClick,
|
62
|
+
onItemHover = _useCascaderContext2.onItemHover,
|
63
|
+
titleRender = _useCascaderContext2.titleRender,
|
64
|
+
onLoadChildren = _useCascaderContext2.onLoadChildren,
|
65
|
+
getItemRequiredProps = _useCascaderContext2.getItemRequiredProps;
|
66
|
+
|
67
|
+
var cls = cx(prefixCls, className);
|
68
|
+
return /*#__PURE__*/React.createElement("ul", {
|
69
|
+
className: cls,
|
70
|
+
role: role
|
71
|
+
}, menu.map(function (option) {
|
72
|
+
var eventOption = getItemEventData(option, getItemRequiredProps(option));
|
73
|
+
var selected = eventOption.selected,
|
74
|
+
loading = eventOption.loading;
|
75
|
+
var disabled = disabledContext || option.disabled;
|
76
|
+
var optionCls = cx(prefixCls + "-option", loading && prefixCls + "-option--loading", disabled && prefixCls + "-option--disabled", selected && prefixCls + "-option--selected");
|
77
|
+
return /*#__PURE__*/React.createElement("li", {
|
78
|
+
key: option.id,
|
79
|
+
role: "menu-item",
|
80
|
+
className: prefixCls + "-item"
|
81
|
+
}, /*#__PURE__*/React.createElement("div", {
|
82
|
+
className: optionCls,
|
83
|
+
onClick: function onClick() {
|
84
|
+
if (disabled) return;
|
85
|
+
onItemClick(eventOption);
|
86
|
+
},
|
87
|
+
onMouseEnter: function onMouseEnter() {
|
88
|
+
if (disabled) return;
|
89
|
+
|
90
|
+
if (expandTrigger === 'hover') {
|
91
|
+
onItemHover(eventOption);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React.createElement(React.Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
|
95
|
+
}));
|
96
|
+
};
|
97
|
+
/**
|
98
|
+
* 渲染菜单子项的展开提示图标
|
99
|
+
*/
|
100
|
+
|
101
|
+
|
102
|
+
var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildren) {
|
103
|
+
if (loading) {
|
104
|
+
return /*#__PURE__*/React.createElement("span", {
|
105
|
+
className: cx(prefixCls + "-switcher", prefixCls + "-switcher--loading")
|
106
|
+
}, defaultLoadingIcon);
|
107
|
+
}
|
108
|
+
|
109
|
+
var canLoadChildren = checkCanLoadChildren(item, onLoadChildren);
|
110
|
+
|
111
|
+
if (canLoadChildren) {
|
112
|
+
return /*#__PURE__*/React.createElement("span", {
|
113
|
+
className: cx(prefixCls + "-switcher", prefixCls + "-switcher--arrow")
|
114
|
+
}, defaultSuffixIcon);
|
115
|
+
}
|
116
|
+
|
117
|
+
return /*#__PURE__*/React.createElement("span", {
|
118
|
+
className: cx(prefixCls + "-switcher", prefixCls + "-switcher--noop")
|
119
|
+
}, defaultLeafIcon);
|
120
|
+
};
|
121
|
+
|
122
|
+
var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
|
123
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
124
|
+
var title = titleRender ? titleRender(option) : true;
|
125
|
+
if (title !== true) return title;
|
126
|
+
return /*#__PURE__*/React.createElement("span", {
|
127
|
+
className: "title__text title__text--cols"
|
128
|
+
}, getTopDownAncestors(option).map(function (item) {
|
129
|
+
return /*#__PURE__*/React.createElement("span", {
|
130
|
+
key: item.id,
|
131
|
+
className: "title__text--col"
|
132
|
+
}, item.title);
|
133
|
+
}));
|
134
|
+
};
|
135
|
+
|
136
|
+
var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
|
137
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
138
|
+
var title = titleRender ? titleRender(option) : true;
|
139
|
+
if (title !== true) return title;
|
140
|
+
return /*#__PURE__*/React.createElement("span", {
|
141
|
+
className: "title__text"
|
142
|
+
}, option.title);
|
143
|
+
};
|
144
|
+
|
145
|
+
export { CascaderMenu, CascaderMenuList };
|
package/lib/esm/index.js
CHANGED
package/lib/types/Cascader.d.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import type {
|
2
|
+
import type { HiBaseAppearanceEnum } from '@hi-ui/core';
|
3
3
|
import { UseCascaderProps } from './use-cascader';
|
4
4
|
import type { PopperOverlayProps } from '@hi-ui/popper';
|
5
|
-
import {
|
5
|
+
import { CascaderExpandTriggerEnum, CascaderItemEventData } from './types';
|
6
6
|
import { PickerProps } from '@hi-ui/picker';
|
7
7
|
/**
|
8
8
|
* TODO: What is Cascader
|
@@ -18,7 +18,7 @@ export interface CascaderProps extends Omit<PickerProps, 'data' | 'onChange' | '
|
|
18
18
|
/**
|
19
19
|
* 次级菜单的展开方式
|
20
20
|
*/
|
21
|
-
expandTrigger?:
|
21
|
+
expandTrigger?: CascaderExpandTriggerEnum;
|
22
22
|
/**
|
23
23
|
* 是否可搜索(仅在 title 为字符串时支持)
|
24
24
|
*/
|
@@ -62,13 +62,3 @@ export interface CascaderProps extends Omit<PickerProps, 'data' | 'onChange' | '
|
|
62
62
|
*/
|
63
63
|
appearance?: HiBaseAppearanceEnum;
|
64
64
|
}
|
65
|
-
export declare const CascaderMenuList: React.ForwardRefExoticComponent<Pick<CascaderMenuListProps, string | number> & React.RefAttributes<HTMLDivElement | null>>;
|
66
|
-
export interface CascaderMenuListProps extends HiBaseHTMLProps {
|
67
|
-
}
|
68
|
-
export declare const CascaderMenu: ({ prefixCls, role, className, data: menu, }: CascaderMenuProps) => JSX.Element;
|
69
|
-
export interface CascaderMenuProps extends HiBaseHTMLProps {
|
70
|
-
/**
|
71
|
-
* 设置选择项数据源
|
72
|
-
*/
|
73
|
-
data: FlattedCascaderItem[];
|
74
|
-
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { HiBaseHTMLProps } from '@hi-ui/core';
|
3
|
+
import { FlattedCascaderDataItem } from './types';
|
4
|
+
export declare const CascaderMenuList: React.ForwardRefExoticComponent<Pick<CascaderMenuListProps, string | number> & React.RefAttributes<HTMLDivElement | null>>;
|
5
|
+
export interface CascaderMenuListProps extends HiBaseHTMLProps {
|
6
|
+
}
|
7
|
+
export declare const CascaderMenu: ({ prefixCls, role, className, data: menu, }: CascaderMenuProps) => JSX.Element;
|
8
|
+
export interface CascaderMenuProps extends HiBaseHTMLProps {
|
9
|
+
/**
|
10
|
+
* 设置选择项数据源
|
11
|
+
*/
|
12
|
+
data: FlattedCascaderDataItem[];
|
13
|
+
}
|
package/lib/types/context.d.ts
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { CascaderItemEventData,
|
2
|
+
import { CascaderItemEventData, CascaderExpandTriggerEnum } from './types';
|
3
3
|
export declare const CascaderProvider: React.Provider<(Omit<{
|
4
4
|
rootProps: {};
|
5
5
|
reset: () => void;
|
6
6
|
flattedData: any;
|
7
7
|
value: React.ReactText[];
|
8
8
|
tryChangeValue: (stateOrFunction: React.SetStateAction<React.ReactText[]>, ...args: any[]) => void;
|
9
|
-
getItemRequiredProps: ({ id, depth }: import("./types").
|
9
|
+
getItemRequiredProps: ({ id, depth }: import("./types").FlattedCascaderDataItem) => import("./types").CascaderItemRequiredProps;
|
10
10
|
flatted: boolean;
|
11
11
|
onItemClick: (node: CascaderItemEventData, onlyExpand?: any) => Promise<void>;
|
12
12
|
onItemHover: (option: any) => void;
|
13
13
|
changeOnSelect: boolean;
|
14
14
|
onLoadChildren: ((item: CascaderItemEventData, idPaths: React.ReactText[]) => void | Promise<void | import("./types").CascaderDataItem[]>) | undefined;
|
15
15
|
disabled: boolean;
|
16
|
-
menuList: import("./types").
|
16
|
+
menuList: import("./types").FlattedCascaderDataItem[][];
|
17
17
|
}, "rootProps"> & {
|
18
|
-
expandTrigger:
|
18
|
+
expandTrigger: CascaderExpandTriggerEnum;
|
19
19
|
titleRender: (item: CascaderItemEventData) => React.ReactNode;
|
20
20
|
}) | null>;
|
21
21
|
export declare const useCascaderContext: () => Omit<{
|
@@ -24,15 +24,15 @@ export declare const useCascaderContext: () => Omit<{
|
|
24
24
|
flattedData: any;
|
25
25
|
value: React.ReactText[];
|
26
26
|
tryChangeValue: (stateOrFunction: React.SetStateAction<React.ReactText[]>, ...args: any[]) => void;
|
27
|
-
getItemRequiredProps: ({ id, depth }: import("./types").
|
27
|
+
getItemRequiredProps: ({ id, depth }: import("./types").FlattedCascaderDataItem) => import("./types").CascaderItemRequiredProps;
|
28
28
|
flatted: boolean;
|
29
29
|
onItemClick: (node: CascaderItemEventData, onlyExpand?: any) => Promise<void>;
|
30
30
|
onItemHover: (option: any) => void;
|
31
31
|
changeOnSelect: boolean;
|
32
32
|
onLoadChildren: ((item: CascaderItemEventData, idPaths: React.ReactText[]) => void | Promise<void | import("./types").CascaderDataItem[]>) | undefined;
|
33
33
|
disabled: boolean;
|
34
|
-
menuList: import("./types").
|
34
|
+
menuList: import("./types").FlattedCascaderDataItem[][];
|
35
35
|
}, "rootProps"> & {
|
36
|
-
expandTrigger:
|
36
|
+
expandTrigger: CascaderExpandTriggerEnum;
|
37
37
|
titleRender: (item: CascaderItemEventData) => React.ReactNode;
|
38
38
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { CascaderItemEventData,
|
2
|
+
import { CascaderItemEventData, FlattedCascaderDataItem } from '../types';
|
3
3
|
/**
|
4
4
|
* 用于选中的 hook
|
5
5
|
*/
|
6
|
-
export declare const useSelect: (disabled: boolean, onSelect: (value: React.ReactText, item: CascaderItemEventData, itemPaths:
|
6
|
+
export declare const useSelect: (disabled: boolean, onSelect: (value: React.ReactText, item: CascaderItemEventData, itemPaths: FlattedCascaderDataItem[]) => void, changeOnSelect: boolean, onLoadChildren?: ((item: CascaderItemEventData, idPaths: React.ReactText[]) => void) | undefined) => readonly [React.ReactText, (targetItem: CascaderItemEventData, onlyExpand: boolean) => void, React.Dispatch<React.SetStateAction<React.ReactText>>];
|
package/lib/types/types.d.ts
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
export interface CascaderDataItem extends Record<string, any> {
|
3
3
|
/**
|
4
|
-
*
|
4
|
+
* 选择项值,唯一 id
|
5
5
|
*/
|
6
6
|
id?: React.ReactText;
|
7
7
|
/**
|
8
|
-
*
|
8
|
+
* 选项标题
|
9
9
|
*/
|
10
10
|
title?: React.ReactNode;
|
11
11
|
/**
|
12
|
-
*
|
12
|
+
* 下一级选项列表
|
13
13
|
*/
|
14
14
|
children?: CascaderDataItem[];
|
15
15
|
/**
|
@@ -21,24 +21,24 @@ export interface CascaderDataItem extends Record<string, any> {
|
|
21
21
|
*/
|
22
22
|
disabled?: boolean;
|
23
23
|
}
|
24
|
-
export interface
|
25
|
-
children:
|
24
|
+
export interface FlattedCascaderDataItemWithChildren extends FlattedCascaderDataItem {
|
25
|
+
children: FlattedCascaderDataItem[];
|
26
26
|
}
|
27
|
-
export interface
|
27
|
+
export interface FlattedCascaderDataItem extends Required<Omit<CascaderDataItem, 'children'>> {
|
28
28
|
/**
|
29
|
-
*
|
29
|
+
* 选择项值,唯一 id
|
30
30
|
*/
|
31
31
|
id: React.ReactText;
|
32
32
|
/**
|
33
|
-
*
|
33
|
+
* 选项标题
|
34
34
|
*/
|
35
35
|
title: React.ReactNode;
|
36
36
|
/**
|
37
|
-
*
|
37
|
+
* 下一级选项列表
|
38
38
|
*/
|
39
|
-
children?:
|
39
|
+
children?: FlattedCascaderDataItem[];
|
40
40
|
/**
|
41
|
-
*
|
41
|
+
* 关联用户传入的原始数据对象
|
42
42
|
*/
|
43
43
|
raw: CascaderDataItem;
|
44
44
|
/**
|
@@ -48,16 +48,16 @@ export interface FlattedCascaderItem extends Required<Omit<CascaderDataItem, 'ch
|
|
48
48
|
/**
|
49
49
|
* 该节点的父节点
|
50
50
|
*/
|
51
|
-
parent:
|
51
|
+
parent: FlattedCascaderDataItemWithChildren;
|
52
52
|
}
|
53
53
|
export interface CascaderItemRequiredProps {
|
54
54
|
selected: boolean;
|
55
55
|
loading: boolean;
|
56
56
|
focused: boolean;
|
57
57
|
}
|
58
|
-
export interface CascaderItemEventData extends
|
58
|
+
export interface CascaderItemEventData extends FlattedCascaderDataItem, CascaderItemRequiredProps {
|
59
59
|
}
|
60
|
-
export declare type
|
60
|
+
export declare type CascaderExpandTriggerEnum = 'click' | 'hover';
|
61
61
|
export interface NodeRoot<T> {
|
62
62
|
depth: -1;
|
63
63
|
children: T[];
|
@@ -1,30 +1,29 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import
|
3
|
-
import { FlattedCascaderItem, CascaderItemRequiredProps, CascaderItemEventData, CascaderDataItem } from './types';
|
2
|
+
import { FlattedCascaderDataItem, CascaderItemRequiredProps, CascaderItemEventData, CascaderDataItem } from './types';
|
4
3
|
export declare const useCascader: ({ defaultValue, value: valueProp, onChange: onChangeProp, data, disabled, changeOnSelect, flatted, onSelect: onSelectProp, onLoadChildren, cascaderData: cascaderDataProp, setCascaderData: setCascaderDataProp, flattedData: flattedDataProp, fieldNames, ...rest }: UseCascaderProps) => {
|
5
4
|
rootProps: {};
|
6
5
|
reset: () => void;
|
7
6
|
flattedData: any;
|
8
7
|
value: React.ReactText[];
|
9
8
|
tryChangeValue: (stateOrFunction: React.SetStateAction<React.ReactText[]>, ...args: any[]) => void;
|
10
|
-
getItemRequiredProps: ({ id, depth }:
|
9
|
+
getItemRequiredProps: ({ id, depth }: FlattedCascaderDataItem) => CascaderItemRequiredProps;
|
11
10
|
flatted: boolean;
|
12
11
|
onItemClick: (node: CascaderItemEventData, onlyExpand?: any) => Promise<void>;
|
13
12
|
onItemHover: (option: any) => void;
|
14
13
|
changeOnSelect: boolean;
|
15
14
|
onLoadChildren: ((item: CascaderItemEventData, idPaths: React.ReactText[]) => Promise<CascaderDataItem[] | void> | void) | undefined;
|
16
15
|
disabled: boolean;
|
17
|
-
menuList:
|
16
|
+
menuList: FlattedCascaderDataItem[][];
|
18
17
|
};
|
19
18
|
export interface UseCascaderProps {
|
20
19
|
/**
|
21
20
|
* 设置 data 中 id, title, disabled, children 对应的 key
|
22
21
|
*/
|
23
|
-
fieldNames?:
|
22
|
+
fieldNames?: Record<string, string>;
|
24
23
|
/**
|
25
24
|
* 设置选择项数据源
|
26
25
|
*/
|
27
|
-
data
|
26
|
+
data?: CascaderDataItem[];
|
28
27
|
/**
|
29
28
|
* 设置当前选中值
|
30
29
|
*/
|
@@ -41,7 +40,7 @@ export interface UseCascaderProps {
|
|
41
40
|
* 选中选项时触发,仅供内部使用。暂不对外暴露
|
42
41
|
* @private
|
43
42
|
*/
|
44
|
-
onSelect?: (value: React.ReactText, targetOption: CascaderItemEventData, optionPaths:
|
43
|
+
onSelect?: (value: React.ReactText, targetOption: CascaderItemEventData, optionPaths: FlattedCascaderDataItem[]) => void;
|
45
44
|
/**
|
46
45
|
* 是否禁止使用
|
47
46
|
*/
|
@@ -1,18 +1,18 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import type { HiBaseFieldNames } from '@hi-ui/core';
|
3
|
-
import { CascaderItemRequiredProps, CascaderItemEventData, CascaderDataItem,
|
3
|
+
import { CascaderItemRequiredProps, CascaderItemEventData, CascaderDataItem, FlattedCascaderDataItem } from '../types';
|
4
4
|
/**
|
5
5
|
* 扁平化树数据结构,基于前序遍历
|
6
6
|
*/
|
7
|
-
export declare const flattenTreeData: (treeData: CascaderDataItem[], fieldNames?: HiBaseFieldNames | undefined) =>
|
7
|
+
export declare const flattenTreeData: (treeData: CascaderDataItem[], fieldNames?: HiBaseFieldNames | undefined) => FlattedCascaderDataItem[];
|
8
8
|
/**
|
9
9
|
* 获取选中节点的节点路径,包含选中节点
|
10
10
|
*/
|
11
|
-
export declare const getActiveNodePaths: (flattedData:
|
11
|
+
export declare const getActiveNodePaths: (flattedData: FlattedCascaderDataItem[], selectedId?: React.ReactText | undefined) => FlattedCascaderDataItem[];
|
12
12
|
/**
|
13
13
|
* 获取自顶向下的兄弟节点列表菜单
|
14
14
|
*/
|
15
|
-
export declare const getActiveMenus: (flattedData:
|
16
|
-
export declare const getFlattedMenus: (data:
|
17
|
-
export declare const checkCanLoadChildren: (node:
|
18
|
-
export declare function getItemEventData(node:
|
15
|
+
export declare const getActiveMenus: (flattedData: FlattedCascaderDataItem[], selectedId?: React.ReactText | undefined) => FlattedCascaderDataItem[][];
|
16
|
+
export declare const getFlattedMenus: (data: FlattedCascaderDataItem[], filter: (option: FlattedCascaderDataItem) => boolean) => FlattedCascaderDataItem[][];
|
17
|
+
export declare const checkCanLoadChildren: (node: FlattedCascaderDataItem, onLoadChildren?: any) => any;
|
18
|
+
export declare function getItemEventData(node: FlattedCascaderDataItem, requiredProps: CascaderItemRequiredProps): CascaderItemEventData;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@hi-ui/cascader",
|
3
|
-
"version": "4.0.0-beta.
|
3
|
+
"version": "4.0.0-beta.27",
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
5
5
|
"keywords": [],
|
6
6
|
"author": "HIUI <mi-hiui@xiaomi.com>",
|
@@ -47,19 +47,19 @@
|
|
47
47
|
"@hi-ui/classname": "^4.0.0-beta.0",
|
48
48
|
"@hi-ui/core": "^4.0.0-beta.8",
|
49
49
|
"@hi-ui/env": "^4.0.0-beta.0",
|
50
|
-
"@hi-ui/func-utils": "^4.0.0-beta.
|
50
|
+
"@hi-ui/func-utils": "^4.0.0-beta.12",
|
51
51
|
"@hi-ui/icons": "^4.0.0-beta.10",
|
52
|
-
"@hi-ui/input": "^4.0.0-beta.
|
53
|
-
"@hi-ui/locale-context": "^4.0.0-beta.
|
54
|
-
"@hi-ui/picker": "^4.0.0-beta.
|
55
|
-
"@hi-ui/popper": "^4.0.0-beta.
|
56
|
-
"@hi-ui/spinner": "^4.0.0-beta.
|
52
|
+
"@hi-ui/input": "^4.0.0-beta.15",
|
53
|
+
"@hi-ui/locale-context": "^4.0.0-beta.18",
|
54
|
+
"@hi-ui/picker": "^4.0.0-beta.24",
|
55
|
+
"@hi-ui/popper": "^4.0.0-beta.14",
|
56
|
+
"@hi-ui/spinner": "^4.0.0-beta.9",
|
57
57
|
"@hi-ui/tree-utils": "^4.0.0-beta.4",
|
58
58
|
"@hi-ui/type-assertion": "^4.0.0-beta.4",
|
59
59
|
"@hi-ui/use-check-state": "^4.0.0-beta.4",
|
60
60
|
"@hi-ui/use-data-source": "^4.0.0-beta.5",
|
61
61
|
"@hi-ui/use-latest": "^4.0.0-beta.4",
|
62
|
-
"@hi-ui/use-search-mode": "^4.0.0-beta.
|
62
|
+
"@hi-ui/use-search-mode": "^4.0.0-beta.19",
|
63
63
|
"@hi-ui/use-toggle": "^4.0.0-beta.4",
|
64
64
|
"@hi-ui/use-uncontrolled-state": "^4.0.0-beta.4"
|
65
65
|
},
|
@@ -72,5 +72,5 @@
|
|
72
72
|
"react": "^17.0.1",
|
73
73
|
"react-dom": "^17.0.1"
|
74
74
|
},
|
75
|
-
"gitHead": "
|
75
|
+
"gitHead": "64cc3305632f0d88f852f4a95cba7c27ff388a2d"
|
76
76
|
}
|