@hi-ui/check-tree-select 4.3.0 → 4.3.2
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 +53 -0
- package/lib/cjs/CheckTreeSelect.js +110 -165
- package/lib/cjs/hooks/use-check.js +31 -44
- package/lib/cjs/index.js +0 -3
- package/lib/cjs/styles/index.scss.js +0 -3
- package/lib/cjs/utils/index.js +10 -36
- package/lib/esm/CheckTreeSelect.js +107 -137
- package/lib/esm/hooks/use-check.js +31 -39
- package/lib/esm/styles/index.scss.js +0 -2
- package/lib/esm/utils/index.js +10 -33
- package/package.json +22 -22
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,58 @@
|
|
1
1
|
# @hi-ui/check-tree-select
|
2
2
|
|
3
|
+
## 4.3.2
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- fix: 修复 rollup3 打包 cjs 模块问题
|
8
|
+
- Updated dependencies
|
9
|
+
- @hi-ui/env@4.0.3
|
10
|
+
- @hi-ui/core@4.0.7
|
11
|
+
- @hi-ui/use-check@4.0.4
|
12
|
+
- @hi-ui/use-data-source@4.0.3
|
13
|
+
- @hi-ui/use-search-mode@4.1.3
|
14
|
+
- @hi-ui/use-toggle@4.0.3
|
15
|
+
- @hi-ui/use-uncontrolled-state@4.0.3
|
16
|
+
- @hi-ui/icons@4.0.17
|
17
|
+
- @hi-ui/checkbox@4.0.7
|
18
|
+
- @hi-ui/highlighter@4.0.7
|
19
|
+
- @hi-ui/picker@4.1.3
|
20
|
+
- @hi-ui/popper@4.1.2
|
21
|
+
- @hi-ui/tag-input@4.0.9
|
22
|
+
- @hi-ui/tree@4.5.7
|
23
|
+
- @hi-ui/array-utils@4.0.3
|
24
|
+
- @hi-ui/classname@4.0.3
|
25
|
+
- @hi-ui/func-utils@4.0.3
|
26
|
+
- @hi-ui/tree-utils@4.1.3
|
27
|
+
- @hi-ui/type-assertion@4.0.3
|
28
|
+
|
29
|
+
## 4.3.1
|
30
|
+
|
31
|
+
### Patch Changes
|
32
|
+
|
33
|
+
- [#2672](https://github.com/XiaoMi/hiui/pull/2672) [`1ebe27830`](https://github.com/XiaoMi/hiui/commit/1ebe2783098b3a8cd980bd10076d67635463800e) Thanks [@zyprepare](https://github.com/zyprepare)! - build: 升级到 rollup3,重新构建发布组件
|
34
|
+
|
35
|
+
- Updated dependencies [[`1ebe27830`](https://github.com/XiaoMi/hiui/commit/1ebe2783098b3a8cd980bd10076d67635463800e)]:
|
36
|
+
- @hi-ui/core@4.0.6
|
37
|
+
- @hi-ui/use-check@4.0.3
|
38
|
+
- @hi-ui/use-data-source@4.0.2
|
39
|
+
- @hi-ui/use-search-mode@4.1.2
|
40
|
+
- @hi-ui/use-toggle@4.0.2
|
41
|
+
- @hi-ui/use-uncontrolled-state@4.0.2
|
42
|
+
- @hi-ui/icons@4.0.16
|
43
|
+
- @hi-ui/checkbox@4.0.6
|
44
|
+
- @hi-ui/highlighter@4.0.6
|
45
|
+
- @hi-ui/picker@4.1.2
|
46
|
+
- @hi-ui/popper@4.1.1
|
47
|
+
- @hi-ui/tag-input@4.0.8
|
48
|
+
- @hi-ui/tree@4.5.6
|
49
|
+
- @hi-ui/array-utils@4.0.2
|
50
|
+
- @hi-ui/classname@4.0.2
|
51
|
+
- @hi-ui/env@4.0.2
|
52
|
+
- @hi-ui/func-utils@4.0.2
|
53
|
+
- @hi-ui/tree-utils@4.1.2
|
54
|
+
- @hi-ui/type-assertion@4.0.2
|
55
|
+
|
3
56
|
## 4.3.0
|
4
57
|
|
5
58
|
### Minor Changes
|
@@ -10,61 +10,36 @@
|
|
10
10
|
'use strict';
|
11
11
|
|
12
12
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
13
|
-
|
14
13
|
Object.defineProperty(exports, '__esModule', {
|
15
14
|
value: true
|
16
15
|
});
|
17
|
-
|
18
16
|
var tslib = require('tslib');
|
19
|
-
|
20
17
|
var React = require('react');
|
21
|
-
|
22
18
|
var classname = require('@hi-ui/classname');
|
23
|
-
|
24
19
|
var env = require('@hi-ui/env');
|
25
|
-
|
26
20
|
var useToggle = require('@hi-ui/use-toggle');
|
27
|
-
|
28
21
|
var tree = require('@hi-ui/tree');
|
29
|
-
|
30
22
|
var useUncontrolledState = require('@hi-ui/use-uncontrolled-state');
|
31
|
-
|
32
23
|
var picker = require('@hi-ui/picker');
|
33
|
-
|
34
24
|
var treeUtils = require('@hi-ui/tree-utils');
|
35
|
-
|
36
25
|
var typeAssertion = require('@hi-ui/type-assertion');
|
37
|
-
|
38
26
|
var arrayUtils = require('@hi-ui/array-utils');
|
39
|
-
|
40
27
|
var highlighter = require('@hi-ui/highlighter');
|
41
|
-
|
42
28
|
var tagInput = require('@hi-ui/tag-input');
|
43
|
-
|
44
29
|
var icons = require('@hi-ui/icons');
|
45
|
-
|
46
30
|
var core = require('@hi-ui/core');
|
47
|
-
|
48
31
|
var funcUtils = require('@hi-ui/func-utils');
|
49
|
-
|
50
32
|
var Checkbox = require('@hi-ui/checkbox');
|
51
|
-
|
52
33
|
var useSearchMode = require('@hi-ui/use-search-mode');
|
53
|
-
|
54
34
|
var useCheck = require('./hooks/use-check.js');
|
55
|
-
|
56
35
|
var index = require('./utils/index.js');
|
57
|
-
|
58
|
-
function _interopDefaultLegacy(e) {
|
36
|
+
function _interopDefaultCompat(e) {
|
59
37
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
60
38
|
'default': e
|
61
39
|
};
|
62
40
|
}
|
63
|
-
|
64
|
-
var
|
65
|
-
|
66
|
-
var Checkbox__default = /*#__PURE__*/_interopDefaultLegacy(Checkbox);
|
67
|
-
|
41
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
42
|
+
var Checkbox__default = /*#__PURE__*/_interopDefaultCompat(Checkbox);
|
68
43
|
var TREE_SELECT_PREFIX = classname.getPrefixCls('check-tree-select');
|
69
44
|
var DEFAULT_DATA = [];
|
70
45
|
var DEFAULT_VALUE = [];
|
@@ -73,69 +48,64 @@ var DEFAULT_EXPANDED_IDS = [];
|
|
73
48
|
/**
|
74
49
|
* 多项树形选择器
|
75
50
|
*/
|
76
|
-
|
77
51
|
var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
78
52
|
var _a$prefixCls = _a.prefixCls,
|
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
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
53
|
+
prefixCls = _a$prefixCls === void 0 ? TREE_SELECT_PREFIX : _a$prefixCls,
|
54
|
+
className = _a.className,
|
55
|
+
_a$data = _a.data,
|
56
|
+
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
57
|
+
dataSource = _a.dataSource,
|
58
|
+
_a$disabled = _a.disabled,
|
59
|
+
disabled = _a$disabled === void 0 ? false : _a$disabled,
|
60
|
+
visible = _a.visible,
|
61
|
+
onOpen = _a.onOpen,
|
62
|
+
onClose = _a.onClose,
|
63
|
+
_a$fieldNames = _a.fieldNames,
|
64
|
+
fieldNames = _a$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _a$fieldNames,
|
65
|
+
_a$checkedMode = _a.checkedMode,
|
66
|
+
checkedMode = _a$checkedMode === void 0 ? 'ALL' : _a$checkedMode,
|
67
|
+
_a$defaultExpandAll = _a.defaultExpandAll,
|
68
|
+
defaultExpandAll = _a$defaultExpandAll === void 0 ? false : _a$defaultExpandAll,
|
69
|
+
expandedIdsProp = _a.expandedIds,
|
70
|
+
_a$defaultExpandedIds = _a.defaultExpandedIds,
|
71
|
+
defaultExpandedIds = _a$defaultExpandedIds === void 0 ? DEFAULT_EXPANDED_IDS : _a$defaultExpandedIds,
|
72
|
+
onExpand = _a.onExpand,
|
73
|
+
_a$defaultValue = _a.defaultValue,
|
74
|
+
defaultValue = _a$defaultValue === void 0 ? DEFAULT_VALUE : _a$defaultValue,
|
75
|
+
valueProp = _a.value,
|
76
|
+
onChange = _a.onChange,
|
77
|
+
searchableProp = _a.searchable,
|
78
|
+
searchModeProp = _a.searchMode,
|
79
|
+
onLoadChildren = _a.onLoadChildren,
|
80
|
+
titleRender = _a.render,
|
81
|
+
filterOption = _a.filterOption,
|
82
|
+
onSearchProp = _a.onSearch,
|
83
|
+
clearable = _a.clearable,
|
84
|
+
invalid = _a.invalid,
|
85
|
+
displayRender = _a.displayRender,
|
86
|
+
placeholderProp = _a.placeholder,
|
87
|
+
appearance = _a.appearance,
|
88
|
+
virtual = _a.virtual,
|
89
|
+
itemHeight = _a.itemHeight,
|
90
|
+
height = _a.height,
|
91
|
+
showCheckAll = _a.showCheckAll,
|
92
|
+
tagInputProps = _a.tagInputProps,
|
93
|
+
_a$size = _a.size,
|
94
|
+
size = _a$size === void 0 ? 'md' : _a$size,
|
95
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "data", "dataSource", "disabled", "visible", "onOpen", "onClose", "fieldNames", "checkedMode", "defaultExpandAll", "expandedIds", "defaultExpandedIds", "onExpand", "defaultValue", "value", "onChange", "searchable", "searchMode", "onLoadChildren", "render", "filterOption", "onSearch", "clearable", "invalid", "displayRender", "placeholder", "appearance", "virtual", "itemHeight", "height", "showCheckAll", "tagInputProps", "size"]);
|
123
96
|
var i18n = core.useLocaleContext();
|
124
97
|
var placeholder = typeAssertion.isUndef(placeholderProp) ? i18n.get('checkTreeSelect.placeholder') : placeholderProp;
|
125
|
-
|
126
98
|
var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
99
|
+
visible: visible,
|
100
|
+
disabled: disabled,
|
101
|
+
onOpen: onOpen,
|
102
|
+
onClose: onClose
|
103
|
+
}),
|
104
|
+
menuVisible = _useUncontrolledToggl[0],
|
105
|
+
menuVisibleAction = _useUncontrolledToggl[1];
|
134
106
|
/**
|
135
107
|
* 转换对象
|
136
108
|
*/
|
137
|
-
|
138
|
-
|
139
109
|
var getKeyFields = React.useCallback(function (node, key) {
|
140
110
|
return node[fieldNames[key] || key];
|
141
111
|
}, [fieldNames]);
|
@@ -147,7 +117,6 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
147
117
|
},
|
148
118
|
transform: function transform(node) {
|
149
119
|
var _a, _b;
|
150
|
-
|
151
120
|
var flattedNode = node;
|
152
121
|
var raw = node.raw;
|
153
122
|
flattedNode.id = getKeyFields(raw, 'id');
|
@@ -157,32 +126,29 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
157
126
|
return flattedNode;
|
158
127
|
}
|
159
128
|
});
|
160
|
-
}, [data, getKeyFields]);
|
129
|
+
}, [data, getKeyFields]);
|
130
|
+
// TODO: 抽离展开hook
|
161
131
|
// TODO: onLoadChildren 和 defaultExpandAll 共存时
|
162
|
-
|
163
132
|
var _useUncontrolledState = useUncontrolledState.useUncontrolledState(function getDefaultExpandedIds() {
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
tryChangeExpandedIds = _useUncontrolledState[1];
|
175
|
-
|
133
|
+
// 开启默认展开全部
|
134
|
+
if (defaultExpandAll) {
|
135
|
+
return flattedData.map(function (node) {
|
136
|
+
return node.id;
|
137
|
+
});
|
138
|
+
}
|
139
|
+
return defaultExpandedIds;
|
140
|
+
}, expandedIdsProp, onExpand),
|
141
|
+
expandedIds = _useUncontrolledState[0],
|
142
|
+
tryChangeExpandedIds = _useUncontrolledState[1];
|
176
143
|
var _useCheck = useCheck.useCheck(checkedMode, disabled, flattedData, defaultValue, valueProp, onChange),
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
144
|
+
value = _useCheck[0],
|
145
|
+
tryChangeValue = _useCheck[1],
|
146
|
+
onNodeCheck = _useCheck[2],
|
147
|
+
checkedNodes = _useCheck[3],
|
148
|
+
parsedCheckedIds = _useCheck[4];
|
183
149
|
var onCheck = React.useCallback(function (checkedIds, option) {
|
184
150
|
var targetNode = option.targetNode,
|
185
|
-
|
151
|
+
checked = option.checked;
|
186
152
|
onNodeCheck(targetNode, checked);
|
187
153
|
}, [onNodeCheck]);
|
188
154
|
var onValueChange = React.useCallback(function (values, targetItem, shouldChecked) {
|
@@ -193,16 +159,15 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
193
159
|
// 操作单个
|
194
160
|
onNodeCheck(targetItem[0], shouldChecked);
|
195
161
|
}
|
196
|
-
}, [tryChangeValue, onNodeCheck]);
|
162
|
+
}, [tryChangeValue, onNodeCheck]);
|
163
|
+
// ************************** 异步搜索 ************************* //
|
197
164
|
// const { loading, hasError, loadRemoteData } = useDataSource({ dataSource, validate: isArray })
|
198
|
-
|
199
165
|
var _b = useSearchMode.useAsyncSearch({
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
166
|
+
dataSource: dataSource
|
167
|
+
}),
|
168
|
+
loading = _b.loading,
|
169
|
+
hasError = _b.hasError,
|
170
|
+
dataSourceStrategy = tslib.__rest(_b, ["loading", "hasError"]);
|
206
171
|
var customSearchStrategy = useSearchMode.useTreeCustomSearch({
|
207
172
|
data: data,
|
208
173
|
filterOption: filterOption
|
@@ -218,27 +183,23 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
218
183
|
flattedData: flattedData,
|
219
184
|
searchMode: searchModeProp
|
220
185
|
});
|
221
|
-
|
222
186
|
var _useSearchMode = useSearchMode.useSearchMode({
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
187
|
+
searchable: searchableProp,
|
188
|
+
strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy, highlightSearchStrategy]
|
189
|
+
}),
|
190
|
+
stateInSearch = _useSearchMode.state,
|
191
|
+
setStateInSearch = _useSearchMode.setStateInSearch,
|
192
|
+
searchable = _useSearchMode.searchable,
|
193
|
+
searchMode = _useSearchMode.searchMode,
|
194
|
+
onSearch = _useSearchMode.onSearch,
|
195
|
+
searchValue = _useSearchMode.keyword;
|
196
|
+
// 拦截 titleRender,自定义高亮展示
|
234
197
|
var proxyTitleRender = React.useCallback(function (node) {
|
235
198
|
if (titleRender) {
|
236
199
|
var _ret = titleRender(node);
|
237
|
-
|
238
200
|
if (_ret && _ret !== true) return _ret;
|
239
|
-
}
|
240
|
-
|
241
|
-
|
201
|
+
}
|
202
|
+
// 本地搜索执行默认高亮规则
|
242
203
|
var highlight = !!searchValue && (searchMode === 'highlight' || searchMode === 'filter');
|
243
204
|
var ret = highlight ? /*#__PURE__*/React__default["default"].createElement(highlighter.Highlighter, {
|
244
205
|
keyword: searchValue
|
@@ -257,19 +218,18 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
257
218
|
});
|
258
219
|
} : tryChangeExpandedIds,
|
259
220
|
render: proxyTitleRender
|
260
|
-
};
|
261
|
-
|
221
|
+
};
|
222
|
+
// 下拉菜单不能合并(因为树形数据,不知道是第几级)
|
262
223
|
var mergedData = React.useMemo(function () {
|
263
224
|
var nextData = checkedNodes.concat(flattedData);
|
264
225
|
return arrayUtils.uniqBy(nextData, 'id');
|
265
226
|
}, [checkedNodes, flattedData]);
|
266
227
|
var toggleCheckAll = React.useCallback(function () {
|
267
228
|
var _getAllCheckedStatus = index.getAllCheckedStatus(flattedData, parsedCheckedIds),
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
229
|
+
currentAllChecked = _getAllCheckedStatus[0],
|
230
|
+
hasCheckedAll = _getAllCheckedStatus[2];
|
231
|
+
var shouldChecked = !currentAllChecked;
|
232
|
+
// 全选操作
|
273
233
|
if (!currentAllChecked && !hasCheckedAll) {
|
274
234
|
tryChangeValue(flattedData.filter(function (item) {
|
275
235
|
if (!item.disabled) {
|
@@ -277,14 +237,11 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
277
237
|
if (checkedMode === 'CHILD') {
|
278
238
|
return !item.children;
|
279
239
|
}
|
280
|
-
|
281
240
|
if (checkedMode === 'PARENT') {
|
282
241
|
return item.depth === 0;
|
283
242
|
}
|
284
|
-
|
285
243
|
return true;
|
286
244
|
}
|
287
|
-
|
288
245
|
return false;
|
289
246
|
}).map(function (_ref) {
|
290
247
|
var id = _ref.id;
|
@@ -294,13 +251,11 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
294
251
|
tryChangeValue([], null, shouldChecked, []);
|
295
252
|
}
|
296
253
|
}, [checkedMode, flattedData, parsedCheckedIds, tryChangeValue]);
|
297
|
-
|
298
254
|
var _useMemo = React.useMemo(function () {
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
255
|
+
return index.getAllCheckedStatus(flattedData, parsedCheckedIds);
|
256
|
+
}, [flattedData, parsedCheckedIds]),
|
257
|
+
showAllChecked = _useMemo[0],
|
258
|
+
showIndeterminate = _useMemo[1];
|
304
259
|
var renderDefaultFooter = function renderDefaultFooter() {
|
305
260
|
if (showCheckAll) {
|
306
261
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
|
@@ -310,15 +265,14 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
310
265
|
}, i18n.get('checkSelect.checkAll')));
|
311
266
|
}
|
312
267
|
};
|
313
|
-
|
314
|
-
|
268
|
+
var cls = classname.cx(prefixCls, className);
|
269
|
+
// 过滤掉未选中的数据
|
315
270
|
// const tagList = useMemo(() => {
|
316
271
|
// // @ts-ignore
|
317
272
|
// const [semiCheckedIds] = getSemiCheckedIdsWithSet(flattedData, (id) => value.includes(id))
|
318
273
|
// const ids = Array.from(new Set([...semiCheckedIds, ...value]))
|
319
274
|
// return flattedData.filter((item) => ids.includes(item.id))
|
320
275
|
// }, [value, flattedData])
|
321
|
-
|
322
276
|
return /*#__PURE__*/React__default["default"].createElement(picker.Picker, Object.assign({
|
323
277
|
ref: ref,
|
324
278
|
className: cls
|
@@ -355,8 +309,7 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
355
309
|
// @ts-ignore
|
356
310
|
invalid: invalid
|
357
311
|
}))
|
358
|
-
}), typeAssertion.isArrayNonEmpty(treeProps.data) ?
|
359
|
-
/*#__PURE__*/
|
312
|
+
}), typeAssertion.isArrayNonEmpty(treeProps.data) ? ( /*#__PURE__*/
|
360
313
|
// 只做渲染,不做逻辑处理(比如搜索过滤后,check操作的是对过滤后的data操作,这是不符合预期的)
|
361
314
|
React__default["default"].createElement(tree.Tree, Object.assign({
|
362
315
|
size: 'md',
|
@@ -373,13 +326,11 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
373
326
|
virtual: virtual,
|
374
327
|
itemHeight: itemHeight,
|
375
328
|
height: height
|
376
|
-
}, treeProps)) : null);
|
329
|
+
}, treeProps))) : null);
|
377
330
|
});
|
378
|
-
|
379
331
|
if (env.__DEV__) {
|
380
332
|
CheckTreeSelect.displayName = 'CheckTreeSelect';
|
381
333
|
}
|
382
|
-
|
383
334
|
var ALWAYS_ALLOW = function ALWAYS_ALLOW() {
|
384
335
|
return true;
|
385
336
|
};
|
@@ -390,39 +341,34 @@ var ALWAYS_ALLOW = function ALWAYS_ALLOW() {
|
|
390
341
|
* @param flattedData
|
391
342
|
* @returns
|
392
343
|
*/
|
393
|
-
|
394
|
-
|
395
344
|
var getSemiCheckedIdsWithSet = function getSemiCheckedIdsWithSet(flattedData, isChecked, allowCheck) {
|
396
345
|
if (allowCheck === void 0) {
|
397
346
|
allowCheck = ALWAYS_ALLOW;
|
398
347
|
}
|
399
|
-
|
400
348
|
var semiCheckedNodes = [];
|
401
349
|
var semiCheckedIdsSet = new Set();
|
402
350
|
var parentId;
|
403
351
|
var parent;
|
404
352
|
flattedData.forEach(function (node) {
|
405
353
|
parent = node.parent;
|
406
|
-
|
407
354
|
if (parent && parent.id !== undefined) {
|
408
355
|
if (!allowCheck(parent)) return;
|
409
356
|
parentId = parent.id;
|
410
|
-
if (semiCheckedIdsSet.has(parentId)) return;
|
411
|
-
|
357
|
+
if (semiCheckedIdsSet.has(parentId)) return;
|
358
|
+
// 父节点没选中,但是当前节点被选中,则视为半选
|
412
359
|
if (!isChecked(parentId) && isChecked(node.id)) {
|
413
360
|
semiCheckedIdsSet.add(parentId);
|
414
361
|
semiCheckedNodes.push(parent);
|
415
362
|
}
|
416
363
|
}
|
417
|
-
});
|
418
|
-
|
364
|
+
});
|
365
|
+
// 自下而上设置半选态
|
419
366
|
semiCheckedNodes.forEach(function (node) {
|
420
367
|
parent = node.parent;
|
421
|
-
|
422
368
|
while (parent && parent.id !== undefined) {
|
423
369
|
if (!allowCheck(parent)) return;
|
424
|
-
parentId = parent.id;
|
425
|
-
|
370
|
+
parentId = parent.id;
|
371
|
+
// 可能存在兄弟节点,共同祖先需要去重,避免重复计算
|
426
372
|
if (semiCheckedIdsSet.has(parentId)) return;
|
427
373
|
semiCheckedIdsSet.add(parentId);
|
428
374
|
parent = parent.parent;
|
@@ -431,6 +377,5 @@ var getSemiCheckedIdsWithSet = function getSemiCheckedIdsWithSet(flattedData, is
|
|
431
377
|
var semiCheckedIds = Array.from(semiCheckedIdsSet);
|
432
378
|
return [semiCheckedIds, semiCheckedIdsSet];
|
433
379
|
};
|
434
|
-
|
435
380
|
exports.CheckTreeSelect = CheckTreeSelect;
|
436
381
|
exports.getSemiCheckedIdsWithSet = getSemiCheckedIdsWithSet;
|
@@ -12,81 +12,68 @@
|
|
12
12
|
Object.defineProperty(exports, '__esModule', {
|
13
13
|
value: true
|
14
14
|
});
|
15
|
-
|
16
15
|
var React = require('react');
|
17
|
-
|
18
16
|
var useUncontrolledState = require('@hi-ui/use-uncontrolled-state');
|
19
|
-
|
20
17
|
var useCheck$1 = require('@hi-ui/use-check');
|
21
|
-
|
22
18
|
var index = require('../utils/index.js');
|
19
|
+
|
23
20
|
/**
|
24
21
|
* 用于 tree 组件复选的 hook
|
25
22
|
*/
|
26
|
-
|
27
|
-
|
28
23
|
var useCheck = function useCheck(checkedMode, disabled, flattedData, defaultCheckedIds, checkedIdsProp, onCheck) {
|
29
24
|
// 搜索时临时选中缓存数据
|
30
25
|
var _useState = React.useState([]),
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
checkedNodes = _useState[0],
|
27
|
+
setCheckedNodes = _useState[1];
|
34
28
|
var _useUncontrolledState = useUncontrolledState.useUncontrolledState(defaultCheckedIds, checkedIdsProp, function (checkedIds, checkedNode, checked, semiCheckedIds) {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
29
|
+
var nextCheckedNodes = flattedData.filter(function (item) {
|
30
|
+
return checkedIds.includes(item.id);
|
31
|
+
});
|
32
|
+
setCheckedNodes(nextCheckedNodes);
|
33
|
+
onCheck === null || onCheck === void 0 ? void 0 : onCheck(checkedIds, {
|
34
|
+
checkedNodes: nextCheckedNodes.map(function (item) {
|
35
|
+
return item.raw;
|
36
|
+
}),
|
37
|
+
targetNode: checkedNode,
|
38
|
+
semiCheckedIds: semiCheckedIds,
|
39
|
+
checked: checked
|
40
|
+
});
|
41
|
+
}),
|
42
|
+
checkedIds = _useUncontrolledState[0],
|
43
|
+
trySetCheckedIds = _useUncontrolledState[1];
|
44
|
+
// 入口数据处理
|
52
45
|
var parsedCheckedIds = React.useMemo(function () {
|
53
46
|
return index.parseCheckDataDirty(checkedMode, checkedIds, flattedData, allowCheck);
|
54
47
|
}, [checkedMode, checkedIds, flattedData]);
|
55
48
|
var cascaded = checkedMode !== 'SEPARATE';
|
56
|
-
|
57
49
|
var _useCascadeCheck = useCheck$1.useCascadeCheck({
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
50
|
+
cascaded: cascaded,
|
51
|
+
disabled: disabled,
|
52
|
+
flattedData: flattedData,
|
53
|
+
checkedIds: parsedCheckedIds,
|
54
|
+
onCheck: function onCheck(checkedIds, checkedNode, checked, semiCheckedIds) {
|
55
|
+
// 出口数据处理
|
56
|
+
var processedIds = index.processCheckedIds(checkedMode, checkedIds, flattedData, allowCheck);
|
57
|
+
trySetCheckedIds(processedIds, checkedNode, checked, semiCheckedIds);
|
58
|
+
},
|
59
|
+
allowCheck: allowCheck
|
60
|
+
}),
|
61
|
+
onNodeCheck = _useCascadeCheck[0];
|
71
62
|
var proxyOnNodeCheck = React.useCallback(function (target, shouldChecked) {
|
72
63
|
// 保证 target 来源于原数据自身,而不是tree内部
|
73
64
|
var targetNode = flattedData.find(function (item) {
|
74
65
|
return item.id === target.id;
|
75
66
|
});
|
76
|
-
|
77
67
|
if (targetNode) {
|
78
68
|
onNodeCheck(targetNode, shouldChecked);
|
79
69
|
}
|
80
70
|
}, [onNodeCheck, flattedData]);
|
81
71
|
return [checkedIds, trySetCheckedIds, proxyOnNodeCheck, checkedNodes, parsedCheckedIds];
|
82
72
|
};
|
83
|
-
|
84
73
|
var allowCheck = function allowCheck(targetItem) {
|
85
74
|
if (targetItem.disabled) {
|
86
75
|
return false;
|
87
76
|
}
|
88
|
-
|
89
77
|
return true;
|
90
78
|
};
|
91
|
-
|
92
79
|
exports.useCheck = useCheck;
|
package/lib/cjs/index.js
CHANGED
@@ -12,11 +12,8 @@
|
|
12
12
|
Object.defineProperty(exports, '__esModule', {
|
13
13
|
value: true
|
14
14
|
});
|
15
|
-
|
16
15
|
require('./styles/index.scss.js');
|
17
|
-
|
18
16
|
var CheckTreeSelect = require('./CheckTreeSelect.js');
|
19
|
-
|
20
17
|
exports.CheckTreeSelect = CheckTreeSelect.CheckTreeSelect;
|
21
18
|
exports["default"] = CheckTreeSelect.CheckTreeSelect;
|
22
19
|
exports.getSemiCheckedIdsWithSet = CheckTreeSelect.getSemiCheckedIdsWithSet;
|