@rainbow-oh/yee-c 0.6.4 → 0.8.0
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/dist/cjs/Button/style/index.less +5 -4
- package/dist/cjs/Drawer/drawer.js +1 -1
- package/dist/cjs/Drawer/interface.d.ts +1 -1
- package/dist/cjs/Drawer/style/index.less +1 -0
- package/dist/cjs/Form/form-store.d.ts +2 -1
- package/dist/cjs/Form/form-store.js +32 -17
- package/dist/cjs/List/demo/virtual.d.ts +3 -0
- package/dist/cjs/List/demo/virtual.js +53 -0
- package/dist/cjs/List/hooks/useListKeyboard.d.ts +28 -0
- package/dist/cjs/List/hooks/useListKeyboard.js +188 -0
- package/dist/cjs/List/interface.d.ts +29 -2
- package/dist/cjs/List/list.js +141 -21
- package/dist/cjs/List/style/index.less +24 -0
- package/dist/cjs/Select/demo/columns.d.ts +3 -0
- package/dist/cjs/Select/demo/columns.js +62 -0
- package/dist/cjs/Select/hooks/useSelectKeyboard.d.ts +13 -1
- package/dist/cjs/Select/hooks/useSelectKeyboard.js +81 -10
- package/dist/cjs/Select/interface.d.ts +30 -3
- package/dist/cjs/Select/option.js +4 -3
- package/dist/cjs/Select/options.js +90 -8
- package/dist/cjs/Select/select.js +32 -8
- package/dist/cjs/Select/style/index.less +14 -0
- package/dist/cjs/Selector/interface.d.ts +4 -0
- package/dist/cjs/Selector/selector.js +5 -3
- package/dist/cjs/Table/hooks/useColumns.js +1 -1
- package/dist/cjs/Table/interface.d.ts +1 -1
- package/dist/cjs/Table/style/index.less +35 -11
- package/dist/cjs/Table/table.js +57 -7
- package/dist/cjs/Table/tbody/cell.js +1 -1
- package/dist/cjs/Table/util/header.d.ts +3 -1
- package/dist/cjs/Table/util/header.js +30 -3
- package/dist/cjs/Tree/demo/draggable.js +2 -0
- package/dist/cjs/Tree/interface.d.ts +46 -23
- package/dist/cjs/Tree/tree-node.d.ts +1 -1
- package/dist/cjs/Tree/tree-node.js +30 -23
- package/dist/cjs/Tree/tree.d.ts +13 -12
- package/dist/cjs/Tree/tree.js +452 -227
- package/dist/cjs/Tree/utils/tree-tools.d.ts +43 -10
- package/dist/cjs/Tree/utils/tree-tools.js +129 -91
- package/dist/cjs/locale/context.d.ts +5 -4
- package/dist/cjs/locale/context.js +15 -8
- package/dist/cjs/locale/interface.d.ts +20 -0
- package/dist/cjs/locale/util.d.ts +3 -3
- package/dist/cjs/style/color.css +3 -0
- package/dist/cjs/style/size.css +2 -1
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +6 -2
- package/dist/cjs/utils/isEqual.js +5 -7
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Button/style/index.less +5 -4
- package/dist/esm/Drawer/drawer.js +2 -1
- package/dist/esm/Drawer/interface.d.ts +1 -1
- package/dist/esm/Drawer/style/index.less +1 -0
- package/dist/esm/Form/form-store.d.ts +2 -1
- package/dist/esm/Form/form-store.js +40 -19
- package/dist/esm/List/demo/virtual.d.ts +3 -0
- package/dist/esm/List/demo/virtual.js +22 -0
- package/dist/esm/List/hooks/useListKeyboard.d.ts +28 -0
- package/dist/esm/List/hooks/useListKeyboard.js +173 -0
- package/dist/esm/List/interface.d.ts +29 -2
- package/dist/esm/List/list.js +171 -14
- package/dist/esm/List/style/index.less +24 -0
- package/dist/esm/Select/demo/columns.d.ts +3 -0
- package/dist/esm/Select/demo/columns.js +36 -0
- package/dist/esm/Select/hooks/useSelectKeyboard.d.ts +13 -1
- package/dist/esm/Select/hooks/useSelectKeyboard.js +91 -14
- package/dist/esm/Select/interface.d.ts +30 -3
- package/dist/esm/Select/option.js +6 -2
- package/dist/esm/Select/options.js +114 -32
- package/dist/esm/Select/select.js +40 -11
- package/dist/esm/Select/style/index.less +14 -0
- package/dist/esm/Selector/interface.d.ts +4 -0
- package/dist/esm/Selector/selector.js +10 -4
- package/dist/esm/Table/hooks/useColumns.js +1 -1
- package/dist/esm/Table/interface.d.ts +1 -1
- package/dist/esm/Table/style/index.less +35 -11
- package/dist/esm/Table/table.js +54 -2
- package/dist/esm/Table/tbody/cell.js +1 -1
- package/dist/esm/Table/util/header.d.ts +3 -1
- package/dist/esm/Table/util/header.js +30 -2
- package/dist/esm/Tree/demo/draggable.js +2 -0
- package/dist/esm/Tree/interface.d.ts +46 -23
- package/dist/esm/Tree/tree-node.d.ts +1 -1
- package/dist/esm/Tree/tree-node.js +26 -31
- package/dist/esm/Tree/tree.d.ts +13 -12
- package/dist/esm/Tree/tree.js +572 -163
- package/dist/esm/Tree/utils/tree-tools.d.ts +43 -10
- package/dist/esm/Tree/utils/tree-tools.js +219 -104
- package/dist/esm/locale/context.d.ts +5 -4
- package/dist/esm/locale/context.js +25 -9
- package/dist/esm/locale/interface.d.ts +20 -0
- package/dist/esm/locale/util.d.ts +3 -3
- package/dist/esm/style/color.css +3 -0
- package/dist/esm/style/size.css +2 -1
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +6 -2
- package/dist/esm/utils/isEqual.js +5 -7
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +4 -4
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Button/style/index.less +5 -4
- package/src/Drawer/drawer.tsx +1 -1
- package/src/Drawer/interface.ts +1 -0
- package/src/Drawer/style/index.less +1 -0
- package/src/Form/form-store.ts +42 -15
- package/src/List/demo/virtual.tsx +20 -0
- package/src/List/hooks/useListKeyboard.ts +235 -0
- package/src/List/index.en-US.md +6 -0
- package/src/List/index.zh-CN.md +6 -0
- package/src/List/interface.ts +29 -2
- package/src/List/list.tsx +157 -19
- package/src/List/style/index.less +24 -0
- package/src/Select/demo/columns.tsx +35 -0
- package/src/Select/hooks/useSelectKeyboard.ts +112 -15
- package/src/Select/index.en-US.md +4 -0
- package/src/Select/index.zh-CN.md +4 -0
- package/src/Select/interface.ts +31 -4
- package/src/Select/option.tsx +9 -3
- package/src/Select/options.tsx +119 -26
- package/src/Select/select.tsx +41 -8
- package/src/Select/style/index.less +14 -0
- package/src/Selector/interface.ts +4 -0
- package/src/Selector/selector.tsx +8 -3
- package/src/Table/hooks/useColumns.ts +1 -1
- package/src/Table/interface.ts +1 -1
- package/src/Table/style/index.less +35 -11
- package/src/Table/table.tsx +60 -1
- package/src/Table/tbody/cell.tsx +1 -1
- package/src/Table/util/header.ts +48 -2
- package/src/Tree/demo/draggable.tsx +2 -0
- package/src/Tree/interface.ts +46 -23
- package/src/Tree/tree-node.tsx +26 -29
- package/src/Tree/tree.tsx +573 -274
- package/src/Tree/utils/tree-tools.ts +231 -125
- package/src/locale/_README.md +22 -13
- package/src/locale/context.tsx +33 -16
- package/src/locale/interface.ts +24 -0
- package/src/locale/util.ts +6 -6
- package/src/style/color.css +3 -0
- package/src/style/size.css +2 -1
- package/src/utils/isEqual.ts +5 -7
- package/src/version.ts +1 -1
package/dist/cjs/Tree/tree.js
CHANGED
|
@@ -2,8 +2,22 @@ var __create = Object.create;
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __spreadValues = (a, b) => {
|
|
11
|
+
for (var prop in b || (b = {}))
|
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
if (__getOwnPropSymbols)
|
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
}
|
|
19
|
+
return a;
|
|
20
|
+
};
|
|
7
21
|
var __export = (target, all) => {
|
|
8
22
|
for (var name in all)
|
|
9
23
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -35,8 +49,11 @@ __export(tree_exports, {
|
|
|
35
49
|
module.exports = __toCommonJS(tree_exports);
|
|
36
50
|
var import_clsx = __toESM(require("clsx"));
|
|
37
51
|
var import_react = __toESM(require("react"));
|
|
52
|
+
var import_react2 = require("motion/react");
|
|
38
53
|
var import_Config_Provider = require("../Config-Provider");
|
|
54
|
+
var import_useEvent = __toESM(require("../hooks/useEvent"));
|
|
39
55
|
var import_useMergedState = __toESM(require("../hooks/useMergedState"));
|
|
56
|
+
var import_useVirtualList = __toESM(require("../hooks/useVirtualList"));
|
|
40
57
|
var import_mergeContextToProps = __toESM(require("../utils/mergeContextToProps"));
|
|
41
58
|
var import_tree_node = __toESM(require("./tree-node"));
|
|
42
59
|
var import_tree_tools = require("./utils/tree-tools");
|
|
@@ -48,11 +65,12 @@ var DEFAULTFIELDNAMES = {
|
|
|
48
65
|
};
|
|
49
66
|
var TreeContext = (0, import_react.createContext)({
|
|
50
67
|
showIcon: true,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
selectedUids: /* @__PURE__ */ new Set(),
|
|
69
|
+
checkedUids: /* @__PURE__ */ new Set(),
|
|
70
|
+
indeterminateUids: /* @__PURE__ */ new Set(),
|
|
71
|
+
expandedUids: /* @__PURE__ */ new Set(),
|
|
54
72
|
draggable: false,
|
|
55
|
-
|
|
73
|
+
draggingUid: null,
|
|
56
74
|
dropState: null,
|
|
57
75
|
onCheck: () => {
|
|
58
76
|
},
|
|
@@ -69,6 +87,62 @@ var TreeContext = (0, import_react.createContext)({
|
|
|
69
87
|
onNodeDrop: () => {
|
|
70
88
|
}
|
|
71
89
|
});
|
|
90
|
+
var EMPTY_ARRAY = [];
|
|
91
|
+
function keysToUidArray(keys, flatItems) {
|
|
92
|
+
if (!keys)
|
|
93
|
+
return void 0;
|
|
94
|
+
if (keys.length === 0)
|
|
95
|
+
return EMPTY_ARRAY;
|
|
96
|
+
const keySet = new Set(keys.map(String));
|
|
97
|
+
const uids = [];
|
|
98
|
+
for (const item of flatItems) {
|
|
99
|
+
if (keySet.has(String(item.key))) {
|
|
100
|
+
uids.push(item.uid);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return uids;
|
|
104
|
+
}
|
|
105
|
+
function useStableUidArray(keys, flatItems) {
|
|
106
|
+
const ref = (0, import_react.useRef)({
|
|
107
|
+
keys: void 0,
|
|
108
|
+
result: void 0
|
|
109
|
+
});
|
|
110
|
+
const computed = (0, import_react.useMemo)(
|
|
111
|
+
() => keysToUidArray(keys, flatItems),
|
|
112
|
+
[keys, flatItems]
|
|
113
|
+
);
|
|
114
|
+
if (computed === void 0) {
|
|
115
|
+
ref.current = { keys, result: void 0 };
|
|
116
|
+
return void 0;
|
|
117
|
+
}
|
|
118
|
+
const prev = ref.current.result;
|
|
119
|
+
if (prev && prev.length === computed.length && prev.every((v, i) => v === computed[i])) {
|
|
120
|
+
return prev;
|
|
121
|
+
}
|
|
122
|
+
ref.current = { keys, result: computed };
|
|
123
|
+
return computed;
|
|
124
|
+
}
|
|
125
|
+
function uidsToKeys(uids, map) {
|
|
126
|
+
const keys = [];
|
|
127
|
+
for (const uid of uids) {
|
|
128
|
+
const node = map.get(uid);
|
|
129
|
+
if (node)
|
|
130
|
+
keys.push(node.key);
|
|
131
|
+
}
|
|
132
|
+
return keys;
|
|
133
|
+
}
|
|
134
|
+
function arrayToSet(arr) {
|
|
135
|
+
const s = /* @__PURE__ */ new Set();
|
|
136
|
+
for (const item of arr) {
|
|
137
|
+
s.add(item);
|
|
138
|
+
}
|
|
139
|
+
return s;
|
|
140
|
+
}
|
|
141
|
+
function setToArray(s) {
|
|
142
|
+
const arr = [];
|
|
143
|
+
s.forEach((v) => arr.push(v));
|
|
144
|
+
return arr;
|
|
145
|
+
}
|
|
72
146
|
var Tree = (baseprops) => {
|
|
73
147
|
const { tree } = (0, import_react.useContext)(import_Config_Provider.GlobalContext);
|
|
74
148
|
const props = (0, import_mergeContextToProps.default)(baseprops, tree);
|
|
@@ -96,230 +170,391 @@ var Tree = (baseprops) => {
|
|
|
96
170
|
onDrop,
|
|
97
171
|
onSelect,
|
|
98
172
|
onCheck,
|
|
99
|
-
onExpand
|
|
173
|
+
onExpand,
|
|
174
|
+
virtual = false,
|
|
175
|
+
height,
|
|
176
|
+
itemHeight = 28
|
|
100
177
|
} = props;
|
|
101
|
-
const [mergedSelectedKeys, setMergedSelectedKeys] = (0, import_useMergedState.default)([], {
|
|
102
|
-
value: selectedKeys,
|
|
103
|
-
defaultValue: defaultSelectedKeys
|
|
104
|
-
});
|
|
105
|
-
const [mergedCheckedKeys, setMergedCheckedKeys] = (0, import_useMergedState.default)([], {
|
|
106
|
-
value: checkedKeys,
|
|
107
|
-
defaultValue: defaultCheckedKeys
|
|
108
|
-
});
|
|
109
178
|
const [flatItems, itemMap] = (0, import_react.useMemo)(
|
|
110
179
|
() => (0, import_tree_tools.tree2array)(dataSource != null ? dataSource : [], fieldNames),
|
|
111
180
|
[dataSource, fieldNames]
|
|
112
181
|
);
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
if (!item.isLeaf)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return keys;
|
|
182
|
+
const allParentUidArray = (0, import_react.useMemo)(() => {
|
|
183
|
+
const uids = [];
|
|
184
|
+
for (const item of flatItems) {
|
|
185
|
+
if (!item.isLeaf)
|
|
186
|
+
uids.push(item.uid);
|
|
187
|
+
}
|
|
188
|
+
return uids;
|
|
121
189
|
}, [flatItems]);
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
190
|
+
const stableExpandedValue = useStableUidArray(expandedKeys, flatItems);
|
|
191
|
+
const stableExpandedDefault = useStableUidArray(defaultExpandedKeys, flatItems);
|
|
192
|
+
const stableSelectedValue = useStableUidArray(selectedKeys, flatItems);
|
|
193
|
+
const stableSelectedDefault = useStableUidArray(defaultSelectedKeys, flatItems);
|
|
194
|
+
const stableCheckedValue = useStableUidArray(checkedKeys, flatItems);
|
|
195
|
+
const stableCheckedDefault = useStableUidArray(defaultCheckedKeys, flatItems);
|
|
196
|
+
const [expandedUidArray, setExpandedUidArray] = (0, import_useMergedState.default)(
|
|
197
|
+
() => defaultExpandAll ? allParentUidArray : [],
|
|
198
|
+
{
|
|
199
|
+
value: stableExpandedValue,
|
|
200
|
+
defaultValue: stableExpandedDefault
|
|
201
|
+
}
|
|
202
|
+
);
|
|
203
|
+
const expandedUidSet = (0, import_react.useMemo)(
|
|
204
|
+
() => arrayToSet(expandedUidArray),
|
|
205
|
+
[expandedUidArray]
|
|
206
|
+
);
|
|
207
|
+
const [selectedUidArray, setSelectedUidArray] = (0, import_useMergedState.default)(
|
|
208
|
+
[],
|
|
126
209
|
{
|
|
127
|
-
value:
|
|
128
|
-
defaultValue:
|
|
210
|
+
value: stableSelectedValue,
|
|
211
|
+
defaultValue: stableSelectedDefault
|
|
129
212
|
}
|
|
130
213
|
);
|
|
131
|
-
const
|
|
132
|
-
(
|
|
133
|
-
|
|
214
|
+
const selectedUidSet = (0, import_react.useMemo)(
|
|
215
|
+
() => arrayToSet(selectedUidArray),
|
|
216
|
+
[selectedUidArray]
|
|
217
|
+
);
|
|
218
|
+
const [checkedUidArray, setCheckedUidArray] = (0, import_useMergedState.default)([], {
|
|
219
|
+
value: stableCheckedValue,
|
|
220
|
+
defaultValue: stableCheckedDefault
|
|
221
|
+
});
|
|
222
|
+
const checkedUidSet = (0, import_react.useMemo)(
|
|
223
|
+
() => arrayToSet(checkedUidArray),
|
|
224
|
+
[checkedUidArray]
|
|
225
|
+
);
|
|
226
|
+
const indeterminateUidSet = (0, import_react.useMemo)(() => {
|
|
227
|
+
const result = /* @__PURE__ */ new Set();
|
|
228
|
+
for (const item of flatItems) {
|
|
229
|
+
if (!item.isLeaf && !checkedUidSet.has(item.uid) && item.childUids && item.childUids.some((cuid) => checkedUidSet.has(cuid))) {
|
|
230
|
+
result.add(item.uid);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return result;
|
|
234
|
+
}, [flatItems, checkedUidSet]);
|
|
235
|
+
const visibleItems = (0, import_react.useMemo)(() => {
|
|
236
|
+
const visibleSet = /* @__PURE__ */ new Set();
|
|
237
|
+
const result = [];
|
|
238
|
+
for (const item of flatItems) {
|
|
239
|
+
if (item.depth === 0) {
|
|
240
|
+
visibleSet.add(item.uid);
|
|
241
|
+
result.push(item);
|
|
242
|
+
} else if (item.pUid && visibleSet.has(item.pUid) && expandedUidSet.has(item.pUid)) {
|
|
243
|
+
visibleSet.add(item.uid);
|
|
244
|
+
result.push(item);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}, [flatItems, expandedUidSet]);
|
|
249
|
+
const handleCheck = (0, import_useEvent.default)(
|
|
250
|
+
(event, uid) => {
|
|
134
251
|
const checked = event.target.checked;
|
|
135
|
-
const treeNode = itemMap.get(
|
|
136
|
-
const
|
|
252
|
+
const treeNode = itemMap.get(uid);
|
|
253
|
+
const newUidSet = (0, import_tree_tools.getCheckedKeys)({
|
|
137
254
|
checked,
|
|
138
|
-
keys:
|
|
139
|
-
|
|
255
|
+
keys: checkedUidSet,
|
|
256
|
+
uid,
|
|
140
257
|
map: itemMap
|
|
141
258
|
});
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
259
|
+
const newUidArr = setToArray(newUidSet);
|
|
260
|
+
setCheckedUidArray(newUidArr);
|
|
261
|
+
if (treeNode && onCheck) {
|
|
262
|
+
const externalKeys = uidsToKeys(newUidArr, itemMap);
|
|
263
|
+
const nodes = [];
|
|
264
|
+
newUidSet.forEach((u) => {
|
|
265
|
+
var _a;
|
|
266
|
+
const n = (_a = itemMap.get(u)) == null ? void 0 : _a.original;
|
|
267
|
+
if (n)
|
|
268
|
+
nodes.push(n);
|
|
269
|
+
});
|
|
270
|
+
onCheck(externalKeys, {
|
|
150
271
|
checked,
|
|
151
272
|
checkedNodes: nodes,
|
|
152
|
-
node:
|
|
273
|
+
node: treeNode.original
|
|
153
274
|
});
|
|
154
275
|
}
|
|
155
|
-
}
|
|
156
|
-
[mergedCheckedKeys, itemMap, onCheck]
|
|
276
|
+
}
|
|
157
277
|
);
|
|
158
|
-
const handleSelect = (0,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const treeNode = itemMap.get(key);
|
|
168
|
-
const originalNode = treeNode == null ? void 0 : treeNode.original;
|
|
169
|
-
if (originalNode) {
|
|
170
|
-
onSelect == null ? void 0 : onSelect(newKeys, {
|
|
171
|
-
selected: !selected,
|
|
172
|
-
selectedNodes: nodes,
|
|
173
|
-
node: originalNode
|
|
174
|
-
});
|
|
278
|
+
const handleSelect = (0, import_useEvent.default)((uid) => {
|
|
279
|
+
var _a;
|
|
280
|
+
const selected = selectedUidSet.has(uid);
|
|
281
|
+
let newUidArr;
|
|
282
|
+
if (multiple) {
|
|
283
|
+
if (selected) {
|
|
284
|
+
newUidArr = selectedUidArray.filter((u) => u !== uid);
|
|
285
|
+
} else {
|
|
286
|
+
newUidArr = [...selectedUidArray, uid];
|
|
175
287
|
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
(
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
288
|
+
} else {
|
|
289
|
+
newUidArr = selected ? [] : [uid];
|
|
290
|
+
}
|
|
291
|
+
setSelectedUidArray(newUidArr);
|
|
292
|
+
const treeNode = itemMap.get(uid);
|
|
293
|
+
if (treeNode && onSelect) {
|
|
294
|
+
const externalKeys = uidsToKeys(newUidArr, itemMap);
|
|
295
|
+
const nodes = [];
|
|
296
|
+
for (const u of newUidArr) {
|
|
297
|
+
const n = (_a = itemMap.get(u)) == null ? void 0 : _a.original;
|
|
298
|
+
if (n)
|
|
299
|
+
nodes.push(n);
|
|
300
|
+
}
|
|
301
|
+
onSelect(externalKeys, {
|
|
302
|
+
selected: !selected,
|
|
303
|
+
selectedNodes: nodes,
|
|
304
|
+
node: treeNode.original
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
const handleExpand = (0, import_useEvent.default)((uid) => {
|
|
309
|
+
var _a;
|
|
310
|
+
const expanded = expandedUidSet.has(uid);
|
|
311
|
+
const newUidArr = expanded ? expandedUidArray.filter((u) => u !== uid) : [...expandedUidArray, uid];
|
|
312
|
+
setExpandedUidArray(newUidArr);
|
|
313
|
+
if (onExpand) {
|
|
314
|
+
const externalKeys = uidsToKeys(newUidArr, itemMap);
|
|
315
|
+
const treeNode = itemMap.get(uid);
|
|
316
|
+
const nodes = [];
|
|
317
|
+
for (const u of newUidArr) {
|
|
318
|
+
const n = (_a = itemMap.get(u)) == null ? void 0 : _a.original;
|
|
319
|
+
if (n)
|
|
320
|
+
nodes.push(n);
|
|
321
|
+
}
|
|
322
|
+
onExpand(externalKeys, {
|
|
189
323
|
expanded: !expanded,
|
|
190
324
|
expandedNodes: nodes,
|
|
191
|
-
node:
|
|
325
|
+
node: treeNode.original
|
|
192
326
|
});
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
);
|
|
196
|
-
const
|
|
197
|
-
const [draggingKey, setDraggingKey] = (0, import_react.useState)(null);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
const dragUidRef = (0, import_react.useRef)(null);
|
|
330
|
+
const [draggingUid, setDraggingUid] = (0, import_react.useState)(null);
|
|
198
331
|
const [dropState, setDropState] = (0, import_react.useState)(null);
|
|
199
|
-
const
|
|
200
|
-
(
|
|
201
|
-
|
|
332
|
+
const resolvePosition = (rect, clientY) => {
|
|
333
|
+
const offset = (clientY - rect.top) / rect.height;
|
|
334
|
+
if (offset < 0.25)
|
|
335
|
+
return "before";
|
|
336
|
+
if (offset > 0.75)
|
|
337
|
+
return "after";
|
|
338
|
+
return "inside";
|
|
339
|
+
};
|
|
340
|
+
const isIllegalMove = (dragUid, dropUid) => {
|
|
341
|
+
if (dragUid === dropUid)
|
|
342
|
+
return true;
|
|
343
|
+
const dropNode = itemMap.get(dropUid);
|
|
344
|
+
if (!dropNode)
|
|
345
|
+
return true;
|
|
346
|
+
let current = dropNode;
|
|
347
|
+
while (current) {
|
|
348
|
+
if (current.pUid === dragUid)
|
|
202
349
|
return true;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
(
|
|
210
|
-
const offset = (clientY - rect.top) / rect.height;
|
|
211
|
-
if (offset < 0.25)
|
|
212
|
-
return "before";
|
|
213
|
-
if (offset > 0.75)
|
|
214
|
-
return "after";
|
|
215
|
-
return "inside";
|
|
216
|
-
},
|
|
217
|
-
[]
|
|
218
|
-
);
|
|
219
|
-
const handleDragStart = (0, import_react.useCallback)(
|
|
220
|
-
(key, e) => {
|
|
221
|
-
const node = itemMap.get(key);
|
|
222
|
-
if (node == null ? void 0 : node.disabled) {
|
|
223
|
-
e.preventDefault();
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
dragKeyRef.current = key;
|
|
227
|
-
setDraggingKey(key);
|
|
228
|
-
if (e.dataTransfer) {
|
|
229
|
-
e.dataTransfer.effectAllowed = "move";
|
|
230
|
-
try {
|
|
231
|
-
e.dataTransfer.setData("text/plain", String(key));
|
|
232
|
-
} catch (e2) {
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
[itemMap]
|
|
237
|
-
);
|
|
238
|
-
const handleDragOver = (0, import_react.useCallback)(
|
|
239
|
-
(key, e) => {
|
|
240
|
-
const dragKey = dragKeyRef.current;
|
|
241
|
-
if (dragKey === null)
|
|
242
|
-
return;
|
|
243
|
-
if (isIllegalMove(dragKey, key))
|
|
244
|
-
return;
|
|
245
|
-
const dropNode = itemMap.get(key);
|
|
246
|
-
if (!dropNode || dropNode.disabled)
|
|
247
|
-
return;
|
|
248
|
-
const position = resolvePosition(
|
|
249
|
-
e.currentTarget.getBoundingClientRect(),
|
|
250
|
-
e.clientY
|
|
251
|
-
);
|
|
252
|
-
const dragNode = itemMap.get(dragKey);
|
|
253
|
-
if (allowDrop && dragNode && allowDrop({
|
|
254
|
-
dragNode: dragNode.original,
|
|
255
|
-
dropNode: dropNode.original,
|
|
256
|
-
position
|
|
257
|
-
}) === false) {
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
e.preventDefault();
|
|
261
|
-
if (e.dataTransfer)
|
|
262
|
-
e.dataTransfer.dropEffect = "move";
|
|
263
|
-
setDropState(
|
|
264
|
-
(prev) => prev && prev.key === key && prev.position === position ? prev : { key, position }
|
|
265
|
-
);
|
|
266
|
-
},
|
|
267
|
-
[itemMap, isIllegalMove, resolvePosition, allowDrop]
|
|
268
|
-
);
|
|
269
|
-
const handleDragLeave = (0, import_react.useCallback)(
|
|
270
|
-
// Intentionally a no-op: dragleave fires spuriously when crossing child
|
|
271
|
-
// elements. Drop state is cleared in handleDragEnd at the Tree root.
|
|
272
|
-
() => {
|
|
273
|
-
},
|
|
274
|
-
[]
|
|
275
|
-
);
|
|
276
|
-
const handleDrop = (0, import_react.useCallback)(
|
|
277
|
-
(key, e) => {
|
|
350
|
+
current = current.pUid ? itemMap.get(current.pUid) : void 0;
|
|
351
|
+
}
|
|
352
|
+
return false;
|
|
353
|
+
};
|
|
354
|
+
const handleDragStart = (0, import_useEvent.default)((uid, e) => {
|
|
355
|
+
const node = itemMap.get(uid);
|
|
356
|
+
if (node == null ? void 0 : node.disabled) {
|
|
278
357
|
e.preventDefault();
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
const dragNode = itemMap.get(dragKey);
|
|
289
|
-
const dropNode = itemMap.get(key);
|
|
290
|
-
if (!dragNode || !dropNode)
|
|
291
|
-
return;
|
|
292
|
-
if (allowDrop && allowDrop({
|
|
293
|
-
dragNode: dragNode.original,
|
|
294
|
-
dropNode: dropNode.original,
|
|
295
|
-
position
|
|
296
|
-
}) === false) {
|
|
297
|
-
return;
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
dragUidRef.current = uid;
|
|
361
|
+
setDraggingUid(uid);
|
|
362
|
+
if (e.dataTransfer) {
|
|
363
|
+
e.dataTransfer.effectAllowed = "move";
|
|
364
|
+
try {
|
|
365
|
+
e.dataTransfer.setData("text/plain", uid);
|
|
366
|
+
} catch (e2) {
|
|
298
367
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
const handleDragOver = (0, import_useEvent.default)((uid, e) => {
|
|
371
|
+
const dragUid = dragUidRef.current;
|
|
372
|
+
if (dragUid === null)
|
|
373
|
+
return;
|
|
374
|
+
if (isIllegalMove(dragUid, uid))
|
|
375
|
+
return;
|
|
376
|
+
const dropNode = itemMap.get(uid);
|
|
377
|
+
if (!dropNode || dropNode.disabled)
|
|
378
|
+
return;
|
|
379
|
+
const position = resolvePosition(
|
|
380
|
+
e.currentTarget.getBoundingClientRect(),
|
|
381
|
+
e.clientY
|
|
382
|
+
);
|
|
383
|
+
const dragNode = itemMap.get(dragUid);
|
|
384
|
+
if (allowDrop && dragNode && allowDrop({
|
|
385
|
+
dragNode: dragNode.original,
|
|
386
|
+
dropNode: dropNode.original,
|
|
387
|
+
position
|
|
388
|
+
}) === false) {
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
e.preventDefault();
|
|
392
|
+
if (e.dataTransfer)
|
|
393
|
+
e.dataTransfer.dropEffect = "move";
|
|
394
|
+
setDropState(
|
|
395
|
+
(prev) => prev && prev.uid === uid && prev.position === position ? prev : { uid, position }
|
|
396
|
+
);
|
|
397
|
+
});
|
|
398
|
+
const handleDragLeave = (0, import_useEvent.default)(() => {
|
|
399
|
+
});
|
|
400
|
+
const handleDrop = (0, import_useEvent.default)((uid, e) => {
|
|
401
|
+
e.preventDefault();
|
|
402
|
+
const dragUid = dragUidRef.current;
|
|
403
|
+
if (dragUid === null)
|
|
404
|
+
return;
|
|
405
|
+
const position = resolvePosition(
|
|
406
|
+
e.currentTarget.getBoundingClientRect(),
|
|
407
|
+
e.clientY
|
|
408
|
+
);
|
|
409
|
+
if (isIllegalMove(dragUid, uid))
|
|
410
|
+
return;
|
|
411
|
+
const dragNode = itemMap.get(dragUid);
|
|
412
|
+
const dropNode = itemMap.get(uid);
|
|
413
|
+
if (!dragNode || !dropNode)
|
|
414
|
+
return;
|
|
415
|
+
if (allowDrop && allowDrop({
|
|
416
|
+
dragNode: dragNode.original,
|
|
417
|
+
dropNode: dropNode.original,
|
|
418
|
+
position
|
|
419
|
+
}) === false) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
onDrop == null ? void 0 : onDrop({
|
|
423
|
+
dragNode: dragNode.original,
|
|
424
|
+
dropNode: dropNode.original,
|
|
425
|
+
dragKey: dragNode.key,
|
|
426
|
+
dropKey: dropNode.key,
|
|
427
|
+
dragPath: [...dragNode.path, dragNode.key],
|
|
428
|
+
dropPath: [...dropNode.path, dropNode.key],
|
|
429
|
+
position,
|
|
430
|
+
dropToGap: position !== "inside"
|
|
431
|
+
});
|
|
432
|
+
if (position === "inside") {
|
|
433
|
+
setExpandedUidArray((prev) => {
|
|
434
|
+
if (prev.includes(uid))
|
|
435
|
+
return prev;
|
|
436
|
+
return [...prev, uid];
|
|
306
437
|
});
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
},
|
|
316
|
-
[itemMap, isIllegalMove, resolvePosition, allowDrop, onDrop]
|
|
317
|
-
);
|
|
318
|
-
const handleDragEnd = (0, import_react.useCallback)(() => {
|
|
319
|
-
dragKeyRef.current = null;
|
|
320
|
-
setDraggingKey(null);
|
|
438
|
+
}
|
|
439
|
+
dragUidRef.current = null;
|
|
440
|
+
setDraggingUid(null);
|
|
441
|
+
setDropState(null);
|
|
442
|
+
});
|
|
443
|
+
const handleDragEnd = (0, import_useEvent.default)(() => {
|
|
444
|
+
dragUidRef.current = null;
|
|
445
|
+
setDraggingUid(null);
|
|
321
446
|
setDropState(null);
|
|
322
|
-
}
|
|
447
|
+
});
|
|
448
|
+
const contextValue = (0, import_react.useMemo)(
|
|
449
|
+
() => ({
|
|
450
|
+
prefixCls,
|
|
451
|
+
checkable,
|
|
452
|
+
showIcon,
|
|
453
|
+
icon,
|
|
454
|
+
showLine,
|
|
455
|
+
switcherIcon,
|
|
456
|
+
selectedUids: selectedUidSet,
|
|
457
|
+
checkedUids: checkedUidSet,
|
|
458
|
+
indeterminateUids: indeterminateUidSet,
|
|
459
|
+
expandedUids: expandedUidSet,
|
|
460
|
+
draggable,
|
|
461
|
+
draggingUid,
|
|
462
|
+
dropState,
|
|
463
|
+
onCheck: handleCheck,
|
|
464
|
+
onSelect: handleSelect,
|
|
465
|
+
onExpand: handleExpand,
|
|
466
|
+
onNodeDragStart: handleDragStart,
|
|
467
|
+
onNodeDragOver: handleDragOver,
|
|
468
|
+
onNodeDragLeave: handleDragLeave,
|
|
469
|
+
onNodeDrop: handleDrop
|
|
470
|
+
}),
|
|
471
|
+
[
|
|
472
|
+
prefixCls,
|
|
473
|
+
checkable,
|
|
474
|
+
showIcon,
|
|
475
|
+
icon,
|
|
476
|
+
showLine,
|
|
477
|
+
switcherIcon,
|
|
478
|
+
selectedUidSet,
|
|
479
|
+
checkedUidSet,
|
|
480
|
+
indeterminateUidSet,
|
|
481
|
+
expandedUidSet,
|
|
482
|
+
draggable,
|
|
483
|
+
draggingUid,
|
|
484
|
+
dropState,
|
|
485
|
+
// handlers are stable (useEvent), but listed for correctness
|
|
486
|
+
handleCheck,
|
|
487
|
+
handleSelect,
|
|
488
|
+
handleExpand,
|
|
489
|
+
handleDragStart,
|
|
490
|
+
handleDragOver,
|
|
491
|
+
handleDragLeave,
|
|
492
|
+
handleDrop
|
|
493
|
+
]
|
|
494
|
+
);
|
|
495
|
+
const useVirtual = virtual && height !== null && height !== void 0;
|
|
496
|
+
const { start, end, offsetY, totalHeight, viewportRef, onScroll } = (0, import_useVirtualList.default)({
|
|
497
|
+
itemCount: useVirtual ? visibleItems.length : 0,
|
|
498
|
+
itemHeight,
|
|
499
|
+
overscan: 4
|
|
500
|
+
});
|
|
501
|
+
if (useVirtual) {
|
|
502
|
+
const slicedItems = visibleItems.slice(start, end);
|
|
503
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
504
|
+
"div",
|
|
505
|
+
{
|
|
506
|
+
className: (0, import_clsx.default)(prefixCls, className),
|
|
507
|
+
style,
|
|
508
|
+
onDragEnd: handleDragEnd
|
|
509
|
+
},
|
|
510
|
+
/* @__PURE__ */ import_react.default.createElement(TreeContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react.default.createElement(
|
|
511
|
+
"div",
|
|
512
|
+
{
|
|
513
|
+
ref: viewportRef,
|
|
514
|
+
onScroll,
|
|
515
|
+
style: { height, overflowY: "auto" }
|
|
516
|
+
},
|
|
517
|
+
/* @__PURE__ */ import_react.default.createElement("div", { style: { height: totalHeight, position: "relative" } }, slicedItems.map((node, i) => /* @__PURE__ */ import_react.default.createElement(
|
|
518
|
+
import_tree_node.default,
|
|
519
|
+
{
|
|
520
|
+
node,
|
|
521
|
+
key: node.uid,
|
|
522
|
+
style: {
|
|
523
|
+
position: "absolute",
|
|
524
|
+
top: 0,
|
|
525
|
+
left: 0,
|
|
526
|
+
width: "100%",
|
|
527
|
+
height: itemHeight,
|
|
528
|
+
transform: `translateY(${offsetY + i * itemHeight}px)`
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
)))
|
|
532
|
+
))
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
const segments = [];
|
|
536
|
+
let currentGroup = null;
|
|
537
|
+
for (const node of visibleItems) {
|
|
538
|
+
if (node.depth === 0) {
|
|
539
|
+
if (currentGroup) {
|
|
540
|
+
segments.push(__spreadValues({ type: "group" }, currentGroup));
|
|
541
|
+
currentGroup = null;
|
|
542
|
+
}
|
|
543
|
+
segments.push({ type: "node", node });
|
|
544
|
+
} else {
|
|
545
|
+
if (currentGroup && currentGroup.pUid === node.pUid) {
|
|
546
|
+
currentGroup.nodes.push(node);
|
|
547
|
+
} else {
|
|
548
|
+
if (currentGroup) {
|
|
549
|
+
segments.push(__spreadValues({ type: "group" }, currentGroup));
|
|
550
|
+
}
|
|
551
|
+
currentGroup = { pUid: node.pUid, nodes: [node] };
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
if (currentGroup) {
|
|
556
|
+
segments.push(__spreadValues({ type: "group" }, currentGroup));
|
|
557
|
+
}
|
|
323
558
|
return /* @__PURE__ */ import_react.default.createElement(
|
|
324
559
|
"div",
|
|
325
560
|
{
|
|
@@ -327,33 +562,23 @@ var Tree = (baseprops) => {
|
|
|
327
562
|
style,
|
|
328
563
|
onDragEnd: handleDragEnd
|
|
329
564
|
},
|
|
330
|
-
/* @__PURE__ */ import_react.default.createElement(
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
onSelect: handleSelect,
|
|
348
|
-
onExpand: handleExpand,
|
|
349
|
-
onNodeDragStart: handleDragStart,
|
|
350
|
-
onNodeDragOver: handleDragOver,
|
|
351
|
-
onNodeDragLeave: handleDragLeave,
|
|
352
|
-
onNodeDrop: handleDrop
|
|
353
|
-
}
|
|
354
|
-
},
|
|
355
|
-
flatItems.map((node, index) => /* @__PURE__ */ import_react.default.createElement(import_tree_node.default, { node, key: node.key || index }))
|
|
356
|
-
)
|
|
565
|
+
/* @__PURE__ */ import_react.default.createElement(TreeContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react.default.createElement(import_react2.AnimatePresence, { initial: false }, segments.map((segment) => {
|
|
566
|
+
if (segment.type === "node") {
|
|
567
|
+
return /* @__PURE__ */ import_react.default.createElement(import_tree_node.default, { node: segment.node, key: segment.node.uid });
|
|
568
|
+
}
|
|
569
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
570
|
+
import_react2.motion.div,
|
|
571
|
+
{
|
|
572
|
+
key: segment.pUid + "children",
|
|
573
|
+
initial: { height: 0, opacity: 0 },
|
|
574
|
+
animate: { height: "auto", opacity: 1 },
|
|
575
|
+
exit: { height: 0, opacity: 0 },
|
|
576
|
+
transition: { duration: 0.15 },
|
|
577
|
+
style: { overflow: "hidden" }
|
|
578
|
+
},
|
|
579
|
+
segment.nodes.map((node) => /* @__PURE__ */ import_react.default.createElement(import_tree_node.default, { node, key: node.uid }))
|
|
580
|
+
);
|
|
581
|
+
})))
|
|
357
582
|
);
|
|
358
583
|
};
|
|
359
584
|
var tree_default = Tree;
|