@mui/x-tree-view-pro 8.11.0 → 8.11.2
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 +169 -0
- package/RichTreeViewPro/RichTreeViewPro.js +14 -12
- package/RichTreeViewPro/RichTreeViewPro.types.d.ts +3 -2
- package/RichTreeViewPro/index.d.ts +2 -1
- package/esm/RichTreeViewPro/RichTreeViewPro.js +14 -12
- package/esm/RichTreeViewPro/RichTreeViewPro.types.d.ts +3 -2
- package/esm/RichTreeViewPro/index.d.ts +2 -1
- package/esm/index.js +1 -1
- package/esm/internals/plugins/useTreeViewItemsReordering/index.d.ts +2 -1
- package/esm/internals/plugins/useTreeViewItemsReordering/index.js +2 -1
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +6 -5
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +57 -71
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +17 -433
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -50
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +2 -2
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +82 -78
- package/esm/internals/plugins/useTreeViewLazyLoading/utils.js +3 -1
- package/index.js +1 -1
- package/internals/plugins/useTreeViewItemsReordering/index.d.ts +2 -1
- package/internals/plugins/useTreeViewItemsReordering/index.js +8 -1
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +4 -3
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +55 -69
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +17 -433
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -50
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +1 -1
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +81 -77
- package/internals/plugins/useTreeViewLazyLoading/utils.js +3 -1
- package/package.json +15 -14
|
@@ -4,7 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import useLazyRef from '@mui/utils/useLazyRef';
|
|
6
6
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
7
|
-
import {
|
|
7
|
+
import { itemsSelectors, expansionSelectors, selectionSelectors, lazyLoadingSelectors, useInstanceEventHandler } from '@mui/x-tree-view/internals';
|
|
8
8
|
import { DataSourceCacheDefault } from '@mui/x-tree-view/utils';
|
|
9
9
|
import { NestedDataManager } from "./utils.js";
|
|
10
10
|
const INITIAL_STATE = {
|
|
@@ -35,54 +35,44 @@ export const useTreeViewLazyLoading = ({
|
|
|
35
35
|
if (!isLazyLoadingEnabled) {
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
|
-
store.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
})
|
|
53
|
-
})
|
|
54
|
-
});
|
|
55
|
-
});
|
|
38
|
+
if (lazyLoadingSelectors.isItemLoading(store.state, itemId) === isLoading) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const loadingState = _extends({}, store.state.lazyLoading.dataSource.loading);
|
|
42
|
+
if (isLoading === false) {
|
|
43
|
+
delete loadingState[itemId];
|
|
44
|
+
} else {
|
|
45
|
+
loadingState[itemId] = isLoading;
|
|
46
|
+
}
|
|
47
|
+
store.set('lazyLoading', _extends({}, store.state.lazyLoading, {
|
|
48
|
+
dataSource: _extends({}, store.state.lazyLoading.dataSource, {
|
|
49
|
+
loading: loadingState
|
|
50
|
+
})
|
|
51
|
+
}));
|
|
56
52
|
});
|
|
57
53
|
const setDataSourceError = (itemId, error) => {
|
|
58
54
|
if (!isLazyLoadingEnabled) {
|
|
59
55
|
return;
|
|
60
56
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
} else {
|
|
66
|
-
errors[itemId] = error;
|
|
67
|
-
}
|
|
57
|
+
const errors = _extends({}, store.state.lazyLoading.dataSource.errors);
|
|
58
|
+
if (error === null && errors[itemId] !== undefined) {
|
|
59
|
+
delete errors[itemId];
|
|
60
|
+
} else {
|
|
68
61
|
errors[itemId] = error;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
});
|
|
62
|
+
}
|
|
63
|
+
errors[itemId] = error;
|
|
64
|
+
store.set('lazyLoading', _extends({}, store.state.lazyLoading, {
|
|
65
|
+
dataSource: _extends({}, store.state.lazyLoading.dataSource, {
|
|
66
|
+
errors
|
|
67
|
+
})
|
|
68
|
+
}));
|
|
77
69
|
};
|
|
78
70
|
const resetDataSourceState = useEventCallback(() => {
|
|
79
71
|
if (!isLazyLoadingEnabled) {
|
|
80
72
|
return;
|
|
81
73
|
}
|
|
82
|
-
store.
|
|
83
|
-
|
|
84
|
-
dataSource: INITIAL_STATE
|
|
85
|
-
})
|
|
74
|
+
store.set('lazyLoading', _extends({}, store.state.lazyLoading, {
|
|
75
|
+
dataSource: INITIAL_STATE
|
|
86
76
|
}));
|
|
87
77
|
});
|
|
88
78
|
const fetchItems = useEventCallback(async parentIds => {
|
|
@@ -102,7 +92,7 @@ export const useTreeViewLazyLoading = ({
|
|
|
102
92
|
// handle loading here
|
|
103
93
|
instance.setTreeViewLoading(true);
|
|
104
94
|
// reset the state if we are refetching the first visible items
|
|
105
|
-
if (
|
|
95
|
+
if (lazyLoadingSelectors.dataSource(store.state) !== INITIAL_STATE) {
|
|
106
96
|
resetDataSourceState();
|
|
107
97
|
}
|
|
108
98
|
// handle caching here
|
|
@@ -142,70 +132,83 @@ export const useTreeViewLazyLoading = ({
|
|
|
142
132
|
instance.setTreeViewLoading(false);
|
|
143
133
|
}
|
|
144
134
|
});
|
|
145
|
-
const fetchItemChildren = useEventCallback(async
|
|
135
|
+
const fetchItemChildren = useEventCallback(async ({
|
|
136
|
+
itemId,
|
|
137
|
+
forceRefresh
|
|
138
|
+
}) => {
|
|
146
139
|
if (!isLazyLoadingEnabled) {
|
|
147
140
|
return;
|
|
148
141
|
}
|
|
149
142
|
const getChildrenCount = params.dataSource?.getChildrenCount || (() => 0);
|
|
150
143
|
const getTreeItems = params.dataSource?.getTreeItems;
|
|
151
144
|
if (!getTreeItems) {
|
|
152
|
-
nestedDataManager.clearPendingRequest(
|
|
145
|
+
nestedDataManager.clearPendingRequest(itemId);
|
|
153
146
|
return;
|
|
154
147
|
}
|
|
155
|
-
const parent =
|
|
148
|
+
const parent = itemsSelectors.itemMeta(store.state, itemId);
|
|
156
149
|
if (!parent) {
|
|
157
|
-
nestedDataManager.clearPendingRequest(
|
|
150
|
+
nestedDataManager.clearPendingRequest(itemId);
|
|
158
151
|
return;
|
|
159
152
|
}
|
|
160
153
|
const depth = parent.depth ? parent.depth + 1 : 1;
|
|
161
154
|
|
|
162
155
|
// handle loading here
|
|
163
|
-
instance.setDataSourceLoading(
|
|
156
|
+
instance.setDataSourceLoading(itemId, true);
|
|
164
157
|
|
|
165
158
|
// handle caching here
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
159
|
+
if (!forceRefresh) {
|
|
160
|
+
const cachedData = cacheRef.current.get(itemId);
|
|
161
|
+
if (cachedData !== undefined && cachedData !== -1) {
|
|
162
|
+
nestedDataManager.setRequestSettled(itemId);
|
|
163
|
+
instance.addItems({
|
|
164
|
+
items: cachedData,
|
|
165
|
+
depth,
|
|
166
|
+
parentId: itemId,
|
|
167
|
+
getChildrenCount
|
|
168
|
+
});
|
|
169
|
+
instance.setDataSourceLoading(itemId, false);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (cachedData === -1) {
|
|
173
|
+
instance.removeChildren(itemId);
|
|
174
|
+
}
|
|
180
175
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
instance.setDataSourceError(id, null);
|
|
176
|
+
if (lazyLoadingSelectors.itemHasError(store.state, itemId)) {
|
|
177
|
+
instance.setDataSourceError(itemId, null);
|
|
184
178
|
}
|
|
185
179
|
try {
|
|
186
|
-
const getTreeItemsResponse = await getTreeItems(
|
|
187
|
-
nestedDataManager.setRequestSettled(
|
|
180
|
+
const getTreeItemsResponse = await getTreeItems(itemId);
|
|
181
|
+
nestedDataManager.setRequestSettled(itemId);
|
|
188
182
|
|
|
189
183
|
// set caching
|
|
190
|
-
cacheRef.current.set(
|
|
184
|
+
cacheRef.current.set(itemId, getTreeItemsResponse);
|
|
191
185
|
// update the items in the state
|
|
186
|
+
if (forceRefresh) {
|
|
187
|
+
instance.removeChildren(itemId);
|
|
188
|
+
}
|
|
192
189
|
instance.addItems({
|
|
193
190
|
items: getTreeItemsResponse,
|
|
194
191
|
depth,
|
|
195
|
-
parentId:
|
|
192
|
+
parentId: itemId,
|
|
196
193
|
getChildrenCount
|
|
197
194
|
});
|
|
198
195
|
} catch (error) {
|
|
199
196
|
const childrenFetchError = error;
|
|
200
197
|
// handle errors here
|
|
201
|
-
instance.setDataSourceError(
|
|
202
|
-
instance.removeChildren(
|
|
198
|
+
instance.setDataSourceError(itemId, childrenFetchError);
|
|
199
|
+
instance.removeChildren(itemId);
|
|
203
200
|
} finally {
|
|
204
201
|
// unset loading
|
|
205
|
-
instance.setDataSourceLoading(
|
|
206
|
-
nestedDataManager.setRequestSettled(
|
|
202
|
+
instance.setDataSourceLoading(itemId, false);
|
|
203
|
+
nestedDataManager.setRequestSettled(itemId);
|
|
207
204
|
}
|
|
208
205
|
});
|
|
206
|
+
const updateItemChildren = useEventCallback(itemId => {
|
|
207
|
+
return instance.fetchItemChildren({
|
|
208
|
+
itemId,
|
|
209
|
+
forceRefresh: true
|
|
210
|
+
});
|
|
211
|
+
});
|
|
209
212
|
useInstanceEventHandler(instance, 'beforeItemToggleExpansion', async eventParameters => {
|
|
210
213
|
if (!isLazyLoadingEnabled || !eventParameters.shouldBeExpanded) {
|
|
211
214
|
return;
|
|
@@ -214,14 +217,14 @@ export const useTreeViewLazyLoading = ({
|
|
|
214
217
|
|
|
215
218
|
eventParameters.isExpansionPrevented = true;
|
|
216
219
|
await instance.fetchItems([eventParameters.itemId]);
|
|
217
|
-
const
|
|
218
|
-
if (!
|
|
220
|
+
const itemHasError = lazyLoadingSelectors.itemHasError(store.state, eventParameters.itemId);
|
|
221
|
+
if (!itemHasError) {
|
|
219
222
|
instance.applyItemExpansion({
|
|
220
223
|
itemId: eventParameters.itemId,
|
|
221
224
|
shouldBeExpanded: true,
|
|
222
225
|
event: eventParameters.event
|
|
223
226
|
});
|
|
224
|
-
if (
|
|
227
|
+
if (selectionSelectors.isItemSelected(store.state, eventParameters.itemId)) {
|
|
225
228
|
// make sure selection propagation works correctly
|
|
226
229
|
instance.setItemSelection({
|
|
227
230
|
event: eventParameters.event,
|
|
@@ -234,10 +237,8 @@ export const useTreeViewLazyLoading = ({
|
|
|
234
237
|
});
|
|
235
238
|
React.useEffect(() => {
|
|
236
239
|
if (isLazyLoadingEnabled && firstRenderRef.current) {
|
|
237
|
-
store.
|
|
238
|
-
|
|
239
|
-
enabled: true
|
|
240
|
-
})
|
|
240
|
+
store.set('lazyLoading', _extends({}, store.state.lazyLoading, {
|
|
241
|
+
enabled: true
|
|
241
242
|
}));
|
|
242
243
|
if (params.items.length) {
|
|
243
244
|
const getChildrenCount = params.dataSource?.getChildrenCount || (() => 0);
|
|
@@ -247,7 +248,7 @@ export const useTreeViewLazyLoading = ({
|
|
|
247
248
|
getChildrenCount
|
|
248
249
|
});
|
|
249
250
|
} else {
|
|
250
|
-
const expandedItems =
|
|
251
|
+
const expandedItems = expansionSelectors.expandedItemsRaw(store.state);
|
|
251
252
|
if (expandedItems.length > 0) {
|
|
252
253
|
instance.resetItemExpansion();
|
|
253
254
|
}
|
|
@@ -263,10 +264,13 @@ export const useTreeViewLazyLoading = ({
|
|
|
263
264
|
instance: {
|
|
264
265
|
fetchItemChildren,
|
|
265
266
|
fetchItems,
|
|
267
|
+
updateItemChildren,
|
|
266
268
|
setDataSourceLoading,
|
|
267
269
|
setDataSourceError
|
|
268
270
|
},
|
|
269
|
-
publicAPI: {
|
|
271
|
+
publicAPI: {
|
|
272
|
+
updateItemChildren
|
|
273
|
+
}
|
|
270
274
|
};
|
|
271
275
|
};
|
|
272
276
|
useTreeViewLazyLoading.getInitialState = () => ({
|
|
@@ -42,7 +42,9 @@ export class NestedDataManager {
|
|
|
42
42
|
const id = fetchQueue[i];
|
|
43
43
|
this.queuedRequests.delete(id);
|
|
44
44
|
this.pendingRequests.add(id);
|
|
45
|
-
fetchPromises.push(this.instance.fetchItemChildren(
|
|
45
|
+
fetchPromises.push(this.instance.fetchItemChildren({
|
|
46
|
+
itemId: id
|
|
47
|
+
}));
|
|
46
48
|
}
|
|
47
49
|
await Promise.all(fetchPromises);
|
|
48
50
|
};
|
package/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { useTreeViewItemsReordering } from "./useTreeViewItemsReordering.js";
|
|
2
|
-
export type { UseTreeViewItemsReorderingSignature, UseTreeViewItemsReorderingParameters, UseTreeViewItemsReorderingParametersWithDefaults, TreeViewItemReorderPosition } from "./useTreeViewItemsReordering.types.js";
|
|
2
|
+
export type { UseTreeViewItemsReorderingSignature, UseTreeViewItemsReorderingParameters, UseTreeViewItemsReorderingParametersWithDefaults, TreeViewItemReorderPosition } from "./useTreeViewItemsReordering.types.js";
|
|
3
|
+
export { itemsReorderingSelectors } from "./useTreeViewItemsReordering.selectors.js";
|
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "itemsReorderingSelectors", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useTreeViewItemsReordering2.itemsReorderingSelectors;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "useTreeViewItemsReordering", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
9
15
|
return _useTreeViewItemsReordering.useTreeViewItemsReordering;
|
|
10
16
|
}
|
|
11
17
|
});
|
|
12
|
-
var _useTreeViewItemsReordering = require("./useTreeViewItemsReordering");
|
|
18
|
+
var _useTreeViewItemsReordering = require("./useTreeViewItemsReordering");
|
|
19
|
+
var _useTreeViewItemsReordering2 = require("./useTreeViewItemsReordering.selectors");
|
package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.useTreeViewItemsReorderingItemPlugin = exports.isAndroid = void 0;
|
|
8
8
|
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _store = require("@mui/x-internals/store");
|
|
9
10
|
var _internals = require("@mui/x-tree-view/internals");
|
|
10
11
|
var _useTreeViewItemsReordering = require("./useTreeViewItemsReordering.selectors");
|
|
11
12
|
const isAndroid = () => navigator.userAgent.toLowerCase().includes('android');
|
|
@@ -21,9 +22,9 @@ const useTreeViewItemsReorderingItemPlugin = ({
|
|
|
21
22
|
itemId
|
|
22
23
|
} = props;
|
|
23
24
|
const validActionsRef = React.useRef(null);
|
|
24
|
-
const draggedItemProperties = (0,
|
|
25
|
-
const canItemBeReordered = (0,
|
|
26
|
-
const isValidTarget = (0,
|
|
25
|
+
const draggedItemProperties = (0, _store.useStore)(store, _useTreeViewItemsReordering.itemsReorderingSelectors.draggedItemProperties, itemId);
|
|
26
|
+
const canItemBeReordered = (0, _store.useStore)(store, _useTreeViewItemsReordering.itemsReorderingSelectors.canItemBeReordered, itemId);
|
|
27
|
+
const isValidTarget = (0, _store.useStore)(store, _useTreeViewItemsReordering.itemsReorderingSelectors.isItemValidDropTarget, itemId);
|
|
27
28
|
return {
|
|
28
29
|
propsEnhancers: {
|
|
29
30
|
root: ({
|
|
@@ -28,7 +28,7 @@ const useTreeViewItemsReordering = ({
|
|
|
28
28
|
return true;
|
|
29
29
|
}, [params.itemsReordering, params.isItemReorderable]);
|
|
30
30
|
const getDroppingTargetValidActions = React.useCallback(itemId => {
|
|
31
|
-
const currentReorder =
|
|
31
|
+
const currentReorder = _useTreeViewItemsReordering3.itemsReorderingSelectors.currentReorder(store.state);
|
|
32
32
|
if (!currentReorder) {
|
|
33
33
|
throw new Error('There is no ongoing reordering.');
|
|
34
34
|
}
|
|
@@ -36,11 +36,11 @@ const useTreeViewItemsReordering = ({
|
|
|
36
36
|
return {};
|
|
37
37
|
}
|
|
38
38
|
const canMoveItemToNewPosition = params.canMoveItemToNewPosition;
|
|
39
|
-
const targetItemMeta =
|
|
40
|
-
const targetItemIndex =
|
|
41
|
-
const draggedItemMeta =
|
|
42
|
-
const draggedItemIndex =
|
|
43
|
-
const isTargetLastSibling = targetItemIndex ===
|
|
39
|
+
const targetItemMeta = _internals.itemsSelectors.itemMeta(store.state, itemId);
|
|
40
|
+
const targetItemIndex = _internals.itemsSelectors.itemIndex(store.state, targetItemMeta.id);
|
|
41
|
+
const draggedItemMeta = _internals.itemsSelectors.itemMeta(store.state, currentReorder.draggedItemId);
|
|
42
|
+
const draggedItemIndex = _internals.itemsSelectors.itemIndex(store.state, draggedItemMeta.id);
|
|
43
|
+
const isTargetLastSibling = targetItemIndex === _internals.itemsSelectors.itemOrderedChildrenIds(store.state, targetItemMeta.parentId).length - 1;
|
|
44
44
|
const oldPosition = {
|
|
45
45
|
parentId: draggedItemMeta.parentId,
|
|
46
46
|
index: draggedItemIndex
|
|
@@ -76,7 +76,7 @@ const useTreeViewItemsReordering = ({
|
|
|
76
76
|
} : null,
|
|
77
77
|
'move-to-parent': targetItemMeta.parentId == null ? null : {
|
|
78
78
|
parentId: targetItemMeta.parentId,
|
|
79
|
-
index:
|
|
79
|
+
index: _internals.itemsSelectors.itemOrderedChildrenIds(store.state, targetItemMeta.parentId).length
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
82
|
const validActions = {};
|
|
@@ -89,64 +89,56 @@ const useTreeViewItemsReordering = ({
|
|
|
89
89
|
return validActions;
|
|
90
90
|
}, [store, params.canMoveItemToNewPosition]);
|
|
91
91
|
const startDraggingItem = React.useCallback(itemId => {
|
|
92
|
-
store.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
const isItemBeingEdited = _internals.labelSelectors.isItemBeingEdited(store.state, itemId);
|
|
93
|
+
if (isItemBeingEdited) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
store.set('itemsReordering', (0, _extends2.default)({}, store.state.itemsReordering, {
|
|
97
|
+
currentReorder: {
|
|
98
|
+
targetItemId: itemId,
|
|
99
|
+
draggedItemId: itemId,
|
|
100
|
+
action: null,
|
|
101
|
+
newPosition: null
|
|
96
102
|
}
|
|
97
|
-
|
|
98
|
-
itemsReordering: (0, _extends2.default)({}, prevState.itemsReordering, {
|
|
99
|
-
currentReorder: {
|
|
100
|
-
targetItemId: itemId,
|
|
101
|
-
draggedItemId: itemId,
|
|
102
|
-
action: null,
|
|
103
|
-
newPosition: null
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
});
|
|
107
|
-
});
|
|
103
|
+
}));
|
|
108
104
|
}, [store]);
|
|
109
105
|
const cancelDraggingItem = React.useCallback(() => {
|
|
110
|
-
const currentReorder =
|
|
106
|
+
const currentReorder = _useTreeViewItemsReordering3.itemsReorderingSelectors.currentReorder(store.state);
|
|
111
107
|
if (currentReorder == null) {
|
|
112
108
|
return;
|
|
113
109
|
}
|
|
114
|
-
store.
|
|
115
|
-
|
|
116
|
-
currentReorder: null
|
|
117
|
-
})
|
|
110
|
+
store.set('itemsReordering', (0, _extends2.default)({}, store.state.itemsReordering, {
|
|
111
|
+
currentReorder: null
|
|
118
112
|
}));
|
|
119
113
|
}, [store]);
|
|
120
114
|
const completeDraggingItem = React.useCallback(itemId => {
|
|
121
|
-
const currentReorder =
|
|
115
|
+
const currentReorder = _useTreeViewItemsReordering3.itemsReorderingSelectors.currentReorder(store.state);
|
|
122
116
|
if (currentReorder == null || currentReorder.draggedItemId !== itemId) {
|
|
123
117
|
return;
|
|
124
118
|
}
|
|
125
119
|
if (currentReorder.draggedItemId === currentReorder.targetItemId || currentReorder.action == null || currentReorder.newPosition == null) {
|
|
126
|
-
store.
|
|
127
|
-
|
|
128
|
-
currentReorder: null
|
|
129
|
-
})
|
|
120
|
+
store.set('itemsReordering', (0, _extends2.default)({}, store.state.itemsReordering, {
|
|
121
|
+
currentReorder: null
|
|
130
122
|
}));
|
|
131
123
|
return;
|
|
132
124
|
}
|
|
133
|
-
const draggedItemMeta =
|
|
125
|
+
const draggedItemMeta = _internals.itemsSelectors.itemMeta(store.state, currentReorder.draggedItemId);
|
|
134
126
|
const oldPosition = {
|
|
135
127
|
parentId: draggedItemMeta.parentId,
|
|
136
|
-
index:
|
|
128
|
+
index: _internals.itemsSelectors.itemIndex(store.state, draggedItemMeta.id)
|
|
137
129
|
};
|
|
138
130
|
const newPosition = currentReorder.newPosition;
|
|
139
|
-
store.update(
|
|
140
|
-
itemsReordering: (0, _extends2.default)({},
|
|
131
|
+
store.update({
|
|
132
|
+
itemsReordering: (0, _extends2.default)({}, store.state.itemsReordering, {
|
|
141
133
|
currentReorder: null
|
|
142
134
|
}),
|
|
143
135
|
items: (0, _useTreeViewItemsReordering.moveItemInTree)({
|
|
144
136
|
itemToMoveId: itemId,
|
|
145
137
|
newPosition,
|
|
146
138
|
oldPosition,
|
|
147
|
-
prevState:
|
|
139
|
+
prevState: store.state.items
|
|
148
140
|
})
|
|
149
|
-
})
|
|
141
|
+
});
|
|
150
142
|
const onItemPositionChange = params.onItemPositionChange;
|
|
151
143
|
onItemPositionChange?.({
|
|
152
144
|
itemId,
|
|
@@ -162,40 +154,34 @@ const useTreeViewItemsReordering = ({
|
|
|
162
154
|
cursorX,
|
|
163
155
|
contentElement
|
|
164
156
|
}) => {
|
|
165
|
-
store.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
contentElement
|
|
178
|
-
});
|
|
179
|
-
const newPosition = action == null ? null : validActions[action];
|
|
180
|
-
if (prevItemReorder.targetItemId === itemId && prevItemReorder.action === action && prevItemReorder.newPosition?.parentId === newPosition?.parentId && prevItemReorder.newPosition?.index === newPosition?.index) {
|
|
181
|
-
return prevState;
|
|
182
|
-
}
|
|
183
|
-
return (0, _extends2.default)({}, prevState, {
|
|
184
|
-
itemsReordering: (0, _extends2.default)({}, prevState.itemsReordering, {
|
|
185
|
-
currentReorder: (0, _extends2.default)({}, prevItemReorder, {
|
|
186
|
-
targetItemId: itemId,
|
|
187
|
-
newPosition,
|
|
188
|
-
action
|
|
189
|
-
})
|
|
190
|
-
})
|
|
191
|
-
});
|
|
157
|
+
const prevItemReorder = store.state.itemsReordering.currentReorder;
|
|
158
|
+
if (prevItemReorder == null || (0, _useTreeViewItemsReordering.isAncestor)(store, itemId, prevItemReorder.draggedItemId)) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const action = (0, _useTreeViewItemsReordering.chooseActionToApply)({
|
|
162
|
+
itemChildrenIndentation: params.itemChildrenIndentation,
|
|
163
|
+
validActions,
|
|
164
|
+
targetHeight,
|
|
165
|
+
targetDepth: store.state.items.itemMetaLookup[itemId].depth,
|
|
166
|
+
cursorY,
|
|
167
|
+
cursorX,
|
|
168
|
+
contentElement
|
|
192
169
|
});
|
|
170
|
+
const newPosition = action == null ? null : validActions[action];
|
|
171
|
+
if (prevItemReorder.targetItemId === itemId && prevItemReorder.action === action && prevItemReorder.newPosition?.parentId === newPosition?.parentId && prevItemReorder.newPosition?.index === newPosition?.index) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
store.set('itemsReordering', (0, _extends2.default)({}, store.state.itemsReordering, {
|
|
175
|
+
currentReorder: (0, _extends2.default)({}, prevItemReorder, {
|
|
176
|
+
targetItemId: itemId,
|
|
177
|
+
newPosition,
|
|
178
|
+
action
|
|
179
|
+
})
|
|
180
|
+
}));
|
|
193
181
|
}, [store, params.itemChildrenIndentation]);
|
|
194
182
|
(0, _useEnhancedEffect.default)(() => {
|
|
195
|
-
store.
|
|
196
|
-
|
|
197
|
-
isItemReorderable: params.itemsReordering ? params.isItemReorderable ?? (() => true) : () => false
|
|
198
|
-
})
|
|
183
|
+
store.set('itemsReordering', (0, _extends2.default)({}, store.state.itemsReordering, {
|
|
184
|
+
isItemReorderable: params.itemsReordering ? params.isItemReorderable ?? (() => true) : () => false
|
|
199
185
|
}));
|
|
200
186
|
}, [store, params.itemsReordering, params.isItemReorderable]);
|
|
201
187
|
return {
|