@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 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 (!item.disabled) {
287
- // 根据 checkedMode 类型过滤出已选项,保证全选操作下 onChange 回调的值是符合 checkedMode 的规则
288
- if (checkedMode === 'CHILD') {
289
- return !item.children;
290
- }
291
- if (checkedMode === 'PARENT') {
292
- return item.depth === 0;
293
- }
294
- return true;
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 false;
297
+ return true;
297
298
  }).map(function (_ref) {
298
299
  var id = _ref.id;
299
300
  return id;
@@ -78,6 +78,9 @@ var allowCheck = function allowCheck(targetItem) {
78
78
  if (targetItem.disabled) {
79
79
  return false;
80
80
  }
81
+ if (targetItem.checkable === false) {
82
+ return false;
83
+ }
81
84
  return true;
82
85
  };
83
86
  exports.useCheck = useCheck;
@@ -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
- var shouldChecked = !children.some(function (child) {
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
- return [hasValue && treeIdsSet.size === 0, hasValue && treeIdsSet.size > 0,
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 === flattedData.filter(function (item) {
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 (!item.disabled) {
274
- // 根据 checkedMode 类型过滤出已选项,保证全选操作下 onChange 回调的值是符合 checkedMode 的规则
275
- if (checkedMode === 'CHILD') {
276
- return !item.children;
277
- }
278
- if (checkedMode === 'PARENT') {
279
- return item.depth === 0;
280
- }
281
- return true;
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 false;
284
+ return true;
284
285
  }).map(function (_ref) {
285
286
  var id = _ref.id;
286
287
  return id;
@@ -73,6 +73,9 @@ var allowCheck = function allowCheck(targetItem) {
73
73
  if (targetItem.disabled) {
74
74
  return false;
75
75
  }
76
+ if (targetItem.checkable === false) {
77
+ return false;
78
+ }
76
79
  return true;
77
80
  };
78
81
  export { useCheck };
@@ -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
- var shouldChecked = !children.some(function (child) {
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
- return [hasValue && treeIdsSet.size === 0, hasValue && treeIdsSet.size > 0,
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 === flattedData.filter(function (item) {
150
- return item.disabled;
151
- }).length];
167
+ treeIdsSet.size === nonCheckableCount];
152
168
  };
153
169
  export { getAllCheckedStatus, parseCheckDataDirty, processCheckedIds };
@@ -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.2",
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.2",
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.1",
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.1",
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"