@hi-ui/check-tree-select 5.0.0-experimental.2 → 5.0.0-experimental.3
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 +13 -0
- package/lib/cjs/CheckTreeSelect.js +11 -10
- package/lib/cjs/hooks/use-check.js +3 -0
- package/lib/cjs/utils/index.js +22 -6
- package/lib/esm/CheckTreeSelect.js +11 -10
- package/lib/esm/hooks/use-check.js +3 -0
- package/lib/esm/utils/index.js +22 -6
- package/lib/types/types.d.ts +9 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @hi-ui/check-tree-select
|
|
2
2
|
|
|
3
|
+
## 5.0.0-experimental.3
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 07a57b9c1: feat(check-tree-select): 支持设置 checkable (5.0)
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [07a57b9c1]
|
|
12
|
+
- Updated dependencies [95d930354]
|
|
13
|
+
- @hi-ui/tree@5.0.0-experimental.4
|
|
14
|
+
- @hi-ui/core@5.0.0-experimental.2
|
|
15
|
+
|
|
3
16
|
## 5.0.0-experimental.2
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
|
@@ -165,6 +165,7 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
165
165
|
flattedNode.title = getKeyFields(raw, 'title');
|
|
166
166
|
flattedNode.disabled = (_a = getKeyFields(raw, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
|
167
167
|
flattedNode.isLeaf = (_b = getKeyFields(raw, 'isLeaf')) !== null && _b !== void 0 ? _b : false;
|
|
168
|
+
flattedNode.checkable = raw.checkable !== false;
|
|
168
169
|
return flattedNode;
|
|
169
170
|
}
|
|
170
171
|
});
|
|
@@ -283,17 +284,17 @@ var CheckTreeSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
283
284
|
// 全选操作
|
|
284
285
|
if (!currentAllChecked && !hasCheckedAll) {
|
|
285
286
|
tryChangeValue(flattedData.filter(function (item) {
|
|
286
|
-
if (
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
return
|
|
287
|
+
if (item.disabled || item.checkable === false) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
// 根据 checkedMode 类型过滤出已选项,保证全选操作下 onChange 回调的值是符合 checkedMode 的规则
|
|
291
|
+
if (checkedMode === 'CHILD') {
|
|
292
|
+
return !item.children;
|
|
293
|
+
}
|
|
294
|
+
if (checkedMode === 'PARENT') {
|
|
295
|
+
return item.depth === 0;
|
|
295
296
|
}
|
|
296
|
-
return
|
|
297
|
+
return true;
|
|
297
298
|
}).map(function (_ref) {
|
|
298
299
|
var id = _ref.id;
|
|
299
300
|
return id;
|
package/lib/cjs/utils/index.js
CHANGED
|
@@ -120,12 +120,21 @@ function fillCheck(checkedIds, depthEntities, nodeEntities, maxDepth, allowCheck
|
|
|
120
120
|
children = entity.children;
|
|
121
121
|
if (visitedIds.has(id)) return;
|
|
122
122
|
if (typeAssertion.isArrayNonEmpty(children)) {
|
|
123
|
-
|
|
123
|
+
// 可勾选子节点需在 checkedIds;disabled / checkable:false 但有子树时走 visitedIds;
|
|
124
|
+
// checkable:false 且无子节点(纯展示叶)不阻塞父级全选
|
|
125
|
+
var childFails = function childFails(child) {
|
|
126
|
+
if (!allowCheck(child)) {
|
|
127
|
+
if (typeAssertion.isArrayNonEmpty(child.children)) {
|
|
128
|
+
return visitedIds.has(child.id) ? !visitedIds.get(child.id) : true;
|
|
129
|
+
}
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
124
132
|
if (visitedIds.has(child.id)) {
|
|
125
133
|
return !visitedIds.get(child.id);
|
|
126
134
|
}
|
|
127
135
|
return !checkedIdsSet.has(child.id);
|
|
128
|
-
}
|
|
136
|
+
};
|
|
137
|
+
var shouldChecked = !children.some(childFails);
|
|
129
138
|
visitedIds.set(id, shouldChecked);
|
|
130
139
|
if (shouldChecked && allowCheck(entity)) {
|
|
131
140
|
checkedIdsSet.add(id);
|
|
@@ -148,12 +157,19 @@ var getAllCheckedStatus = function getAllCheckedStatus(flattedData, values) {
|
|
|
148
157
|
treeIdsSet["delete"](id);
|
|
149
158
|
}
|
|
150
159
|
});
|
|
151
|
-
|
|
160
|
+
var nonCheckableCount = flattedData.filter(function (item) {
|
|
161
|
+
return item.disabled || item.checkable === false;
|
|
162
|
+
}).length;
|
|
163
|
+
var onlyNonCheckableLeft = treeIdsSet.size > 0 && [].concat(treeIdsSet).every(function (id) {
|
|
164
|
+
var n = flattedData.find(function (item) {
|
|
165
|
+
return item.id === id;
|
|
166
|
+
});
|
|
167
|
+
return n && (n.disabled || n.checkable === false);
|
|
168
|
+
});
|
|
169
|
+
return [hasValue && (treeIdsSet.size === 0 || onlyNonCheckableLeft), hasValue && treeIdsSet.size > 0 && !onlyNonCheckableLeft,
|
|
152
170
|
// 该值用来判断剩余未选中的节点是否都是 disabled 的
|
|
153
171
|
// 如果为 true 则表示可选值都已选中
|
|
154
|
-
treeIdsSet.size ===
|
|
155
|
-
return item.disabled;
|
|
156
|
-
}).length];
|
|
172
|
+
treeIdsSet.size === nonCheckableCount];
|
|
157
173
|
};
|
|
158
174
|
exports.getAllCheckedStatus = getAllCheckedStatus;
|
|
159
175
|
exports.parseCheckDataDirty = parseCheckDataDirty;
|
|
@@ -152,6 +152,7 @@ var CheckTreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
152
152
|
flattedNode.title = getKeyFields(raw, 'title');
|
|
153
153
|
flattedNode.disabled = (_a = getKeyFields(raw, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
|
154
154
|
flattedNode.isLeaf = (_b = getKeyFields(raw, 'isLeaf')) !== null && _b !== void 0 ? _b : false;
|
|
155
|
+
flattedNode.checkable = raw.checkable !== false;
|
|
155
156
|
return flattedNode;
|
|
156
157
|
}
|
|
157
158
|
});
|
|
@@ -270,17 +271,17 @@ var CheckTreeSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
270
271
|
// 全选操作
|
|
271
272
|
if (!currentAllChecked && !hasCheckedAll) {
|
|
272
273
|
tryChangeValue(flattedData.filter(function (item) {
|
|
273
|
-
if (
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return
|
|
274
|
+
if (item.disabled || item.checkable === false) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
// 根据 checkedMode 类型过滤出已选项,保证全选操作下 onChange 回调的值是符合 checkedMode 的规则
|
|
278
|
+
if (checkedMode === 'CHILD') {
|
|
279
|
+
return !item.children;
|
|
280
|
+
}
|
|
281
|
+
if (checkedMode === 'PARENT') {
|
|
282
|
+
return item.depth === 0;
|
|
282
283
|
}
|
|
283
|
-
return
|
|
284
|
+
return true;
|
|
284
285
|
}).map(function (_ref) {
|
|
285
286
|
var id = _ref.id;
|
|
286
287
|
return id;
|
package/lib/esm/utils/index.js
CHANGED
|
@@ -115,12 +115,21 @@ function fillCheck(checkedIds, depthEntities, nodeEntities, maxDepth, allowCheck
|
|
|
115
115
|
children = entity.children;
|
|
116
116
|
if (visitedIds.has(id)) return;
|
|
117
117
|
if (isArrayNonEmpty(children)) {
|
|
118
|
-
|
|
118
|
+
// 可勾选子节点需在 checkedIds;disabled / checkable:false 但有子树时走 visitedIds;
|
|
119
|
+
// checkable:false 且无子节点(纯展示叶)不阻塞父级全选
|
|
120
|
+
var childFails = function childFails(child) {
|
|
121
|
+
if (!allowCheck(child)) {
|
|
122
|
+
if (isArrayNonEmpty(child.children)) {
|
|
123
|
+
return visitedIds.has(child.id) ? !visitedIds.get(child.id) : true;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
119
127
|
if (visitedIds.has(child.id)) {
|
|
120
128
|
return !visitedIds.get(child.id);
|
|
121
129
|
}
|
|
122
130
|
return !checkedIdsSet.has(child.id);
|
|
123
|
-
}
|
|
131
|
+
};
|
|
132
|
+
var shouldChecked = !children.some(childFails);
|
|
124
133
|
visitedIds.set(id, shouldChecked);
|
|
125
134
|
if (shouldChecked && allowCheck(entity)) {
|
|
126
135
|
checkedIdsSet.add(id);
|
|
@@ -143,11 +152,18 @@ var getAllCheckedStatus = function getAllCheckedStatus(flattedData, values) {
|
|
|
143
152
|
treeIdsSet["delete"](id);
|
|
144
153
|
}
|
|
145
154
|
});
|
|
146
|
-
|
|
155
|
+
var nonCheckableCount = flattedData.filter(function (item) {
|
|
156
|
+
return item.disabled || item.checkable === false;
|
|
157
|
+
}).length;
|
|
158
|
+
var onlyNonCheckableLeft = treeIdsSet.size > 0 && [].concat(treeIdsSet).every(function (id) {
|
|
159
|
+
var n = flattedData.find(function (item) {
|
|
160
|
+
return item.id === id;
|
|
161
|
+
});
|
|
162
|
+
return n && (n.disabled || n.checkable === false);
|
|
163
|
+
});
|
|
164
|
+
return [hasValue && (treeIdsSet.size === 0 || onlyNonCheckableLeft), hasValue && treeIdsSet.size > 0 && !onlyNonCheckableLeft,
|
|
147
165
|
// 该值用来判断剩余未选中的节点是否都是 disabled 的
|
|
148
166
|
// 如果为 true 则表示可选值都已选中
|
|
149
|
-
treeIdsSet.size ===
|
|
150
|
-
return item.disabled;
|
|
151
|
-
}).length];
|
|
167
|
+
treeIdsSet.size === nonCheckableCount];
|
|
152
168
|
};
|
|
153
169
|
export { getAllCheckedStatus, parseCheckDataDirty, processCheckedIds };
|
package/lib/types/types.d.ts
CHANGED
|
@@ -22,6 +22,11 @@ export interface CheckTreeSelectDataItem extends HiBaseDataItem {
|
|
|
22
22
|
* 是否为叶子节点,当 children 为空数组也表示为叶子结点
|
|
23
23
|
*/
|
|
24
24
|
isLeaf?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* 节点是否展示复选框;为 `false` 时不展示复选框,且该节点不可被勾选(常用于仅作分组/展开的节点)
|
|
27
|
+
* @default true
|
|
28
|
+
*/
|
|
29
|
+
checkable?: boolean;
|
|
25
30
|
}
|
|
26
31
|
export interface FlattedCheckTreeSelectDataItem extends CheckTreeSelectDataItem {
|
|
27
32
|
/**
|
|
@@ -76,5 +81,9 @@ export interface CheckTreeSelectDataSource<T = any> {
|
|
|
76
81
|
transformResponse?: (response: object) => T;
|
|
77
82
|
}
|
|
78
83
|
export interface CheckTreeSelectItemEventData extends TreeNodeEventData {
|
|
84
|
+
/**
|
|
85
|
+
* 节点是否展示复选框(与数据项 `checkable` 一致,由 Tree 扁平化后透传)
|
|
86
|
+
*/
|
|
87
|
+
checkable?: boolean;
|
|
79
88
|
}
|
|
80
89
|
export type CheckTreeSelectAppearanceEnum = HiBaseAppearanceEnum | 'contained' | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hi-ui/check-tree-select",
|
|
3
|
-
"version": "5.0.0-experimental.
|
|
3
|
+
"version": "5.0.0-experimental.3",
|
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "HiUI <mi-hiui@xiaomi.com>",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@hi-ui/picker": "^5.0.0-experimental.2",
|
|
55
55
|
"@hi-ui/popper": "^5.0.0-experimental.1",
|
|
56
56
|
"@hi-ui/tag-input": "^5.0.0-experimental.2",
|
|
57
|
-
"@hi-ui/tree": "^5.0.0-experimental.
|
|
57
|
+
"@hi-ui/tree": "^5.0.0-experimental.4",
|
|
58
58
|
"@hi-ui/tree-utils": "^5.0.0-experimental.0",
|
|
59
59
|
"@hi-ui/type-assertion": "^5.0.0-experimental.0",
|
|
60
60
|
"@hi-ui/use-check": "^5.0.0-experimental.0",
|
|
@@ -65,12 +65,12 @@
|
|
|
65
65
|
"@hi-ui/use-merge-semantic": "^5.0.0-experimental.0"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
|
-
"@hi-ui/core": ">=5.0.0-experimental.
|
|
68
|
+
"@hi-ui/core": ">=5.0.0-experimental.2",
|
|
69
69
|
"react": ">=16.8.6",
|
|
70
70
|
"react-dom": ">=16.8.6"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"@hi-ui/core": "^5.0.0-experimental.
|
|
73
|
+
"@hi-ui/core": "^5.0.0-experimental.2",
|
|
74
74
|
"@hi-ui/core-css": "^5.0.0-experimental.2",
|
|
75
75
|
"react": "^17.0.1",
|
|
76
76
|
"react-dom": "^17.0.1"
|