@headless-tree/core 1.3.0 → 1.5.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/CHANGELOG.md +29 -0
- package/dist/index.d.mts +37 -10
- package/dist/index.d.ts +37 -10
- package/dist/index.js +190 -86
- package/dist/index.mjs +190 -86
- package/package.json +19 -3
- package/readme.md +6 -6
- package/src/core/create-tree.ts +45 -9
- package/src/features/async-data-loader/async-data-loader.spec.ts +1 -0
- package/src/features/async-data-loader/feature.ts +16 -20
- package/src/features/async-data-loader/types.ts +2 -1
- package/src/features/checkboxes/checkboxes.spec.ts +111 -122
- package/src/features/checkboxes/feature.ts +89 -40
- package/src/features/checkboxes/types.ts +16 -3
- package/src/features/drag-and-drop/feature.ts +63 -8
- package/src/features/drag-and-drop/types.ts +10 -0
- package/src/features/drag-and-drop/utils.ts +8 -6
- package/src/features/hotkeys-core/feature.ts +1 -0
- package/src/features/keyboard-drag-and-drop/feature.ts +3 -1
- package/src/features/main/types.ts +9 -0
- package/src/features/sync-data-loader/types.ts +7 -1
- package/src/mddocs-entry.ts +13 -0
- package/src/test-utils/test-tree-do.ts +6 -0
- package/src/test-utils/test-tree.ts +14 -3
- package/src/types/core.ts +5 -5
package/dist/index.js
CHANGED
|
@@ -485,6 +485,7 @@ var createTree = (initialConfig) => {
|
|
|
485
485
|
);
|
|
486
486
|
let treeElement;
|
|
487
487
|
const treeDataRef = { current: {} };
|
|
488
|
+
let rebuildScheduled = false;
|
|
488
489
|
const itemInstancesMap = {};
|
|
489
490
|
let itemInstances = [];
|
|
490
491
|
const itemElementsMap = {};
|
|
@@ -528,6 +529,7 @@ var createTree = (initialConfig) => {
|
|
|
528
529
|
itemInstances.push(itemInstancesMap[item.itemId]);
|
|
529
530
|
}
|
|
530
531
|
}
|
|
532
|
+
rebuildScheduled = false;
|
|
531
533
|
};
|
|
532
534
|
const eachFeature = (fn) => {
|
|
533
535
|
for (const feature of additionalFeatures) {
|
|
@@ -542,16 +544,48 @@ var createTree = (initialConfig) => {
|
|
|
542
544
|
var _a2;
|
|
543
545
|
(_a2 = config.setState) == null ? void 0 : _a2.call(config, state);
|
|
544
546
|
},
|
|
547
|
+
setMounted: ({}, isMounted) => {
|
|
548
|
+
var _a2;
|
|
549
|
+
const ref = treeDataRef.current;
|
|
550
|
+
ref.isMounted = isMounted;
|
|
551
|
+
if (isMounted) {
|
|
552
|
+
(_a2 = ref.waitingForMount) == null ? void 0 : _a2.forEach((cb) => cb());
|
|
553
|
+
ref.waitingForMount = [];
|
|
554
|
+
}
|
|
555
|
+
},
|
|
545
556
|
applySubStateUpdate: ({}, stateName, updater) => {
|
|
546
|
-
|
|
547
|
-
const
|
|
548
|
-
|
|
557
|
+
var _a2;
|
|
558
|
+
const apply = () => {
|
|
559
|
+
state[stateName] = typeof updater === "function" ? updater(state[stateName]) : updater;
|
|
560
|
+
const externalStateSetter = config[stateHandlerNames[stateName]];
|
|
561
|
+
externalStateSetter == null ? void 0 : externalStateSetter(state[stateName]);
|
|
562
|
+
};
|
|
563
|
+
const ref = treeDataRef.current;
|
|
564
|
+
if (ref.isMounted) {
|
|
565
|
+
apply();
|
|
566
|
+
} else {
|
|
567
|
+
(_a2 = ref.waitingForMount) != null ? _a2 : ref.waitingForMount = [];
|
|
568
|
+
ref.waitingForMount.push(apply);
|
|
569
|
+
}
|
|
549
570
|
},
|
|
550
571
|
// TODO rebuildSubTree: (itemId: string) => void;
|
|
551
572
|
rebuildTree: () => {
|
|
552
|
-
var _a2;
|
|
553
|
-
|
|
554
|
-
(
|
|
573
|
+
var _a2, _b2;
|
|
574
|
+
const ref = treeDataRef.current;
|
|
575
|
+
if (ref.isMounted) {
|
|
576
|
+
rebuildItemMeta();
|
|
577
|
+
(_a2 = config.setState) == null ? void 0 : _a2.call(config, state);
|
|
578
|
+
} else {
|
|
579
|
+
(_b2 = ref.waitingForMount) != null ? _b2 : ref.waitingForMount = [];
|
|
580
|
+
ref.waitingForMount.push(() => {
|
|
581
|
+
var _a3;
|
|
582
|
+
rebuildItemMeta();
|
|
583
|
+
(_a3 = config.setState) == null ? void 0 : _a3.call(config, state);
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
scheduleRebuildTree: () => {
|
|
588
|
+
rebuildScheduled = true;
|
|
555
589
|
},
|
|
556
590
|
getConfig: () => config,
|
|
557
591
|
setConfig: (_, updater) => {
|
|
@@ -584,7 +618,10 @@ var createTree = (initialConfig) => {
|
|
|
584
618
|
}
|
|
585
619
|
return existingInstance;
|
|
586
620
|
},
|
|
587
|
-
getItems: () =>
|
|
621
|
+
getItems: () => {
|
|
622
|
+
if (rebuildScheduled) rebuildItemMeta();
|
|
623
|
+
return itemInstances;
|
|
624
|
+
},
|
|
588
625
|
registerElement: ({}, element) => {
|
|
589
626
|
if (treeElement === element) {
|
|
590
627
|
return;
|
|
@@ -817,33 +854,60 @@ var getAllLoadedDescendants = (tree, itemId, includeFolders = false) => {
|
|
|
817
854
|
if (!tree.getConfig().isItemFolder(tree.getItemInstance(itemId))) {
|
|
818
855
|
return [itemId];
|
|
819
856
|
}
|
|
820
|
-
const descendants = tree.retrieveChildrenIds(itemId).map((child) => getAllLoadedDescendants(tree, child, includeFolders)).flat();
|
|
857
|
+
const descendants = tree.retrieveChildrenIds(itemId, true).map((child) => getAllLoadedDescendants(tree, child, includeFolders)).flat();
|
|
821
858
|
return includeFolders ? [itemId, ...descendants] : descendants;
|
|
822
859
|
};
|
|
860
|
+
var getAllDescendants = (tree, itemId, includeFolders = false) => __async(null, null, function* () {
|
|
861
|
+
yield tree.loadItemData(itemId);
|
|
862
|
+
if (!tree.getConfig().isItemFolder(tree.getItemInstance(itemId))) {
|
|
863
|
+
return [itemId];
|
|
864
|
+
}
|
|
865
|
+
const childrenIds = yield tree.loadChildrenIds(itemId);
|
|
866
|
+
const descendants = (yield Promise.all(
|
|
867
|
+
childrenIds.map(
|
|
868
|
+
(child) => getAllDescendants(tree, child, includeFolders)
|
|
869
|
+
)
|
|
870
|
+
)).flat();
|
|
871
|
+
return includeFolders ? [itemId, ...descendants] : descendants;
|
|
872
|
+
});
|
|
873
|
+
var withLoadingState = (tree, itemId, callback) => __async(null, null, function* () {
|
|
874
|
+
tree.applySubStateUpdate("loadingCheckPropagationItems", (items) => [
|
|
875
|
+
...items,
|
|
876
|
+
itemId
|
|
877
|
+
]);
|
|
878
|
+
try {
|
|
879
|
+
yield callback();
|
|
880
|
+
} finally {
|
|
881
|
+
tree.applySubStateUpdate(
|
|
882
|
+
"loadingCheckPropagationItems",
|
|
883
|
+
(items) => items.filter((id) => id !== itemId)
|
|
884
|
+
);
|
|
885
|
+
}
|
|
886
|
+
});
|
|
823
887
|
var checkboxesFeature = {
|
|
824
888
|
key: "checkboxes",
|
|
825
889
|
overwrites: ["selection"],
|
|
826
890
|
getInitialState: (initialState) => __spreadValues({
|
|
827
|
-
checkedItems: []
|
|
891
|
+
checkedItems: [],
|
|
892
|
+
loadingCheckPropagationItems: []
|
|
828
893
|
}, initialState),
|
|
829
894
|
getDefaultConfig: (defaultConfig, tree) => {
|
|
830
|
-
var _a, _b
|
|
831
|
-
const
|
|
832
|
-
|
|
833
|
-
);
|
|
834
|
-
if (hasAsyncLoader && defaultConfig.propagateCheckedState) {
|
|
835
|
-
throwError(`propagateCheckedState not supported with async trees`);
|
|
836
|
-
}
|
|
837
|
-
const propagateCheckedState = (_b = defaultConfig.propagateCheckedState) != null ? _b : !hasAsyncLoader;
|
|
838
|
-
const canCheckFolders = (_c = defaultConfig.canCheckFolders) != null ? _c : !propagateCheckedState;
|
|
895
|
+
var _a, _b;
|
|
896
|
+
const propagateCheckedState = (_a = defaultConfig.propagateCheckedState) != null ? _a : true;
|
|
897
|
+
const canCheckFolders = (_b = defaultConfig.canCheckFolders) != null ? _b : !propagateCheckedState;
|
|
839
898
|
return __spreadValues({
|
|
840
899
|
setCheckedItems: makeStateUpdater("checkedItems", tree),
|
|
900
|
+
setLoadingCheckPropagationItems: makeStateUpdater(
|
|
901
|
+
"loadingCheckPropagationItems",
|
|
902
|
+
tree
|
|
903
|
+
),
|
|
841
904
|
propagateCheckedState,
|
|
842
905
|
canCheckFolders
|
|
843
906
|
}, defaultConfig);
|
|
844
907
|
},
|
|
845
908
|
stateHandlerNames: {
|
|
846
|
-
checkedItems: "setCheckedItems"
|
|
909
|
+
checkedItems: "setCheckedItems",
|
|
910
|
+
loadingCheckPropagationItems: "setLoadingCheckPropagationItems"
|
|
847
911
|
},
|
|
848
912
|
treeInstance: {
|
|
849
913
|
setCheckedItems: ({ tree }, checkedItems) => {
|
|
@@ -863,13 +927,13 @@ var checkboxesFeature = {
|
|
|
863
927
|
}
|
|
864
928
|
};
|
|
865
929
|
},
|
|
866
|
-
toggleCheckedState: ({ item })
|
|
930
|
+
toggleCheckedState: (_0) => __async(null, [_0], function* ({ item }) {
|
|
867
931
|
if (item.getCheckedState() === "checked" /* Checked */) {
|
|
868
|
-
item.setUnchecked();
|
|
932
|
+
yield item.setUnchecked();
|
|
869
933
|
} else {
|
|
870
|
-
item.setChecked();
|
|
934
|
+
yield item.setChecked();
|
|
871
935
|
}
|
|
872
|
-
},
|
|
936
|
+
}),
|
|
873
937
|
getCheckedState: ({ item, tree }) => {
|
|
874
938
|
const { checkedItems } = tree.getState();
|
|
875
939
|
const { propagateCheckedState } = tree.getConfig();
|
|
@@ -879,6 +943,7 @@ var checkboxesFeature = {
|
|
|
879
943
|
}
|
|
880
944
|
if (item.isFolder() && propagateCheckedState) {
|
|
881
945
|
const descendants = getAllLoadedDescendants(tree, itemId);
|
|
946
|
+
if (descendants.length === 0) return "unchecked" /* Unchecked */;
|
|
882
947
|
if (descendants.every((d) => checkedItems.includes(d))) {
|
|
883
948
|
return "checked" /* Checked */;
|
|
884
949
|
}
|
|
@@ -888,36 +953,48 @@ var checkboxesFeature = {
|
|
|
888
953
|
}
|
|
889
954
|
return "unchecked" /* Unchecked */;
|
|
890
955
|
},
|
|
891
|
-
setChecked: ({ item, tree, itemId })
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
956
|
+
setChecked: (_0) => __async(null, [_0], function* ({ item, tree, itemId }) {
|
|
957
|
+
yield withLoadingState(tree, itemId, () => __async(null, null, function* () {
|
|
958
|
+
const { propagateCheckedState, canCheckFolders } = tree.getConfig();
|
|
959
|
+
if (item.isFolder() && propagateCheckedState) {
|
|
960
|
+
const descendants = yield getAllDescendants(
|
|
961
|
+
tree,
|
|
962
|
+
itemId,
|
|
963
|
+
canCheckFolders
|
|
964
|
+
);
|
|
965
|
+
tree.applySubStateUpdate("checkedItems", (items) => [
|
|
966
|
+
...items,
|
|
967
|
+
...descendants
|
|
968
|
+
]);
|
|
969
|
+
} else if (!item.isFolder() || canCheckFolders) {
|
|
970
|
+
tree.applySubStateUpdate("checkedItems", (items) => [
|
|
971
|
+
...items,
|
|
972
|
+
itemId
|
|
973
|
+
]);
|
|
974
|
+
}
|
|
975
|
+
}));
|
|
976
|
+
}),
|
|
977
|
+
setUnchecked: (_0) => __async(null, [_0], function* ({ item, tree, itemId }) {
|
|
978
|
+
yield withLoadingState(tree, itemId, () => __async(null, null, function* () {
|
|
979
|
+
const { propagateCheckedState, canCheckFolders } = tree.getConfig();
|
|
980
|
+
if (item.isFolder() && propagateCheckedState) {
|
|
981
|
+
const descendants = yield getAllDescendants(
|
|
982
|
+
tree,
|
|
983
|
+
itemId,
|
|
984
|
+
canCheckFolders
|
|
985
|
+
);
|
|
986
|
+
tree.applySubStateUpdate(
|
|
987
|
+
"checkedItems",
|
|
988
|
+
(items) => items.filter((id) => !descendants.includes(id) && id !== itemId)
|
|
989
|
+
);
|
|
990
|
+
} else {
|
|
991
|
+
tree.applySubStateUpdate(
|
|
992
|
+
"checkedItems",
|
|
993
|
+
(items) => items.filter((id) => id !== itemId)
|
|
994
|
+
);
|
|
995
|
+
}
|
|
996
|
+
}));
|
|
997
|
+
})
|
|
921
998
|
}
|
|
922
999
|
};
|
|
923
1000
|
|
|
@@ -929,7 +1006,8 @@ var specialKeys = {
|
|
|
929
1006
|
plus: /^(NumpadAdd|Plus)$/,
|
|
930
1007
|
minus: /^(NumpadSubtract|Minus)$/,
|
|
931
1008
|
control: /^(ControlLeft|ControlRight)$/,
|
|
932
|
-
shift: /^(ShiftLeft|ShiftRight)
|
|
1009
|
+
shift: /^(ShiftLeft|ShiftRight)$/,
|
|
1010
|
+
metaorcontrol: /^(MetaLeft|MetaRight|ControlLeft|ControlRight)$/
|
|
933
1011
|
};
|
|
934
1012
|
var testHotkeyMatch = (pressedKeys, tree, hotkey) => {
|
|
935
1013
|
const supposedKeys = hotkey.hotkey.toLowerCase().split("+");
|
|
@@ -1034,6 +1112,12 @@ var loadItemData = (tree, itemId) => __async(null, null, function* () {
|
|
|
1034
1112
|
var _a;
|
|
1035
1113
|
const config = tree.getConfig();
|
|
1036
1114
|
const dataRef = getDataRef(tree);
|
|
1115
|
+
if (!dataRef.current.itemData[itemId]) {
|
|
1116
|
+
tree.applySubStateUpdate("loadingItemData", (loadingItemData) => [
|
|
1117
|
+
...loadingItemData,
|
|
1118
|
+
itemId
|
|
1119
|
+
]);
|
|
1120
|
+
}
|
|
1037
1121
|
const item = yield config.dataLoader.getItem(itemId);
|
|
1038
1122
|
dataRef.current.itemData[itemId] = item;
|
|
1039
1123
|
(_a = config.onLoadedItem) == null ? void 0 : _a.call(config, itemId, item);
|
|
@@ -1048,6 +1132,12 @@ var loadChildrenIds = (tree, itemId) => __async(null, null, function* () {
|
|
|
1048
1132
|
const config = tree.getConfig();
|
|
1049
1133
|
const dataRef = getDataRef(tree);
|
|
1050
1134
|
let childrenIds;
|
|
1135
|
+
if (!dataRef.current.childrenIds[itemId]) {
|
|
1136
|
+
tree.applySubStateUpdate("loadingItemChildrens", (loadingItemChildrens) => [
|
|
1137
|
+
...loadingItemChildrens,
|
|
1138
|
+
itemId
|
|
1139
|
+
]);
|
|
1140
|
+
}
|
|
1051
1141
|
if ("getChildrenWithData" in config.dataLoader) {
|
|
1052
1142
|
const children = yield config.dataLoader.getChildrenWithData(itemId);
|
|
1053
1143
|
childrenIds = children.map((c) => c.id);
|
|
@@ -1108,11 +1198,7 @@ var asyncDataLoaderFeature = {
|
|
|
1108
1198
|
return dataRef.current.itemData[itemId];
|
|
1109
1199
|
}
|
|
1110
1200
|
if (!tree.getState().loadingItemData.includes(itemId) && !skipFetch) {
|
|
1111
|
-
|
|
1112
|
-
...loadingItemData,
|
|
1113
|
-
itemId
|
|
1114
|
-
]);
|
|
1115
|
-
loadItemData(tree, itemId);
|
|
1201
|
+
setTimeout(() => loadItemData(tree, itemId));
|
|
1116
1202
|
}
|
|
1117
1203
|
return (_b = (_a = config.createLoadingItemData) == null ? void 0 : _a.call(config)) != null ? _b : null;
|
|
1118
1204
|
},
|
|
@@ -1124,11 +1210,7 @@ var asyncDataLoaderFeature = {
|
|
|
1124
1210
|
if (tree.getState().loadingItemChildrens.includes(itemId) || skipFetch) {
|
|
1125
1211
|
return [];
|
|
1126
1212
|
}
|
|
1127
|
-
tree
|
|
1128
|
-
"loadingItemChildrens",
|
|
1129
|
-
(loadingItemChildrens) => [...loadingItemChildrens, itemId]
|
|
1130
|
-
);
|
|
1131
|
-
loadChildrenIds(tree, itemId);
|
|
1213
|
+
setTimeout(() => loadChildrenIds(tree, itemId));
|
|
1132
1214
|
return [];
|
|
1133
1215
|
}
|
|
1134
1216
|
},
|
|
@@ -1138,10 +1220,6 @@ var asyncDataLoaderFeature = {
|
|
|
1138
1220
|
var _a;
|
|
1139
1221
|
if (!optimistic) {
|
|
1140
1222
|
(_a = getDataRef(tree).current.itemData) == null ? true : delete _a[itemId];
|
|
1141
|
-
tree.applySubStateUpdate("loadingItemData", (loadingItemData) => [
|
|
1142
|
-
...loadingItemData,
|
|
1143
|
-
itemId
|
|
1144
|
-
]);
|
|
1145
1223
|
}
|
|
1146
1224
|
yield loadItemData(tree, itemId);
|
|
1147
1225
|
}),
|
|
@@ -1149,10 +1227,6 @@ var asyncDataLoaderFeature = {
|
|
|
1149
1227
|
var _a;
|
|
1150
1228
|
if (!optimistic) {
|
|
1151
1229
|
(_a = getDataRef(tree).current.childrenIds) == null ? true : delete _a[itemId];
|
|
1152
|
-
tree.applySubStateUpdate(
|
|
1153
|
-
"loadingItemChildrens",
|
|
1154
|
-
(loadingItemChildrens) => [...loadingItemChildrens, itemId]
|
|
1155
|
-
);
|
|
1156
1230
|
}
|
|
1157
1231
|
yield loadChildrenIds(tree, itemId);
|
|
1158
1232
|
}),
|
|
@@ -1296,8 +1370,7 @@ var getTargetPlacement = (e, item, tree, canMakeChild) => {
|
|
|
1296
1370
|
}
|
|
1297
1371
|
return { type: makeChildType };
|
|
1298
1372
|
};
|
|
1299
|
-
var getDragCode = (
|
|
1300
|
-
const placement = getTargetPlacement(e, item, tree, true);
|
|
1373
|
+
var getDragCode = (item, placement) => {
|
|
1301
1374
|
return [
|
|
1302
1375
|
item.getId(),
|
|
1303
1376
|
placement.type,
|
|
@@ -1338,6 +1411,9 @@ var getDragTarget = (e, item, tree, canReorder = tree.getConfig().canReorder) =>
|
|
|
1338
1411
|
const canMakeChild = canDrop(e.dataTransfer, itemTarget, tree);
|
|
1339
1412
|
const placement = getTargetPlacement(e, item, tree, canMakeChild);
|
|
1340
1413
|
if (!canReorder && parent && canBecomeSibling && placement.type !== 2 /* MakeChild */) {
|
|
1414
|
+
if (draggedItems == null ? void 0 : draggedItems.some((item2) => item2.isDescendentOf(parent.getId()))) {
|
|
1415
|
+
return itemTarget;
|
|
1416
|
+
}
|
|
1341
1417
|
return parentTarget;
|
|
1342
1418
|
}
|
|
1343
1419
|
if (!canReorder && parent && !canBecomeSibling) {
|
|
@@ -1372,16 +1448,29 @@ var getDragTarget = (e, item, tree, canReorder = tree.getConfig().canReorder) =>
|
|
|
1372
1448
|
};
|
|
1373
1449
|
|
|
1374
1450
|
// src/features/drag-and-drop/feature.ts
|
|
1451
|
+
var handleAutoOpenFolder = (dataRef, tree, item, placement) => {
|
|
1452
|
+
const { openOnDropDelay } = tree.getConfig();
|
|
1453
|
+
const dragCode = dataRef.current.lastDragCode;
|
|
1454
|
+
if (!openOnDropDelay || !item.isFolder() || item.isExpanded() || placement.type !== 2 /* MakeChild */) {
|
|
1455
|
+
return;
|
|
1456
|
+
}
|
|
1457
|
+
clearTimeout(dataRef.current.autoExpandTimeout);
|
|
1458
|
+
dataRef.current.autoExpandTimeout = setTimeout(() => {
|
|
1459
|
+
if (dragCode !== dataRef.current.lastDragCode || !dataRef.current.lastAllowDrop)
|
|
1460
|
+
return;
|
|
1461
|
+
item.expand();
|
|
1462
|
+
}, openOnDropDelay);
|
|
1463
|
+
};
|
|
1375
1464
|
var defaultCanDropForeignDragObject = () => false;
|
|
1376
1465
|
var dragAndDropFeature = {
|
|
1377
1466
|
key: "drag-and-drop",
|
|
1378
|
-
deps: ["selection"],
|
|
1379
1467
|
getDefaultConfig: (defaultConfig, tree) => __spreadValues({
|
|
1380
1468
|
canDrop: (_, target) => target.item.isFolder(),
|
|
1381
1469
|
canDropForeignDragObject: defaultCanDropForeignDragObject,
|
|
1382
1470
|
canDragForeignDragObjectOver: defaultConfig.canDropForeignDragObject !== defaultCanDropForeignDragObject ? (dataTransfer) => dataTransfer.effectAllowed !== "none" : () => false,
|
|
1383
1471
|
setDndState: makeStateUpdater("dnd", tree),
|
|
1384
|
-
canReorder: true
|
|
1472
|
+
canReorder: true,
|
|
1473
|
+
openOnDropDelay: 800
|
|
1385
1474
|
}, defaultConfig),
|
|
1386
1475
|
stateHandlerNames: {
|
|
1387
1476
|
dnd: "setDndState"
|
|
@@ -1422,7 +1511,7 @@ var dragAndDropFeature = {
|
|
|
1422
1511
|
};
|
|
1423
1512
|
}
|
|
1424
1513
|
}
|
|
1425
|
-
const bb = (_f = targetItem.getElement()) == null ? void 0 : _f.getBoundingClientRect();
|
|
1514
|
+
const bb = (_f = targetItem == null ? void 0 : targetItem.getElement()) == null ? void 0 : _f.getBoundingClientRect();
|
|
1426
1515
|
if (bb) {
|
|
1427
1516
|
return {
|
|
1428
1517
|
indent,
|
|
@@ -1478,20 +1567,20 @@ var dragAndDropFeature = {
|
|
|
1478
1567
|
draggable: true,
|
|
1479
1568
|
onDragEnter: (e) => e.preventDefault(),
|
|
1480
1569
|
onDragStart: (e) => {
|
|
1481
|
-
var _a, _b, _c;
|
|
1482
|
-
const selectedItems = tree.getSelectedItems();
|
|
1570
|
+
var _a, _b, _c, _d;
|
|
1571
|
+
const selectedItems = tree.getSelectedItems ? tree.getSelectedItems() : [tree.getFocusedItem()];
|
|
1483
1572
|
const items = selectedItems.includes(item) ? selectedItems : [item];
|
|
1484
1573
|
const config = tree.getConfig();
|
|
1485
1574
|
if (!selectedItems.includes(item)) {
|
|
1486
|
-
tree.setSelectedItems([item.getItemMeta().itemId]);
|
|
1575
|
+
(_a = tree.setSelectedItems) == null ? void 0 : _a.call(tree, [item.getItemMeta().itemId]);
|
|
1487
1576
|
}
|
|
1488
|
-
if (!((
|
|
1577
|
+
if (!((_c = (_b = config.canDrag) == null ? void 0 : _b.call(config, items)) != null ? _c : true)) {
|
|
1489
1578
|
e.preventDefault();
|
|
1490
1579
|
return;
|
|
1491
1580
|
}
|
|
1492
1581
|
if (config.setDragImage) {
|
|
1493
1582
|
const { imgElement, xOffset, yOffset } = config.setDragImage(items);
|
|
1494
|
-
(
|
|
1583
|
+
(_d = e.dataTransfer) == null ? void 0 : _d.setDragImage(imgElement, xOffset != null ? xOffset : 0, yOffset != null ? yOffset : 0);
|
|
1495
1584
|
}
|
|
1496
1585
|
if (config.createForeignDragObject && e.dataTransfer) {
|
|
1497
1586
|
const { format, data, dropEffect, effectAllowed } = config.createForeignDragObject(items);
|
|
@@ -1508,7 +1597,8 @@ var dragAndDropFeature = {
|
|
|
1508
1597
|
var _a, _b, _c;
|
|
1509
1598
|
e.stopPropagation();
|
|
1510
1599
|
const dataRef = tree.getDataRef();
|
|
1511
|
-
const
|
|
1600
|
+
const placement = getTargetPlacement(e, item, tree, true);
|
|
1601
|
+
const nextDragCode = getDragCode(item, placement);
|
|
1512
1602
|
if (nextDragCode === dataRef.current.lastDragCode) {
|
|
1513
1603
|
if (dataRef.current.lastAllowDrop) {
|
|
1514
1604
|
e.preventDefault();
|
|
@@ -1517,6 +1607,7 @@ var dragAndDropFeature = {
|
|
|
1517
1607
|
}
|
|
1518
1608
|
dataRef.current.lastDragCode = nextDragCode;
|
|
1519
1609
|
dataRef.current.lastDragEnter = Date.now();
|
|
1610
|
+
handleAutoOpenFolder(dataRef, tree, item, placement);
|
|
1520
1611
|
const target = getDragTarget(e, item, tree);
|
|
1521
1612
|
if (!((_a = tree.getState().dnd) == null ? void 0 : _a.draggedItems) && (!e.dataTransfer || !((_c = (_b = tree.getConfig()).canDragForeignDragObjectOver) == null ? void 0 : _c.call(_b, e.dataTransfer, target)))) {
|
|
1522
1613
|
dataRef.current.lastAllowDrop = false;
|
|
@@ -1563,12 +1654,18 @@ var dragAndDropFeature = {
|
|
|
1563
1654
|
e.stopPropagation();
|
|
1564
1655
|
const dataRef = tree.getDataRef();
|
|
1565
1656
|
const target = getDragTarget(e, item, tree);
|
|
1566
|
-
|
|
1657
|
+
const draggedItems = (_a = tree.getState().dnd) == null ? void 0 : _a.draggedItems;
|
|
1658
|
+
const isValidDrop = canDrop(e.dataTransfer, target, tree);
|
|
1659
|
+
tree.applySubStateUpdate("dnd", {
|
|
1660
|
+
draggedItems: void 0,
|
|
1661
|
+
draggingOverItem: void 0,
|
|
1662
|
+
dragTarget: void 0
|
|
1663
|
+
});
|
|
1664
|
+
if (!isValidDrop) {
|
|
1567
1665
|
return;
|
|
1568
1666
|
}
|
|
1569
1667
|
e.preventDefault();
|
|
1570
1668
|
const config = tree.getConfig();
|
|
1571
|
-
const draggedItems = (_a = tree.getState().dnd) == null ? void 0 : _a.draggedItems;
|
|
1572
1669
|
dataRef.current.lastDragCode = void 0;
|
|
1573
1670
|
if (draggedItems) {
|
|
1574
1671
|
yield (_b = config.onDrop) == null ? void 0 : _b.call(config, draggedItems, target);
|
|
@@ -1581,6 +1678,10 @@ var dragAndDropFeature = {
|
|
|
1581
1678
|
const target = tree.getDragTarget();
|
|
1582
1679
|
return target ? target.item.getId() === item.getId() : false;
|
|
1583
1680
|
},
|
|
1681
|
+
isUnorderedDragTarget: ({ tree, item }) => {
|
|
1682
|
+
const target = tree.getDragTarget();
|
|
1683
|
+
return target ? !isOrderedDragTarget(target) && target.item.getId() === item.getId() : false;
|
|
1684
|
+
},
|
|
1584
1685
|
isDragTargetAbove: ({ tree, item }) => {
|
|
1585
1686
|
const target = tree.getDragTarget();
|
|
1586
1687
|
if (!target || !isOrderedDragTarget(target) || target.item !== item.getParent())
|
|
@@ -1740,7 +1841,10 @@ var keyboardDragAndDropFeature = {
|
|
|
1740
1841
|
preventDefault: true,
|
|
1741
1842
|
isEnabled: (tree) => !tree.getState().dnd,
|
|
1742
1843
|
handler: (_, tree) => {
|
|
1743
|
-
|
|
1844
|
+
var _a, _b;
|
|
1845
|
+
const selectedItems = (_b = (_a = tree.getSelectedItems) == null ? void 0 : _a.call(tree)) != null ? _b : [
|
|
1846
|
+
tree.getFocusedItem()
|
|
1847
|
+
];
|
|
1744
1848
|
const focusedItem = tree.getFocusedItem();
|
|
1745
1849
|
tree.startKeyboardDrag(
|
|
1746
1850
|
selectedItems.includes(focusedItem) ? selectedItems : selectedItems.concat(focusedItem)
|