@hi-ui/check-cascader 4.0.0-beta.3 → 4.0.0-beta.30
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/CheckCascader.js +62 -68
- package/lib/cjs/CheckCascaderMenu.js +13 -12
- package/lib/cjs/CheckCascaderMenus.js +15 -17
- package/lib/cjs/context.js +0 -1
- package/lib/cjs/hooks/use-async-switch.js +4 -5
- package/lib/cjs/hooks/{use-cache.js → use-cache/lib/esm/index.js} +11 -5
- package/lib/cjs/hooks/use-check.js +12 -6
- package/lib/cjs/hooks/use-select.js +0 -1
- package/lib/cjs/icons/index.js +3 -4
- package/lib/cjs/index.js +0 -1
- package/lib/cjs/styles/index.scss.js +1 -2
- package/lib/cjs/utils/index.js +177 -67
- package/lib/esm/CheckCascader.js +50 -53
- package/lib/esm/CheckCascaderMenu.js +3 -3
- package/lib/esm/CheckCascaderMenus.js +12 -14
- package/lib/esm/context.js +0 -1
- package/lib/esm/hooks/use-async-switch.js +0 -1
- package/lib/esm/hooks/{use-cache.js → use-cache/lib/esm/index.js} +11 -5
- package/lib/esm/hooks/use-check.js +11 -6
- package/lib/esm/hooks/use-select.js +0 -1
- package/lib/esm/icons/index.js +0 -1
- package/lib/esm/index.js +0 -1
- package/lib/esm/styles/index.scss.js +3 -5
- package/lib/esm/utils/index.js +175 -69
- package/lib/types/CheckCascader.d.ts +14 -11
- package/lib/types/CheckCascaderMenu.d.ts +4 -4
- package/lib/types/CheckCascaderMenus.d.ts +18 -7
- package/lib/types/context.d.ts +6 -6
- package/lib/types/hooks/index.d.ts +0 -2
- package/lib/types/hooks/use-async-switch.d.ts +2 -2
- package/lib/types/hooks/use-check.d.ts +3 -3
- package/lib/types/hooks/use-select.d.ts +2 -2
- package/lib/types/types.d.ts +11 -12
- package/lib/types/utils/index.d.ts +17 -13
- package/package.json +26 -26
- package/lib/cjs/CheckCascader.js.map +0 -1
- package/lib/cjs/CheckCascaderMenu.js.map +0 -1
- package/lib/cjs/CheckCascaderMenus.js.map +0 -1
- package/lib/cjs/context.js.map +0 -1
- package/lib/cjs/hooks/use-async-switch.js.map +0 -1
- package/lib/cjs/hooks/use-cache.js.map +0 -1
- package/lib/cjs/hooks/use-check.js.map +0 -1
- package/lib/cjs/hooks/use-search.js +0 -40
- package/lib/cjs/hooks/use-search.js.map +0 -1
- package/lib/cjs/hooks/use-select.js.map +0 -1
- package/lib/cjs/icons/index.js.map +0 -1
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/styles/index.scss.js.map +0 -1
- package/lib/cjs/utils/index.js.map +0 -1
- package/lib/esm/CheckCascader.js.map +0 -1
- package/lib/esm/CheckCascaderMenu.js.map +0 -1
- package/lib/esm/CheckCascaderMenus.js.map +0 -1
- package/lib/esm/context.js.map +0 -1
- package/lib/esm/hooks/use-async-switch.js.map +0 -1
- package/lib/esm/hooks/use-cache.js.map +0 -1
- package/lib/esm/hooks/use-check.js.map +0 -1
- package/lib/esm/hooks/use-search.js +0 -31
- package/lib/esm/hooks/use-search.js.map +0 -1
- package/lib/esm/hooks/use-select.js.map +0 -1
- package/lib/esm/icons/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/styles/index.scss.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/types/hooks/use-cache.d.ts +0 -8
- package/lib/types/hooks/use-search.d.ts +0 -13
package/lib/cjs/utils/index.js
CHANGED
@@ -12,6 +12,10 @@
|
|
12
12
|
Object.defineProperty(exports, '__esModule', {
|
13
13
|
value: true
|
14
14
|
});
|
15
|
+
|
16
|
+
var treeUtils = require('@hi-ui/tree-utils');
|
17
|
+
|
18
|
+
var typeAssertion = require('@hi-ui/type-assertion');
|
15
19
|
/**
|
16
20
|
* 扁平化树数据结构,基于前序遍历
|
17
21
|
*
|
@@ -19,74 +23,38 @@ Object.defineProperty(exports, '__esModule', {
|
|
19
23
|
* @returns
|
20
24
|
*/
|
21
25
|
|
22
|
-
var flattenTreeData = function flattenTreeData(treeData) {
|
23
|
-
var flattedTreeData = [];
|
24
|
-
|
25
|
-
var dig = function dig(node, depth, parent) {
|
26
|
-
var id = node.id,
|
27
|
-
title = node.title,
|
28
|
-
children = node.children,
|
29
|
-
_node$checkable = node.checkable,
|
30
|
-
checkable = _node$checkable === void 0 ? true : _node$checkable,
|
31
|
-
_node$isLeaf = node.isLeaf,
|
32
|
-
isLeaf = _node$isLeaf === void 0 ? false : _node$isLeaf,
|
33
|
-
_node$disabled = node.disabled,
|
34
|
-
disabled = _node$disabled === void 0 ? false : _node$disabled,
|
35
|
-
_node$disabledCheckbo = node.disabledCheckbox,
|
36
|
-
disabledCheckbox = _node$disabledCheckbo === void 0 ? false : _node$disabledCheckbo;
|
37
|
-
var flattedNode = {
|
38
|
-
id: id,
|
39
|
-
title: title,
|
40
|
-
depth: depth,
|
41
|
-
parent: parent,
|
42
|
-
raw: node,
|
43
|
-
isLeaf: isLeaf,
|
44
|
-
disabled: disabled,
|
45
|
-
disabledCheckbox: disabledCheckbox,
|
46
|
-
checkable: checkable
|
47
|
-
};
|
48
|
-
flattedTreeData.push(flattedNode);
|
49
|
-
|
50
|
-
if (children) {
|
51
|
-
var childDepth = depth + 1;
|
52
|
-
flattedNode.children = children.map(function (child) {
|
53
|
-
return dig(child, childDepth, flattedNode);
|
54
|
-
});
|
55
|
-
}
|
56
|
-
|
57
|
-
return flattedNode;
|
58
|
-
}; // @ts-ignore
|
59
26
|
|
27
|
+
var flattenTreeData = function flattenTreeData(treeData, fieldNames) {
|
28
|
+
/**
|
29
|
+
* 转换对象
|
30
|
+
*/
|
31
|
+
var getKeyFields = function getKeyFields(node, key) {
|
32
|
+
if (fieldNames) {
|
33
|
+
return node[fieldNames[key] || key];
|
34
|
+
}
|
60
35
|
|
61
|
-
|
62
|
-
|
63
|
-
treeRoot.children = treeData.map(function (node) {
|
64
|
-
return dig(node, 0, treeRoot);
|
65
|
-
});
|
66
|
-
return flattedTreeData;
|
67
|
-
};
|
68
|
-
|
69
|
-
var getTreeRoot = function getTreeRoot() {
|
70
|
-
return {
|
71
|
-
depth: -1
|
36
|
+
return node[key];
|
72
37
|
};
|
73
|
-
};
|
74
|
-
/**
|
75
|
-
* 获取祖先节点,包括自己
|
76
|
-
* @param node
|
77
|
-
* @returns
|
78
|
-
*/
|
79
|
-
|
80
38
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
39
|
+
return treeUtils.baseFlattenTree({
|
40
|
+
tree: treeData,
|
41
|
+
childrenFieldName: function childrenFieldName(node) {
|
42
|
+
return getKeyFields(node, 'children');
|
43
|
+
},
|
44
|
+
transform: function transform(node) {
|
45
|
+
var _a, _b, _c, _d;
|
88
46
|
|
89
|
-
|
47
|
+
var flattedNode = node;
|
48
|
+
var raw = node.raw;
|
49
|
+
flattedNode.id = getKeyFields(raw, 'id');
|
50
|
+
flattedNode.title = getKeyFields(raw, 'title');
|
51
|
+
flattedNode.disabled = (_a = getKeyFields(raw, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
52
|
+
flattedNode.isLeaf = (_b = getKeyFields(raw, 'isLeaf')) !== null && _b !== void 0 ? _b : false;
|
53
|
+
flattedNode.checkable = (_c = getKeyFields(raw, 'checkable')) !== null && _c !== void 0 ? _c : true;
|
54
|
+
flattedNode.disabledCheckbox = (_d = getKeyFields(raw, 'disabledCheckbox')) !== null && _d !== void 0 ? _d : false;
|
55
|
+
return flattedNode;
|
56
|
+
}
|
57
|
+
});
|
90
58
|
};
|
91
59
|
|
92
60
|
var getActiveMenus = function getActiveMenus(data, selectedIds) {
|
@@ -128,20 +96,162 @@ var getActiveMenuIds = function getActiveMenuIds(data, selectedIds) {
|
|
128
96
|
return selectedIds === id;
|
129
97
|
});
|
130
98
|
if (!selectedOption) return [];
|
131
|
-
return
|
99
|
+
return treeUtils.getTopDownAncestors(selectedOption).map(function (_ref4) {
|
132
100
|
var id = _ref4.id;
|
133
101
|
return id;
|
134
|
-
})
|
102
|
+
});
|
135
103
|
};
|
136
104
|
|
137
105
|
function getCascaderItemEventData(node, requiredProps) {
|
138
106
|
return Object.assign(Object.assign({}, node), requiredProps);
|
139
107
|
}
|
108
|
+
/**
|
109
|
+
* 处理选中的回显数据
|
110
|
+
*
|
111
|
+
* @param checkedIds 当前所有被选中的节点 ID 集合
|
112
|
+
* @param nodeEntries 所有数据的Map 集合
|
113
|
+
* @param type 数据回显方式
|
114
|
+
*/
|
115
|
+
|
116
|
+
|
117
|
+
var processCheckedIds = function processCheckedIds(type, checkedIds, flattenData, allowCheck) {
|
118
|
+
var keySet = new Set(checkedIds);
|
119
|
+
|
120
|
+
switch (type) {
|
121
|
+
case 'CHILD':
|
122
|
+
return checkedIds.filter(function (id) {
|
123
|
+
var node = treeUtils.fFindNodeById(flattenData, id);
|
124
|
+
|
125
|
+
if (node) {
|
126
|
+
var children = node.children;
|
127
|
+
|
128
|
+
if (typeAssertion.isArrayNonEmpty(children)) {
|
129
|
+
if (children.filter(allowCheck).every(function (node) {
|
130
|
+
return keySet.has(node.id);
|
131
|
+
})) {
|
132
|
+
return false;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
} // 没有孩子节点,保留
|
136
|
+
|
137
|
+
|
138
|
+
return true;
|
139
|
+
});
|
140
|
+
|
141
|
+
case 'PARENT':
|
142
|
+
return checkedIds.filter(function (id) {
|
143
|
+
var node = treeUtils.fFindNodeById(flattenData, id);
|
144
|
+
|
145
|
+
if (node) {
|
146
|
+
// 向上递归遍历是否被勾选
|
147
|
+
var ancestors = treeUtils.getNodeAncestors(node);
|
148
|
+
console.log(ancestors);
|
149
|
+
|
150
|
+
if (ancestors.some(function (parent) {
|
151
|
+
return keySet.has(parent.id);
|
152
|
+
})) {
|
153
|
+
return false;
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
return true;
|
158
|
+
});
|
159
|
+
}
|
160
|
+
|
161
|
+
return checkedIds;
|
162
|
+
};
|
163
|
+
/**
|
164
|
+
* 根据传入的 checkedIds 解析全选/半选数据
|
165
|
+
*/
|
166
|
+
|
167
|
+
|
168
|
+
var parseCheckDataDirty = function parseCheckDataDirty(type, checkedIds, flattenData, allowCheck) {
|
169
|
+
switch (type) {
|
170
|
+
case 'CHILD':
|
171
|
+
case 'PARENT':
|
172
|
+
return dirtyCheck(checkedIds, flattenData, allowCheck);
|
173
|
+
}
|
174
|
+
|
175
|
+
return checkedIds;
|
176
|
+
};
|
177
|
+
|
178
|
+
function dirtyCheck(checkedIds, flattenData, allowCheck) {
|
179
|
+
var nodeEntities = flattenData.reduce(function (prev, cur) {
|
180
|
+
prev[cur.id] = cur;
|
181
|
+
return prev;
|
182
|
+
}, {});
|
183
|
+
var checkedIdsSet = new Set(checkedIds.filter(function (id) {
|
184
|
+
return !!nodeEntities[id];
|
185
|
+
}));
|
186
|
+
var depthEntities = new Map();
|
187
|
+
var maxDepth = 0; // Convert entities by depth for calculation
|
188
|
+
|
189
|
+
Object.keys(nodeEntities).forEach(function (id) {
|
190
|
+
var entity = nodeEntities[id];
|
191
|
+
var depth = entity.depth;
|
192
|
+
var depthSet = depthEntities.get(depth);
|
193
|
+
|
194
|
+
if (!depthSet) {
|
195
|
+
depthSet = new Set();
|
196
|
+
depthEntities.set(depth, depthSet);
|
197
|
+
}
|
198
|
+
|
199
|
+
depthSet.add(entity);
|
200
|
+
maxDepth = Math.max(maxDepth, depth);
|
201
|
+
});
|
202
|
+
return fillCheck(checkedIdsSet, depthEntities, nodeEntities, maxDepth, allowCheck);
|
203
|
+
}
|
204
|
+
/**
|
205
|
+
* 对 checkedIds 级联遗漏选项 id 填充
|
206
|
+
*
|
207
|
+
* 1. 把所有嵌套孩子节点 allowCheck 的都标记为 checked
|
208
|
+
* 2. 祖先节点从下至上维护 checked 状态
|
209
|
+
*/
|
210
|
+
|
211
|
+
|
212
|
+
function fillCheck(checkedIds, depthEntities, nodeEntities, maxDepth, allowCheck) {
|
213
|
+
var checkedIdsSet = new Set(checkedIds);
|
214
|
+
checkedIdsSet.forEach(function (id) {
|
215
|
+
var checkedNode = nodeEntities[id];
|
216
|
+
var nestedChildren = treeUtils.findNestedChildren(checkedNode, allowCheck);
|
217
|
+
nestedChildren.forEach(function (child) {
|
218
|
+
checkedIdsSet.add(child.id);
|
219
|
+
});
|
220
|
+
}); // 缓存中间结果,优化查询
|
221
|
+
|
222
|
+
var visitedIds = new Map();
|
223
|
+
|
224
|
+
for (var depth = maxDepth - 1; depth >= 0; --depth) {
|
225
|
+
var entities = depthEntities.get(depth);
|
226
|
+
entities === null || entities === void 0 ? void 0 : entities.forEach(function (entity) {
|
227
|
+
var id = entity.id,
|
228
|
+
children = entity.children;
|
229
|
+
if (visitedIds.has(id)) return;
|
230
|
+
|
231
|
+
if (typeAssertion.isArrayNonEmpty(children)) {
|
232
|
+
var shouldChecked = !children.some(function (child) {
|
233
|
+
if (visitedIds.has(child.id)) {
|
234
|
+
return !visitedIds.get(child.id);
|
235
|
+
}
|
236
|
+
|
237
|
+
return !checkedIdsSet.has(child.id);
|
238
|
+
});
|
239
|
+
visitedIds.set(id, shouldChecked);
|
240
|
+
|
241
|
+
if (shouldChecked && allowCheck(entity)) {
|
242
|
+
checkedIdsSet.add(id);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
});
|
246
|
+
}
|
247
|
+
|
248
|
+
return Array.from(checkedIdsSet);
|
249
|
+
}
|
140
250
|
|
141
251
|
exports.flattenTreeData = flattenTreeData;
|
142
252
|
exports.getActiveMenuIds = getActiveMenuIds;
|
143
253
|
exports.getActiveMenus = getActiveMenus;
|
144
254
|
exports.getCascaderItemEventData = getCascaderItemEventData;
|
145
255
|
exports.getFlattedMenus = getFlattedMenus;
|
146
|
-
exports.
|
147
|
-
|
256
|
+
exports.parseCheckDataDirty = parseCheckDataDirty;
|
257
|
+
exports.processCheckedIds = processCheckedIds;
|
package/lib/esm/CheckCascader.js
CHANGED
@@ -8,26 +8,23 @@
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
9
9
|
*/
|
10
10
|
import { __rest } from 'tslib';
|
11
|
-
import React, { forwardRef, useMemo, useCallback
|
11
|
+
import React, { forwardRef, useMemo, useCallback } from 'react';
|
12
12
|
import { getPrefixCls, cx } from '@hi-ui/classname';
|
13
13
|
import { __DEV__ } from '@hi-ui/env';
|
14
|
-
import {
|
14
|
+
import { useUncontrolledToggle } from '@hi-ui/use-toggle';
|
15
15
|
import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
|
16
16
|
import { UpOutlined, DownOutlined } from '@hi-ui/icons';
|
17
|
-
import {
|
18
|
-
import '@hi-ui/use-check';
|
19
|
-
import { useCache } from './hooks/use-cache.js';
|
20
|
-
import '@babel/runtime/regenerator';
|
21
|
-
import { useLatestRef, useLatestCallback } from '@hi-ui/use-latest';
|
22
|
-
import { getTopDownAncestors, getNodeAncestorsWithMe } from '@hi-ui/tree-utils';
|
17
|
+
import { useCache } from './hooks/use-cache/lib/esm/index.js';
|
23
18
|
import { Picker } from '@hi-ui/picker';
|
24
19
|
import { TagInputMock } from '@hi-ui/tag-input';
|
25
|
-
import { uniqBy } from 'lodash';
|
26
20
|
import { CheckCascaderMenus } from './CheckCascaderMenus.js';
|
27
|
-
import { useTreeCustomSearch, useTreeUpMatchSearch, useSearchMode } from '@hi-ui/use-search-mode';
|
21
|
+
import { useTreeCustomSearch, useTreeUpMatchSearch, useSearchMode, matchStrategy } from '@hi-ui/use-search-mode';
|
28
22
|
import { flattenTreeData } from './utils/index.js';
|
23
|
+
import { getTopDownAncestors, getNodeAncestorsWithMe } from '@hi-ui/tree-utils';
|
24
|
+
import { useLatestCallback } from '@hi-ui/use-latest';
|
29
25
|
import { isUndef, isArrayNonEmpty } from '@hi-ui/type-assertion';
|
30
26
|
import { useLocaleContext } from '@hi-ui/locale-context';
|
27
|
+
import { callAllFuncs } from '@hi-ui/func-utils';
|
31
28
|
|
32
29
|
var _prefix = getPrefixCls('check-cascader');
|
33
30
|
|
@@ -50,7 +47,8 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
50
47
|
clearable = _a.clearable,
|
51
48
|
onSelect = _a.onSelect,
|
52
49
|
expandTrigger = _a.expandTrigger,
|
53
|
-
disabled = _a.disabled,
|
50
|
+
_a$disabled = _a.disabled,
|
51
|
+
disabled = _a$disabled === void 0 ? false : _a$disabled,
|
54
52
|
changeOnSelect = _a.changeOnSelect,
|
55
53
|
titleRender = _a.render,
|
56
54
|
displayRender = _a.displayRender,
|
@@ -60,18 +58,26 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
60
58
|
invalid = _a.invalid,
|
61
59
|
filterOption = _a.filterOption,
|
62
60
|
searchableProp = _a.searchable,
|
61
|
+
onSearchProp = _a.onSearch,
|
63
62
|
overlayClassName = _a.overlayClassName,
|
64
63
|
_a$type = _a.type,
|
65
64
|
type = _a$type === void 0 ? 'tree' : _a$type,
|
66
|
-
|
65
|
+
checkedMode = _a.checkedMode,
|
66
|
+
onOpen = _a.onOpen,
|
67
|
+
onClose = _a.onClose,
|
68
|
+
rest = __rest(_a, ["prefixCls", "className", "defaultValue", "value", "onChange", "data", "placeholder", "clearable", "onSelect", "expandTrigger", "disabled", "emptyContent", "changeOnSelect", "render", "displayRender", "checkCascaded", "searchPlaceholder", "onLoadChildren", "appearance", "invalid", "filterOption", "searchable", "onSearch", "overlayClassName", "type", "checkedMode", "onOpen", "onClose"]);
|
67
69
|
|
68
70
|
var i18n = useLocaleContext();
|
69
71
|
var placeholder = isUndef(placeholderProp) ? i18n.get('checkCascader.placeholder') : placeholderProp;
|
70
72
|
var flatted = type === 'flatted';
|
71
73
|
|
72
|
-
var
|
73
|
-
|
74
|
-
|
74
|
+
var _useUncontrolledToggl = useUncontrolledToggle({
|
75
|
+
disabled: disabled,
|
76
|
+
onOpen: onOpen,
|
77
|
+
onClose: onClose
|
78
|
+
}),
|
79
|
+
menuVisible = _useUncontrolledToggl[0],
|
80
|
+
menuVisibleAction = _useUncontrolledToggl[1];
|
75
81
|
|
76
82
|
var _useCache = useCache(data),
|
77
83
|
cascaderData = _useCache[0],
|
@@ -83,33 +89,38 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
83
89
|
|
84
90
|
var _useUncontrolledState = useUncontrolledState(defaultValue, valueProp, onChange),
|
85
91
|
_value = _useUncontrolledState[0],
|
86
|
-
tryChangeValue = _useUncontrolledState[1];
|
92
|
+
tryChangeValue = _useUncontrolledState[1]; // 内部实现使用尾部 id
|
93
|
+
|
87
94
|
|
88
95
|
var value = _value.map(function (path) {
|
89
96
|
return path[path.length - 1];
|
90
97
|
});
|
91
98
|
|
92
|
-
var flattedDataLatestRef = useLatestRef(flattedData);
|
93
99
|
var proxyOnChange = useLatestCallback(function (value, item, shouldChecked) {
|
94
|
-
var flattedItems =
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
var id = _ref.id;
|
100
|
-
return id;
|
100
|
+
var flattedItems = flattedData;
|
101
|
+
console.log(item);
|
102
|
+
var itemsPaths = value.map(function (lastId) {
|
103
|
+
var item = flattedItems.find(function (item) {
|
104
|
+
return item.id === lastId;
|
101
105
|
});
|
102
|
-
}); // TODO: 找到所有 id 的祖先节点路径
|
103
106
|
|
104
|
-
|
107
|
+
if (item) {
|
108
|
+
return getTopDownAncestors(item).map(function (_ref) {
|
109
|
+
var id = _ref.id;
|
110
|
+
return id;
|
111
|
+
});
|
112
|
+
} // 对于传入的数据未匹配到,保持不变吐出去
|
113
|
+
|
105
114
|
|
106
|
-
|
107
|
-
|
108
|
-
setSelectedItems(function (prev) {
|
109
|
-
return [].concat(prev, [item]);
|
115
|
+
var idPaths = _value.find(function (item) {
|
116
|
+
return item[item.length - 1] === lastId;
|
110
117
|
});
|
111
|
-
|
112
|
-
|
118
|
+
|
119
|
+
return idPaths || [lastId];
|
120
|
+
});
|
121
|
+
tryChangeValue(itemsPaths);
|
122
|
+
}); // ************************** 搜索 ************************* //
|
123
|
+
// 无法做异步搜索,因为下拉菜单不能合并(因为树形数据,不知道是第几级)
|
113
124
|
|
114
125
|
var customSearchStrategy = useTreeCustomSearch({
|
115
126
|
data: flattedData,
|
@@ -171,22 +182,12 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
171
182
|
}, resultStr), afterStr);
|
172
183
|
}).reverse()) : true;
|
173
184
|
return ret;
|
174
|
-
}, [titleRender, searchValue, searchMode]);
|
175
|
-
|
176
|
-
var _useState = useState([]),
|
177
|
-
selectedItems = _useState[0],
|
178
|
-
setSelectedItems = _useState[1];
|
179
|
-
|
185
|
+
}, [titleRender, searchValue, searchMode]);
|
180
186
|
var shouldUseSearch = !!searchValue;
|
181
187
|
var selectProps = {
|
182
188
|
data: shouldUseSearch ? stateInSearch.data : flattedData,
|
183
189
|
titleRender: proxyTitleRender
|
184
|
-
};
|
185
|
-
|
186
|
-
var mergedData = useMemo(function () {
|
187
|
-
var nextData = selectedItems.concat(flattedData);
|
188
|
-
return uniqBy(nextData, 'id');
|
189
|
-
}, [selectedItems, flattedData]);
|
190
|
+
};
|
190
191
|
var cls = cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed'));
|
191
192
|
return /*#__PURE__*/React.createElement(Picker, Object.assign({
|
192
193
|
ref: ref,
|
@@ -205,7 +206,7 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
205
206
|
disabled: disabled,
|
206
207
|
onClose: menuVisibleAction.off,
|
207
208
|
searchable: searchable,
|
208
|
-
onSearch: onSearch,
|
209
|
+
onSearch: callAllFuncs(onSearchProp, onSearch),
|
209
210
|
trigger: /*#__PURE__*/React.createElement(TagInputMock, {
|
210
211
|
clearable: clearable,
|
211
212
|
placeholder: placeholder,
|
@@ -217,12 +218,8 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
217
218
|
value: value,
|
218
219
|
// @ts-ignore
|
219
220
|
onChange: proxyOnChange,
|
220
|
-
data:
|
221
|
-
invalid: invalid
|
222
|
-
onExpand: function onExpand() {
|
223
|
-
// setViewSelected(true)
|
224
|
-
menuVisibleAction.on();
|
225
|
-
}
|
221
|
+
data: flattedData,
|
222
|
+
invalid: invalid
|
226
223
|
})
|
227
224
|
}), isArrayNonEmpty(selectProps.data) ? /*#__PURE__*/React.createElement(CheckCascaderMenus, {
|
228
225
|
disabled: disabled,
|
@@ -239,7 +236,8 @@ var CheckCascader = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
239
236
|
// @ts-ignore
|
240
237
|
flattedData: selectProps.data,
|
241
238
|
data: cascaderData,
|
242
|
-
onChangeData: setCascaderData
|
239
|
+
onChangeData: setCascaderData,
|
240
|
+
checkedMode: checkedMode
|
243
241
|
}) : null);
|
244
242
|
});
|
245
243
|
|
@@ -248,4 +246,3 @@ if (__DEV__) {
|
|
248
246
|
}
|
249
247
|
|
250
248
|
export { CheckCascader };
|
251
|
-
//# sourceMappingURL=CheckCascader.js.map
|
@@ -12,7 +12,8 @@ import { getPrefixCls, cx } from '@hi-ui/classname';
|
|
12
12
|
import { defaultLoadingIcon, defaultSuffixIcon, defaultLeafIcon } from './icons/index.js';
|
13
13
|
import Checkbox from '@hi-ui/checkbox';
|
14
14
|
import { useCheckCascaderContext } from './context.js';
|
15
|
-
import {
|
15
|
+
import { getCascaderItemEventData } from './utils/index.js';
|
16
|
+
import { getNodeAncestorsWithMe } from '@hi-ui/tree-utils';
|
16
17
|
var _role = 'check-cascader-menu';
|
17
18
|
|
18
19
|
var _prefix = getPrefixCls(_role);
|
@@ -49,7 +50,7 @@ var CheckCascaderMenu = function CheckCascaderMenu(_ref) {
|
|
49
50
|
|
50
51
|
return flatted ? /*#__PURE__*/React.createElement("span", {
|
51
52
|
className: cx("title__text", "title__text--cols")
|
52
|
-
},
|
53
|
+
}, getNodeAncestorsWithMe(option).reverse().map(function (item, index) {
|
53
54
|
return /*#__PURE__*/React.createElement("span", {
|
54
55
|
className: "title__text--col",
|
55
56
|
key: item.id
|
@@ -145,4 +146,3 @@ var renderSuffix = function renderSuffix(prefixCls, node, loading, onLoadChildre
|
|
145
146
|
};
|
146
147
|
|
147
148
|
export { CheckCascaderMenu };
|
148
|
-
//# sourceMappingURL=CheckCascaderMenu.js.map
|
@@ -50,7 +50,13 @@ var CheckCascaderMenus = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
50
50
|
onChange = _a.onChange,
|
51
51
|
titleRender = _a.titleRender,
|
52
52
|
flatted = _a.flatted,
|
53
|
-
|
53
|
+
_a$checkedMode = _a.checkedMode,
|
54
|
+
checkedMode = _a$checkedMode === void 0 ? 'ALL' : _a$checkedMode,
|
55
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "data", "flattedData", "onChangeData", "value", "defaultValue", "disabled", "expandTrigger", "changeOnSelect", "checkCascaded", "onLoadChildren", "onChange", "onSelect", "titleRender", "flatted", "checkedMode"]);
|
56
|
+
|
57
|
+
if (checkCascaded === false) {
|
58
|
+
checkedMode = 'SEPARATE';
|
59
|
+
}
|
54
60
|
|
55
61
|
var _useSelect = useSelect(disabled),
|
56
62
|
selectedId = _useSelect[0],
|
@@ -62,17 +68,10 @@ var CheckCascaderMenus = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
62
68
|
isLoadingId = _useAsyncSwitch[0],
|
63
69
|
onItemExpand = _useAsyncSwitch[1];
|
64
70
|
|
65
|
-
var _useCheck = useCheck(
|
66
|
-
var checkedIds = _ref.checkedIds
|
67
|
-
semiCheckedIds = _ref.semiCheckedIds; // @ts-ignore
|
68
|
-
|
69
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(checkedIds, {
|
70
|
-
trigger: 'checkbox',
|
71
|
-
target: target,
|
72
|
-
shouldChecked: shouldChecked,
|
73
|
-
semiCheckedIds: semiCheckedIds // checkedItems: fFindNodesByIds(flattedData, checkedIds),
|
71
|
+
var _useCheck = useCheck(checkedMode, disabled, flattedData, defaultValue, valueProp, function (_ref, target, shouldChecked) {
|
72
|
+
var checkedIds = _ref.checkedIds; // @ts-ignore
|
74
73
|
|
75
|
-
|
74
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(checkedIds, target, shouldChecked);
|
76
75
|
}),
|
77
76
|
onOptionCheck = _useCheck[0],
|
78
77
|
isCheckedId = _useCheck[1],
|
@@ -85,8 +84,8 @@ var CheckCascaderMenus = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
85
84
|
selected: flatted ? selectedId === id : selectedIds[depth] === id,
|
86
85
|
checked: isCheckedId(id),
|
87
86
|
loading: isLoadingId(id),
|
88
|
-
semiChecked: isSemiCheckedId(id),
|
89
|
-
|
87
|
+
semiChecked: isSemiCheckedId(id) // focused: false,
|
88
|
+
|
90
89
|
};
|
91
90
|
});
|
92
91
|
var providedValue = useMemo(function () {
|
@@ -123,4 +122,3 @@ if (__DEV__) {
|
|
123
122
|
}
|
124
123
|
|
125
124
|
export { CheckCascaderMenus };
|
126
|
-
//# sourceMappingURL=CheckCascaderMenus.js.map
|
package/lib/esm/context.js
CHANGED
@@ -8,11 +8,18 @@
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
9
9
|
*/
|
10
10
|
import { useState, useEffect } from 'react';
|
11
|
-
/**
|
12
|
-
*
|
11
|
+
/** @LICENSE
|
12
|
+
* @hi-ui/use-cache
|
13
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/hooks/use-cache#readme
|
13
14
|
*
|
14
|
-
* @
|
15
|
-
*
|
15
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
16
|
+
*
|
17
|
+
* This source code is licensed under the MIT license found in the
|
18
|
+
* LICENSE file in the root directory of this source tree.
|
19
|
+
*/
|
20
|
+
|
21
|
+
/**
|
22
|
+
* A hook using for data cache that compatible with the controlled and uncontrolled modes coexist.
|
16
23
|
*/
|
17
24
|
|
18
25
|
var useCache = function useCache(data) {
|
@@ -27,4 +34,3 @@ var useCache = function useCache(data) {
|
|
27
34
|
};
|
28
35
|
|
29
36
|
export { useCache };
|
30
|
-
//# sourceMappingURL=use-cache.js.map
|
@@ -7,29 +7,35 @@
|
|
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 { useCascadeCheck } from '@hi-ui/use-check';
|
11
10
|
import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
|
11
|
+
import { useCascadeCheck } from '@hi-ui/use-check';
|
12
|
+
import { processCheckedIds, parseCheckDataDirty } from '../utils/index.js';
|
12
13
|
var NOOP_ARRAY = [];
|
13
14
|
|
14
|
-
var useCheck = function useCheck(
|
15
|
+
var useCheck = function useCheck(checkedMode, disabled, flattedData, defaultCheckedIds, checkedIdsProp, onCheck) {
|
15
16
|
if (defaultCheckedIds === void 0) {
|
16
17
|
defaultCheckedIds = NOOP_ARRAY;
|
17
18
|
}
|
18
19
|
|
19
20
|
var _useUncontrolledState = useUncontrolledState(defaultCheckedIds, checkedIdsProp, function (checkedIds, checkedNode, shouldChecked, semiCheckedIds) {
|
21
|
+
// 出口数据处理
|
22
|
+
var processedIds = processCheckedIds(checkedMode, checkedIds, flattedData, allowCheck);
|
20
23
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck({
|
21
|
-
checkedIds:
|
24
|
+
checkedIds: processedIds,
|
22
25
|
semiCheckedIds: semiCheckedIds
|
23
26
|
}, checkedNode, shouldChecked);
|
24
27
|
}),
|
25
28
|
checkedIds = _useUncontrolledState[0],
|
26
|
-
trySetCheckedIds = _useUncontrolledState[1];
|
29
|
+
trySetCheckedIds = _useUncontrolledState[1]; // 入口数据处理
|
30
|
+
|
27
31
|
|
32
|
+
var parsedCheckedIds = parseCheckDataDirty(checkedMode, checkedIds, flattedData, allowCheck);
|
33
|
+
var cascaded = checkedMode !== 'SEPARATE';
|
28
34
|
return useCascadeCheck({
|
29
35
|
cascaded: cascaded,
|
30
36
|
disabled: disabled,
|
31
37
|
flattedData: flattedData,
|
32
|
-
checkedIds:
|
38
|
+
checkedIds: parsedCheckedIds,
|
33
39
|
onCheck: trySetCheckedIds,
|
34
40
|
allowCheck: allowCheck
|
35
41
|
});
|
@@ -44,4 +50,3 @@ var allowCheck = function allowCheck(targetItem) {
|
|
44
50
|
};
|
45
51
|
|
46
52
|
export { useCheck };
|
47
|
-
//# sourceMappingURL=use-check.js.map
|
package/lib/esm/icons/index.js
CHANGED
package/lib/esm/index.js
CHANGED