@hi-ui/tree-select 4.0.11-beta.0 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -3
- package/lib/cjs/TreeSelect.js +97 -142
- package/lib/cjs/index.js +0 -3
- package/lib/cjs/styles/index.scss.js +1 -4
- package/lib/esm/TreeSelect.js +93 -107
- package/lib/esm/styles/index.scss.js +1 -3
- package/lib/types/TreeSelect.d.ts +6 -2
- package/package.json +20 -21
package/CHANGELOG.md
CHANGED
@@ -1,11 +1,40 @@
|
|
1
1
|
# @hi-ui/tree-select
|
2
2
|
|
3
|
-
## 4.
|
3
|
+
## 4.1.1
|
4
4
|
|
5
5
|
### Patch Changes
|
6
6
|
|
7
|
-
-
|
8
|
-
|
7
|
+
- [#2672](https://github.com/XiaoMi/hiui/pull/2672) [`1ebe27830`](https://github.com/XiaoMi/hiui/commit/1ebe2783098b3a8cd980bd10076d67635463800e) Thanks [@zyprepare](https://github.com/zyprepare)! - build: 升级到 rollup3,重新构建发布组件
|
8
|
+
|
9
|
+
- Updated dependencies [[`1ebe27830`](https://github.com/XiaoMi/hiui/commit/1ebe2783098b3a8cd980bd10076d67635463800e)]:
|
10
|
+
- @hi-ui/core@4.0.6
|
11
|
+
- @hi-ui/use-data-source@4.0.2
|
12
|
+
- @hi-ui/use-search-mode@4.1.2
|
13
|
+
- @hi-ui/use-toggle@4.0.2
|
14
|
+
- @hi-ui/use-uncontrolled-state@4.0.2
|
15
|
+
- @hi-ui/icons@4.0.16
|
16
|
+
- @hi-ui/highlighter@4.0.6
|
17
|
+
- @hi-ui/input@4.0.11
|
18
|
+
- @hi-ui/picker@4.1.2
|
19
|
+
- @hi-ui/popper@4.1.1
|
20
|
+
- @hi-ui/tree@4.5.6
|
21
|
+
- @hi-ui/array-utils@4.0.2
|
22
|
+
- @hi-ui/classname@4.0.2
|
23
|
+
- @hi-ui/env@4.0.2
|
24
|
+
- @hi-ui/func-utils@4.0.2
|
25
|
+
- @hi-ui/tree-utils@4.1.2
|
26
|
+
- @hi-ui/type-assertion@4.0.2
|
27
|
+
|
28
|
+
## 4.1.0
|
29
|
+
|
30
|
+
### Minor Changes
|
31
|
+
|
32
|
+
- [#2603](https://github.com/XiaoMi/hiui/pull/2603) [`556049d76`](https://github.com/XiaoMi/hiui/commit/556049d76d54489abececebddec47d93388e5116) Thanks [@zyprepare](https://github.com/zyprepare)! - feat: add size api
|
33
|
+
|
34
|
+
### Patch Changes
|
35
|
+
|
36
|
+
- Updated dependencies [[`534bfd298`](https://github.com/XiaoMi/hiui/commit/534bfd29852003af2209c3a64e5f1b2b1d37c19e)]:
|
37
|
+
- @hi-ui/tree@4.5.2
|
9
38
|
|
10
39
|
## 4.0.10
|
11
40
|
|
package/lib/cjs/TreeSelect.js
CHANGED
@@ -9,119 +9,85 @@
|
|
9
9
|
*/
|
10
10
|
'use strict';
|
11
11
|
|
12
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
13
|
-
|
14
|
-
Object.defineProperty(exports, '__esModule', {
|
15
|
-
value: true
|
16
|
-
});
|
17
|
-
|
18
12
|
var tslib = require('tslib');
|
19
|
-
|
20
13
|
var React = require('react');
|
21
|
-
|
22
14
|
var classname = require('@hi-ui/classname');
|
23
|
-
|
24
15
|
var env = require('@hi-ui/env');
|
25
|
-
|
26
16
|
var useToggle = require('@hi-ui/use-toggle');
|
27
|
-
|
28
17
|
var tree = require('@hi-ui/tree');
|
29
|
-
|
30
18
|
var useUncontrolledState = require('@hi-ui/use-uncontrolled-state');
|
31
|
-
|
32
19
|
var picker = require('@hi-ui/picker');
|
33
|
-
|
34
20
|
var treeUtils = require('@hi-ui/tree-utils');
|
35
|
-
|
36
21
|
var typeAssertion = require('@hi-ui/type-assertion');
|
37
|
-
|
38
22
|
var arrayUtils = require('@hi-ui/array-utils');
|
39
|
-
|
40
23
|
var highlighter = require('@hi-ui/highlighter');
|
41
|
-
|
42
24
|
var input = require('@hi-ui/input');
|
43
|
-
|
44
25
|
var icons = require('@hi-ui/icons');
|
45
|
-
|
46
26
|
var core = require('@hi-ui/core');
|
47
|
-
|
48
27
|
var funcUtils = require('@hi-ui/func-utils');
|
49
|
-
|
50
28
|
var useSearchMode = require('@hi-ui/use-search-mode');
|
51
|
-
|
52
|
-
function _interopDefaultLegacy(e) {
|
53
|
-
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
54
|
-
'default': e
|
55
|
-
};
|
56
|
-
}
|
57
|
-
|
58
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
59
|
-
|
60
29
|
var TREE_SELECT_PREFIX = classname.getPrefixCls('tree-select');
|
61
|
-
var DEFAULT_DATA = [];
|
62
|
-
|
30
|
+
var DEFAULT_DATA = [];
|
31
|
+
// const DEFAULT_VALUE = [] as []
|
63
32
|
var DEFAULT_FIELD_NAMES = {};
|
64
33
|
var DEFAULT_EXPANDED_IDS = [];
|
65
34
|
/**
|
66
|
-
*
|
35
|
+
* 树形选择器
|
67
36
|
*/
|
68
|
-
|
69
37
|
var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
70
38
|
var _a$prefixCls = _a.prefixCls,
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
39
|
+
prefixCls = _a$prefixCls === void 0 ? TREE_SELECT_PREFIX : _a$prefixCls,
|
40
|
+
className = _a.className,
|
41
|
+
_a$data = _a.data,
|
42
|
+
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
43
|
+
dataSource = _a.dataSource,
|
44
|
+
_a$disabled = _a.disabled,
|
45
|
+
disabled = _a$disabled === void 0 ? false : _a$disabled,
|
46
|
+
visible = _a.visible,
|
47
|
+
onOpen = _a.onOpen,
|
48
|
+
onClose = _a.onClose,
|
49
|
+
_a$fieldNames = _a.fieldNames,
|
50
|
+
fieldNames = _a$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _a$fieldNames,
|
51
|
+
_a$defaultExpandAll = _a.defaultExpandAll,
|
52
|
+
defaultExpandAll = _a$defaultExpandAll === void 0 ? false : _a$defaultExpandAll,
|
53
|
+
expandedIdsProp = _a.expandedIds,
|
54
|
+
_a$defaultExpandedIds = _a.defaultExpandedIds,
|
55
|
+
defaultExpandedIds = _a$defaultExpandedIds === void 0 ? DEFAULT_EXPANDED_IDS : _a$defaultExpandedIds,
|
56
|
+
onExpand = _a.onExpand,
|
57
|
+
_a$defaultValue = _a.defaultValue,
|
58
|
+
defaultValue = _a$defaultValue === void 0 ? '' : _a$defaultValue,
|
59
|
+
valueProp = _a.value,
|
60
|
+
onChange = _a.onChange,
|
61
|
+
searchableProp = _a.searchable,
|
62
|
+
searchModeProp = _a.searchMode,
|
63
|
+
onLoadChildren = _a.onLoadChildren,
|
64
|
+
titleRender = _a.render,
|
65
|
+
filterOption = _a.filterOption,
|
66
|
+
onSearchProp = _a.onSearch,
|
67
|
+
clearable = _a.clearable,
|
68
|
+
invalid = _a.invalid,
|
69
|
+
displayRenderProp = _a.displayRender,
|
70
|
+
placeholderProp = _a.placeholder,
|
71
|
+
appearance = _a.appearance,
|
72
|
+
virtual = _a.virtual,
|
73
|
+
itemHeight = _a.itemHeight,
|
74
|
+
height = _a.height,
|
75
|
+
_a$size = _a.size,
|
76
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
77
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "data", "dataSource", "disabled", "visible", "onOpen", "onClose", "fieldNames", "defaultExpandAll", "expandedIds", "defaultExpandedIds", "onExpand", "defaultValue", "value", "onChange", "searchable", "searchMode", "onLoadChildren", "render", "filterOption", "onSearch", "clearable", "invalid", "displayRender", "placeholder", "appearance", "virtual", "itemHeight", "height", "size"]);
|
109
78
|
var i18n = core.useLocaleContext();
|
110
79
|
var placeholder = typeAssertion.isUndef(placeholderProp) ? i18n.get('treeSelect.placeholder') : placeholderProp;
|
111
|
-
|
112
80
|
var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
81
|
+
visible: visible,
|
82
|
+
disabled: disabled,
|
83
|
+
onOpen: onOpen,
|
84
|
+
onClose: onClose
|
85
|
+
}),
|
86
|
+
menuVisible = _useUncontrolledToggl[0],
|
87
|
+
menuVisibleAction = _useUncontrolledToggl[1];
|
120
88
|
/**
|
121
89
|
* 转换对象
|
122
90
|
*/
|
123
|
-
|
124
|
-
|
125
91
|
var getKeyFields = React.useCallback(function (node, key) {
|
126
92
|
return node[fieldNames[key] || key];
|
127
93
|
}, [fieldNames]);
|
@@ -133,7 +99,6 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
133
99
|
},
|
134
100
|
transform: function transform(node) {
|
135
101
|
var _a, _b;
|
136
|
-
|
137
102
|
var flattedNode = node;
|
138
103
|
var raw = node.raw;
|
139
104
|
flattedNode.id = getKeyFields(raw, 'id');
|
@@ -143,50 +108,44 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
143
108
|
return flattedNode;
|
144
109
|
}
|
145
110
|
});
|
146
|
-
}, [data, getKeyFields]);
|
111
|
+
}, [data, getKeyFields]);
|
112
|
+
// TODO: 抽离展开hook
|
147
113
|
// TODO: onLoadChildren 和 defaultExpandAll 共存时
|
148
|
-
|
149
114
|
var _useUncontrolledState = useUncontrolledState.useUncontrolledState(function getDefaultExpandedIds() {
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
tryChangeExpandedIds = _useUncontrolledState[1];
|
161
|
-
|
115
|
+
// 开启默认展开全部
|
116
|
+
if (defaultExpandAll) {
|
117
|
+
return flattedData.map(function (node) {
|
118
|
+
return node.id;
|
119
|
+
});
|
120
|
+
}
|
121
|
+
return defaultExpandedIds;
|
122
|
+
}, expandedIdsProp, onExpand),
|
123
|
+
expandedIds = _useUncontrolledState[0],
|
124
|
+
tryChangeExpandedIds = _useUncontrolledState[1];
|
162
125
|
var _useUncontrolledState2 = useUncontrolledState.useUncontrolledState(defaultValue, valueProp, onChange),
|
163
|
-
|
164
|
-
|
165
|
-
|
126
|
+
value = _useUncontrolledState2[0],
|
127
|
+
tryChangeValue = _useUncontrolledState2[1];
|
166
128
|
var onSelect = React.useCallback(function (selectedId, selectedNode) {
|
167
129
|
// 关闭反选功能
|
168
130
|
if (selectedId) {
|
169
131
|
tryChangeValue(selectedId, selectedNode);
|
170
132
|
setSelectedItem(selectedNode);
|
171
|
-
}
|
172
|
-
|
173
|
-
|
133
|
+
}
|
134
|
+
// 关闭弹窗
|
174
135
|
menuVisibleAction.off();
|
175
|
-
}, [menuVisibleAction, tryChangeValue]);
|
176
|
-
|
136
|
+
}, [menuVisibleAction, tryChangeValue]);
|
137
|
+
// 搜索时临时选中缓存数据
|
177
138
|
var _useState = React.useState(null),
|
178
|
-
|
179
|
-
|
139
|
+
selectedItem = _useState[0],
|
140
|
+
setSelectedItem = _useState[1];
|
141
|
+
// ************************** 异步搜索 ************************* //
|
180
142
|
// const { loading, hasError, loadRemoteData } = useDataSource({ dataSource, validate: isArray })
|
181
|
-
|
182
|
-
|
183
143
|
var _b = useSearchMode.useAsyncSearch({
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
144
|
+
dataSource: dataSource
|
145
|
+
}),
|
146
|
+
loading = _b.loading,
|
147
|
+
hasError = _b.hasError,
|
148
|
+
dataSourceStrategy = tslib.__rest(_b, ["loading", "hasError"]);
|
190
149
|
var customSearchStrategy = useSearchMode.useTreeCustomSearch({
|
191
150
|
data: data,
|
192
151
|
filterOption: filterOption
|
@@ -202,29 +161,25 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
202
161
|
flattedData: flattedData,
|
203
162
|
searchMode: searchModeProp
|
204
163
|
});
|
205
|
-
|
206
164
|
var _useSearchMode = useSearchMode.useSearchMode({
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
165
|
+
searchable: searchableProp,
|
166
|
+
strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy, highlightSearchStrategy]
|
167
|
+
}),
|
168
|
+
stateInSearch = _useSearchMode.state,
|
169
|
+
setStateInSearch = _useSearchMode.setStateInSearch,
|
170
|
+
searchable = _useSearchMode.searchable,
|
171
|
+
searchMode = _useSearchMode.searchMode,
|
172
|
+
onSearch = _useSearchMode.onSearch,
|
173
|
+
searchValue = _useSearchMode.keyword;
|
174
|
+
// 拦截 titleRender,自定义高亮展示
|
218
175
|
var proxyTitleRender = React.useCallback(function (node) {
|
219
176
|
if (titleRender) {
|
220
177
|
var _ret = titleRender(node);
|
221
|
-
|
222
178
|
if (_ret && _ret !== true) return _ret;
|
223
|
-
}
|
224
|
-
|
225
|
-
|
179
|
+
}
|
180
|
+
// 本地搜索执行默认高亮规则
|
226
181
|
var highlight = !!searchValue && (searchMode === 'highlight' || searchMode === 'filter');
|
227
|
-
var ret = highlight ? /*#__PURE__*/
|
182
|
+
var ret = highlight ? /*#__PURE__*/React.createElement(highlighter.Highlighter, {
|
228
183
|
keyword: searchValue
|
229
184
|
}, node.title) : true;
|
230
185
|
return ret;
|
@@ -241,18 +196,17 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
241
196
|
});
|
242
197
|
} : tryChangeExpandedIds,
|
243
198
|
render: proxyTitleRender
|
244
|
-
};
|
245
|
-
|
199
|
+
};
|
200
|
+
// 下拉菜单不能合并(因为树形数据,不知道是第几级)
|
246
201
|
var mergedData = React.useMemo(function () {
|
247
202
|
if (selectedItem) {
|
248
203
|
var nextData = [selectedItem].concat(flattedData);
|
249
204
|
return arrayUtils.uniqBy(nextData, 'id');
|
250
205
|
}
|
251
|
-
|
252
206
|
return flattedData;
|
253
207
|
}, [selectedItem, flattedData]);
|
254
208
|
var cls = classname.cx(prefixCls, className);
|
255
|
-
return /*#__PURE__*/
|
209
|
+
return /*#__PURE__*/React.createElement(picker.Picker, Object.assign({
|
256
210
|
ref: ref,
|
257
211
|
className: cls
|
258
212
|
}, rest, {
|
@@ -266,13 +220,15 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
266
220
|
searchable: searchable,
|
267
221
|
onSearch: funcUtils.callAllFuncs(onSearchProp, onSearch),
|
268
222
|
loading: rest.loading !== undefined ? rest.loading : loading,
|
269
|
-
trigger: /*#__PURE__*/
|
223
|
+
trigger: /*#__PURE__*/React.createElement(input.MockInput
|
224
|
+
// disabled={disabled}
|
270
225
|
, {
|
271
226
|
// disabled={disabled}
|
227
|
+
size: size,
|
272
228
|
clearable: clearable,
|
273
229
|
placeholder: placeholder,
|
274
230
|
displayRender: displayRenderProp,
|
275
|
-
suffix: menuVisible ? /*#__PURE__*/
|
231
|
+
suffix: menuVisible ? /*#__PURE__*/React.createElement(icons.UpOutlined, null) : /*#__PURE__*/React.createElement(icons.DownOutlined, null),
|
276
232
|
focused: menuVisible,
|
277
233
|
value: value,
|
278
234
|
onChange: tryChangeValue,
|
@@ -281,7 +237,8 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
281
237
|
invalid: invalid,
|
282
238
|
appearance: appearance
|
283
239
|
})
|
284
|
-
}), typeAssertion.isArrayNonEmpty(treeProps.data) ? /*#__PURE__*/
|
240
|
+
}), typeAssertion.isArrayNonEmpty(treeProps.data) ? /*#__PURE__*/React.createElement(tree.Tree, Object.assign({
|
241
|
+
size: 'md',
|
285
242
|
className: prefixCls + "__tree",
|
286
243
|
selectable: true,
|
287
244
|
selectedId: value,
|
@@ -295,9 +252,7 @@ var TreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
295
252
|
height: height
|
296
253
|
}, treeProps)) : null);
|
297
254
|
});
|
298
|
-
|
299
255
|
if (env.__DEV__) {
|
300
256
|
TreeSelect.displayName = 'TreeSelect';
|
301
257
|
}
|
302
|
-
|
303
258
|
exports.TreeSelect = TreeSelect;
|
package/lib/cjs/index.js
CHANGED
@@ -12,10 +12,7 @@
|
|
12
12
|
Object.defineProperty(exports, '__esModule', {
|
13
13
|
value: true
|
14
14
|
});
|
15
|
-
|
16
15
|
require('./styles/index.scss.js');
|
17
|
-
|
18
16
|
var TreeSelect = require('./TreeSelect.js');
|
19
|
-
|
20
17
|
exports.TreeSelect = TreeSelect.TreeSelect;
|
21
18
|
exports["default"] = TreeSelect.TreeSelect;
|
@@ -13,9 +13,6 @@ Object.defineProperty(exports, '__esModule', {
|
|
13
13
|
value: true
|
14
14
|
});
|
15
15
|
var css_248z = "";
|
16
|
-
|
17
|
-
var __styleInject__ = require('inject-head-style')["default"];
|
18
|
-
|
16
|
+
var __styleInject__ = require('style-inject')["default"];
|
19
17
|
__styleInject__(css_248z);
|
20
|
-
|
21
18
|
exports["default"] = css_248z;
|
package/lib/esm/TreeSelect.js
CHANGED
@@ -25,70 +25,67 @@ import { useLocaleContext } from '@hi-ui/core';
|
|
25
25
|
import { callAllFuncs } from '@hi-ui/func-utils';
|
26
26
|
import { useAsyncSearch, useTreeCustomSearch, useFilterSearch, useHighlightSearch, useSearchMode } from '@hi-ui/use-search-mode';
|
27
27
|
var TREE_SELECT_PREFIX = getPrefixCls('tree-select');
|
28
|
-
var DEFAULT_DATA = [];
|
29
|
-
|
28
|
+
var DEFAULT_DATA = [];
|
29
|
+
// const DEFAULT_VALUE = [] as []
|
30
30
|
var DEFAULT_FIELD_NAMES = {};
|
31
31
|
var DEFAULT_EXPANDED_IDS = [];
|
32
32
|
/**
|
33
|
-
*
|
33
|
+
* 树形选择器
|
34
34
|
*/
|
35
|
-
|
36
35
|
var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
37
36
|
var _a$prefixCls = _a.prefixCls,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
37
|
+
prefixCls = _a$prefixCls === void 0 ? TREE_SELECT_PREFIX : _a$prefixCls,
|
38
|
+
className = _a.className,
|
39
|
+
_a$data = _a.data,
|
40
|
+
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
41
|
+
dataSource = _a.dataSource,
|
42
|
+
_a$disabled = _a.disabled,
|
43
|
+
disabled = _a$disabled === void 0 ? false : _a$disabled,
|
44
|
+
visible = _a.visible,
|
45
|
+
onOpen = _a.onOpen,
|
46
|
+
onClose = _a.onClose,
|
47
|
+
_a$fieldNames = _a.fieldNames,
|
48
|
+
fieldNames = _a$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _a$fieldNames,
|
49
|
+
_a$defaultExpandAll = _a.defaultExpandAll,
|
50
|
+
defaultExpandAll = _a$defaultExpandAll === void 0 ? false : _a$defaultExpandAll,
|
51
|
+
expandedIdsProp = _a.expandedIds,
|
52
|
+
_a$defaultExpandedIds = _a.defaultExpandedIds,
|
53
|
+
defaultExpandedIds = _a$defaultExpandedIds === void 0 ? DEFAULT_EXPANDED_IDS : _a$defaultExpandedIds,
|
54
|
+
onExpand = _a.onExpand,
|
55
|
+
_a$defaultValue = _a.defaultValue,
|
56
|
+
defaultValue = _a$defaultValue === void 0 ? '' : _a$defaultValue,
|
57
|
+
valueProp = _a.value,
|
58
|
+
onChange = _a.onChange,
|
59
|
+
searchableProp = _a.searchable,
|
60
|
+
searchModeProp = _a.searchMode,
|
61
|
+
onLoadChildren = _a.onLoadChildren,
|
62
|
+
titleRender = _a.render,
|
63
|
+
filterOption = _a.filterOption,
|
64
|
+
onSearchProp = _a.onSearch,
|
65
|
+
clearable = _a.clearable,
|
66
|
+
invalid = _a.invalid,
|
67
|
+
displayRenderProp = _a.displayRender,
|
68
|
+
placeholderProp = _a.placeholder,
|
69
|
+
appearance = _a.appearance,
|
70
|
+
virtual = _a.virtual,
|
71
|
+
itemHeight = _a.itemHeight,
|
72
|
+
height = _a.height,
|
73
|
+
_a$size = _a.size,
|
74
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
75
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "data", "dataSource", "disabled", "visible", "onOpen", "onClose", "fieldNames", "defaultExpandAll", "expandedIds", "defaultExpandedIds", "onExpand", "defaultValue", "value", "onChange", "searchable", "searchMode", "onLoadChildren", "render", "filterOption", "onSearch", "clearable", "invalid", "displayRender", "placeholder", "appearance", "virtual", "itemHeight", "height", "size"]);
|
76
76
|
var i18n = useLocaleContext();
|
77
77
|
var placeholder = isUndef(placeholderProp) ? i18n.get('treeSelect.placeholder') : placeholderProp;
|
78
|
-
|
79
78
|
var _useUncontrolledToggl = useUncontrolledToggle({
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
79
|
+
visible: visible,
|
80
|
+
disabled: disabled,
|
81
|
+
onOpen: onOpen,
|
82
|
+
onClose: onClose
|
83
|
+
}),
|
84
|
+
menuVisible = _useUncontrolledToggl[0],
|
85
|
+
menuVisibleAction = _useUncontrolledToggl[1];
|
87
86
|
/**
|
88
87
|
* 转换对象
|
89
88
|
*/
|
90
|
-
|
91
|
-
|
92
89
|
var getKeyFields = useCallback(function (node, key) {
|
93
90
|
return node[fieldNames[key] || key];
|
94
91
|
}, [fieldNames]);
|
@@ -100,7 +97,6 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
100
97
|
},
|
101
98
|
transform: function transform(node) {
|
102
99
|
var _a, _b;
|
103
|
-
|
104
100
|
var flattedNode = node;
|
105
101
|
var raw = node.raw;
|
106
102
|
flattedNode.id = getKeyFields(raw, 'id');
|
@@ -110,50 +106,44 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
110
106
|
return flattedNode;
|
111
107
|
}
|
112
108
|
});
|
113
|
-
}, [data, getKeyFields]);
|
109
|
+
}, [data, getKeyFields]);
|
110
|
+
// TODO: 抽离展开hook
|
114
111
|
// TODO: onLoadChildren 和 defaultExpandAll 共存时
|
115
|
-
|
116
112
|
var _useUncontrolledState = useUncontrolledState(function getDefaultExpandedIds() {
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
tryChangeExpandedIds = _useUncontrolledState[1];
|
128
|
-
|
113
|
+
// 开启默认展开全部
|
114
|
+
if (defaultExpandAll) {
|
115
|
+
return flattedData.map(function (node) {
|
116
|
+
return node.id;
|
117
|
+
});
|
118
|
+
}
|
119
|
+
return defaultExpandedIds;
|
120
|
+
}, expandedIdsProp, onExpand),
|
121
|
+
expandedIds = _useUncontrolledState[0],
|
122
|
+
tryChangeExpandedIds = _useUncontrolledState[1];
|
129
123
|
var _useUncontrolledState2 = useUncontrolledState(defaultValue, valueProp, onChange),
|
130
|
-
|
131
|
-
|
132
|
-
|
124
|
+
value = _useUncontrolledState2[0],
|
125
|
+
tryChangeValue = _useUncontrolledState2[1];
|
133
126
|
var onSelect = useCallback(function (selectedId, selectedNode) {
|
134
127
|
// 关闭反选功能
|
135
128
|
if (selectedId) {
|
136
129
|
tryChangeValue(selectedId, selectedNode);
|
137
130
|
setSelectedItem(selectedNode);
|
138
|
-
}
|
139
|
-
|
140
|
-
|
131
|
+
}
|
132
|
+
// 关闭弹窗
|
141
133
|
menuVisibleAction.off();
|
142
|
-
}, [menuVisibleAction, tryChangeValue]);
|
143
|
-
|
134
|
+
}, [menuVisibleAction, tryChangeValue]);
|
135
|
+
// 搜索时临时选中缓存数据
|
144
136
|
var _useState = useState(null),
|
145
|
-
|
146
|
-
|
137
|
+
selectedItem = _useState[0],
|
138
|
+
setSelectedItem = _useState[1];
|
139
|
+
// ************************** 异步搜索 ************************* //
|
147
140
|
// const { loading, hasError, loadRemoteData } = useDataSource({ dataSource, validate: isArray })
|
148
|
-
|
149
|
-
|
150
141
|
var _b = useAsyncSearch({
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
142
|
+
dataSource: dataSource
|
143
|
+
}),
|
144
|
+
loading = _b.loading,
|
145
|
+
hasError = _b.hasError,
|
146
|
+
dataSourceStrategy = __rest(_b, ["loading", "hasError"]);
|
157
147
|
var customSearchStrategy = useTreeCustomSearch({
|
158
148
|
data: data,
|
159
149
|
filterOption: filterOption
|
@@ -169,27 +159,23 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
169
159
|
flattedData: flattedData,
|
170
160
|
searchMode: searchModeProp
|
171
161
|
});
|
172
|
-
|
173
162
|
var _useSearchMode = useSearchMode({
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
163
|
+
searchable: searchableProp,
|
164
|
+
strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy, highlightSearchStrategy]
|
165
|
+
}),
|
166
|
+
stateInSearch = _useSearchMode.state,
|
167
|
+
setStateInSearch = _useSearchMode.setStateInSearch,
|
168
|
+
searchable = _useSearchMode.searchable,
|
169
|
+
searchMode = _useSearchMode.searchMode,
|
170
|
+
onSearch = _useSearchMode.onSearch,
|
171
|
+
searchValue = _useSearchMode.keyword;
|
172
|
+
// 拦截 titleRender,自定义高亮展示
|
185
173
|
var proxyTitleRender = useCallback(function (node) {
|
186
174
|
if (titleRender) {
|
187
175
|
var _ret = titleRender(node);
|
188
|
-
|
189
176
|
if (_ret && _ret !== true) return _ret;
|
190
|
-
}
|
191
|
-
|
192
|
-
|
177
|
+
}
|
178
|
+
// 本地搜索执行默认高亮规则
|
193
179
|
var highlight = !!searchValue && (searchMode === 'highlight' || searchMode === 'filter');
|
194
180
|
var ret = highlight ? /*#__PURE__*/React.createElement(Highlighter, {
|
195
181
|
keyword: searchValue
|
@@ -208,14 +194,13 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
208
194
|
});
|
209
195
|
} : tryChangeExpandedIds,
|
210
196
|
render: proxyTitleRender
|
211
|
-
};
|
212
|
-
|
197
|
+
};
|
198
|
+
// 下拉菜单不能合并(因为树形数据,不知道是第几级)
|
213
199
|
var mergedData = useMemo(function () {
|
214
200
|
if (selectedItem) {
|
215
201
|
var nextData = [selectedItem].concat(flattedData);
|
216
202
|
return uniqBy(nextData, 'id');
|
217
203
|
}
|
218
|
-
|
219
204
|
return flattedData;
|
220
205
|
}, [selectedItem, flattedData]);
|
221
206
|
var cls = cx(prefixCls, className);
|
@@ -233,9 +218,11 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
233
218
|
searchable: searchable,
|
234
219
|
onSearch: callAllFuncs(onSearchProp, onSearch),
|
235
220
|
loading: rest.loading !== undefined ? rest.loading : loading,
|
236
|
-
trigger: /*#__PURE__*/React.createElement(MockInput
|
221
|
+
trigger: /*#__PURE__*/React.createElement(MockInput
|
222
|
+
// disabled={disabled}
|
237
223
|
, {
|
238
224
|
// disabled={disabled}
|
225
|
+
size: size,
|
239
226
|
clearable: clearable,
|
240
227
|
placeholder: placeholder,
|
241
228
|
displayRender: displayRenderProp,
|
@@ -249,6 +236,7 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
249
236
|
appearance: appearance
|
250
237
|
})
|
251
238
|
}), isArrayNonEmpty(treeProps.data) ? /*#__PURE__*/React.createElement(Tree, Object.assign({
|
239
|
+
size: 'md',
|
252
240
|
className: prefixCls + "__tree",
|
253
241
|
selectable: true,
|
254
242
|
selectedId: value,
|
@@ -262,9 +250,7 @@ var TreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
262
250
|
height: height
|
263
251
|
}, treeProps)) : null);
|
264
252
|
});
|
265
|
-
|
266
253
|
if (__DEV__) {
|
267
254
|
TreeSelect.displayName = 'TreeSelect';
|
268
255
|
}
|
269
|
-
|
270
256
|
export { TreeSelect };
|
@@ -7,9 +7,7 @@
|
|
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.
|
9
9
|
*/
|
10
|
-
import __styleInject__ from 'inject
|
10
|
+
import __styleInject__ from 'style-inject';
|
11
11
|
var css_248z = "";
|
12
|
-
|
13
12
|
__styleInject__(css_248z);
|
14
|
-
|
15
13
|
export { css_248z as default };
|
@@ -2,10 +2,10 @@ import React from 'react';
|
|
2
2
|
import { TreeSelectDataItem } from './types';
|
3
3
|
import { TreeNodeEventData } from '@hi-ui/tree';
|
4
4
|
import { PickerProps } from '@hi-ui/picker';
|
5
|
-
import { HiBaseAppearanceEnum } from '@hi-ui/core';
|
5
|
+
import { HiBaseAppearanceEnum, HiBaseSizeEnum } from '@hi-ui/core';
|
6
6
|
import { UseDataSource } from '@hi-ui/use-data-source';
|
7
7
|
/**
|
8
|
-
*
|
8
|
+
* 树形选择器
|
9
9
|
*/
|
10
10
|
export declare const TreeSelect: React.ForwardRefExoticComponent<TreeSelectProps & React.RefAttributes<HTMLDivElement | null>>;
|
11
11
|
export interface TreeSelectProps extends Omit<PickerProps, 'data' | 'onChange' | 'trigger' | 'scrollable'> {
|
@@ -120,4 +120,8 @@ export interface TreeSelectProps extends Omit<PickerProps, 'data' | 'onChange' |
|
|
120
120
|
* 设置 `true` 开启虚拟滚动
|
121
121
|
*/
|
122
122
|
virtual?: boolean;
|
123
|
+
/**
|
124
|
+
* 设置尺寸
|
125
|
+
*/
|
126
|
+
size?: HiBaseSizeEnum;
|
123
127
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@hi-ui/tree-select",
|
3
|
-
"version": "4.
|
3
|
+
"version": "4.1.1",
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
5
5
|
"keywords": [],
|
6
6
|
"author": "HiUI <mi-hiui@xiaomi.com>",
|
@@ -43,32 +43,31 @@
|
|
43
43
|
"url": "https://github.com/XiaoMi/hiui/issues"
|
44
44
|
},
|
45
45
|
"dependencies": {
|
46
|
-
"@hi-ui/array-utils": "^4.0.
|
47
|
-
"@hi-ui/classname": "^4.0.
|
48
|
-
"@hi-ui/env": "^4.0.
|
49
|
-
"@hi-ui/func-utils": "^4.0.
|
50
|
-
"@hi-ui/highlighter": "^4.0.
|
51
|
-
"@hi-ui/icons": "^4.0.
|
52
|
-
"@hi-ui/input": "^4.0.
|
53
|
-
"@hi-ui/picker": "^4.
|
54
|
-
"@hi-ui/popper": "^4.
|
55
|
-
"@hi-ui/tree": "^4.
|
56
|
-
"@hi-ui/tree-utils": "^4.
|
57
|
-
"@hi-ui/type-assertion": "^4.0.
|
58
|
-
"@hi-ui/use-data-source": "^4.0.
|
59
|
-
"@hi-ui/use-search-mode": "^4.
|
60
|
-
"@hi-ui/use-toggle": "^4.0.
|
61
|
-
"@hi-ui/use-uncontrolled-state": "^4.0.
|
46
|
+
"@hi-ui/array-utils": "^4.0.2",
|
47
|
+
"@hi-ui/classname": "^4.0.2",
|
48
|
+
"@hi-ui/env": "^4.0.2",
|
49
|
+
"@hi-ui/func-utils": "^4.0.2",
|
50
|
+
"@hi-ui/highlighter": "^4.0.6",
|
51
|
+
"@hi-ui/icons": "^4.0.16",
|
52
|
+
"@hi-ui/input": "^4.0.11",
|
53
|
+
"@hi-ui/picker": "^4.1.2",
|
54
|
+
"@hi-ui/popper": "^4.1.1",
|
55
|
+
"@hi-ui/tree": "^4.5.6",
|
56
|
+
"@hi-ui/tree-utils": "^4.1.2",
|
57
|
+
"@hi-ui/type-assertion": "^4.0.2",
|
58
|
+
"@hi-ui/use-data-source": "^4.0.2",
|
59
|
+
"@hi-ui/use-search-mode": "^4.1.2",
|
60
|
+
"@hi-ui/use-toggle": "^4.0.2",
|
61
|
+
"@hi-ui/use-uncontrolled-state": "^4.0.2"
|
62
62
|
},
|
63
63
|
"peerDependencies": {
|
64
|
-
"@hi-ui/core": ">=4.0.
|
64
|
+
"@hi-ui/core": ">=4.0.6",
|
65
65
|
"react": ">=16.8.6",
|
66
66
|
"react-dom": ">=16.8.6"
|
67
67
|
},
|
68
68
|
"devDependencies": {
|
69
|
-
"@hi-ui/core": "^4.0.
|
70
|
-
"@hi-ui/core-css": "^4.
|
71
|
-
"@hi-ui/hi-build": "^4.0.1",
|
69
|
+
"@hi-ui/core": "^4.0.6",
|
70
|
+
"@hi-ui/core-css": "^4.1.3",
|
72
71
|
"react": "^17.0.1",
|
73
72
|
"react-dom": "^17.0.1"
|
74
73
|
}
|