@mui/x-tree-view-pro 8.10.2 → 8.11.1

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.
Files changed (28) hide show
  1. package/CHANGELOG.md +214 -13
  2. package/RichTreeViewPro/RichTreeViewPro.js +14 -12
  3. package/RichTreeViewPro/RichTreeViewPro.types.d.ts +3 -2
  4. package/RichTreeViewPro/index.d.ts +2 -1
  5. package/esm/RichTreeViewPro/RichTreeViewPro.js +14 -12
  6. package/esm/RichTreeViewPro/RichTreeViewPro.types.d.ts +3 -2
  7. package/esm/RichTreeViewPro/index.d.ts +2 -1
  8. package/esm/index.js +1 -1
  9. package/esm/internals/plugins/useTreeViewItemsReordering/index.d.ts +2 -1
  10. package/esm/internals/plugins/useTreeViewItemsReordering/index.js +2 -1
  11. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +6 -5
  12. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +57 -71
  13. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +17 -433
  14. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -50
  15. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +2 -2
  16. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +82 -78
  17. package/esm/internals/plugins/useTreeViewLazyLoading/utils.js +3 -1
  18. package/index.js +1 -1
  19. package/internals/plugins/useTreeViewItemsReordering/index.d.ts +2 -1
  20. package/internals/plugins/useTreeViewItemsReordering/index.js +8 -1
  21. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.itemPlugin.js +4 -3
  22. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +55 -69
  23. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +17 -433
  24. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js +35 -50
  25. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js +1 -1
  26. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +81 -77
  27. package/internals/plugins/useTreeViewLazyLoading/utils.js +3 -1
  28. package/package.json +14 -13
@@ -1,50 +1,35 @@
1
- import { createSelector, selectorItemMetaLookup, selectorIsAnyItemBeingEdited } from '@mui/x-tree-view/internals';
2
- /**
3
- * Get the items reordering state.
4
- * @param {TreeViewState<[UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
5
- * @returns {TreeViewItemsReorderingState} The items reordering state.
6
- */
7
- const selectorItemsReordering = state => state.itemsReordering;
8
-
9
- /**
10
- * Get the properties of the current reordering.
11
- * @param {TreeViewState<[UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
12
- * @returns {TreeViewItemsReorderingState['currentReorder']} The properties of the current reordering.
13
- */
14
- export const selectorCurrentItemReordering = createSelector([selectorItemsReordering], itemsReordering => itemsReordering.currentReorder);
15
-
16
- /**
17
- * Get the properties of the dragged item.
18
- * @param {TreeViewState<[UseTreeViewItemsSignature, UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
19
- * @param {string} itemId The id of the item.
20
- * @returns {TreeViewItemDraggedItemProperties | null} The properties of the dragged item if the current item is being dragged, `null` otherwise.
21
- */
22
- export const selectorDraggedItemProperties = createSelector([selectorCurrentItemReordering, selectorItemMetaLookup, (_, itemId) => itemId], (currentReorder, itemMetaLookup, itemId) => {
23
- if (!currentReorder || currentReorder.targetItemId !== itemId || currentReorder.action == null) {
24
- return null;
25
- }
26
- const targetDepth = currentReorder.newPosition?.parentId == null ? 0 :
27
- // The depth is always defined because drag&drop is only usable with Rich Tree View components.
28
- itemMetaLookup[itemId].depth + 1;
29
- return {
30
- newPosition: currentReorder.newPosition,
31
- action: currentReorder.action,
32
- targetDepth
33
- };
34
- });
35
-
36
- /**
37
- * Check if the current item is a valid target for the dragged item.
38
- * @param {TreeViewState<[UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
39
- * @param {string} itemId The id of the item.
40
- * @returns {boolean} `true` if the current item is a valid target for the dragged item, `false` otherwise.
41
- */
42
- export const selectorIsItemValidReorderingTarget = createSelector([selectorCurrentItemReordering, (_, itemId) => itemId], (currentReorder, itemId) => currentReorder && currentReorder.draggedItemId !== itemId);
43
-
44
- /**
45
- * Check if the items can be reordered.
46
- * @param {TreeViewState<[UseTreeViewItemsReorderingSignature]>} state The state of the tree view.
47
- * @param {string} itemId The id of the item.
48
- * @returns {boolean} `true` if the items can be reordered, `false` otherwise.
49
- */
50
- export const selectorCanItemBeReordered = createSelector([selectorItemsReordering, selectorIsAnyItemBeingEdited, (_, itemId) => itemId], (itemsReordering, isEditing, itemId) => !isEditing && itemsReordering.isItemReorderable(itemId));
1
+ import { createSelector } from '@mui/x-internals/store';
2
+ import { itemsSelectors, labelSelectors } from '@mui/x-tree-view/internals';
3
+ export const itemsReorderingSelectors = {
4
+ /**
5
+ * Gets the properties of the current reordering.
6
+ */
7
+ currentReorder: createSelector(state => state.itemsReordering.currentReorder),
8
+ /**
9
+ * Gets the properties of the dragged item.
10
+ */
11
+ draggedItemProperties: createSelector(state => state.itemsReordering.currentReorder, itemsSelectors.itemMetaLookup, (currentReorder, itemMetaLookup, itemId) => {
12
+ if (!currentReorder || currentReorder.targetItemId !== itemId || currentReorder.action == null) {
13
+ return null;
14
+ }
15
+ const targetDepth = currentReorder.newPosition?.parentId == null ? 0 :
16
+ // The depth is always defined because drag&drop is only usable with Rich Tree View components.
17
+ itemMetaLookup[itemId].depth + 1;
18
+ return {
19
+ newPosition: currentReorder.newPosition,
20
+ action: currentReorder.action,
21
+ targetDepth
22
+ };
23
+ }),
24
+ /**
25
+ * Checks whether an item is a valid target for the dragged item.
26
+ */
27
+ isItemValidDropTarget: createSelector((state, itemId) => {
28
+ const draggedItemId = state.itemsReordering.currentReorder?.draggedItemId;
29
+ return draggedItemId != null && draggedItemId !== itemId;
30
+ }),
31
+ /**
32
+ * Checks whether an item can be reordered.
33
+ */
34
+ canItemBeReordered: createSelector(state => state.itemsReordering.isItemReorderable, labelSelectors.isAnyItemBeingEdited, (isItemReorderable, isEditing, itemId) => !isEditing && isItemReorderable(itemId))
35
+ };
@@ -1,10 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID, selectorItemMeta } from '@mui/x-tree-view/internals';
2
+ import { buildSiblingIndexes, TREE_VIEW_ROOT_PARENT_ID, itemsSelectors } from '@mui/x-tree-view/internals';
3
3
  /**
4
4
  * Checks if the item with the id itemIdB is an ancestor of the item with the id itemIdA.
5
5
  */
6
6
  export const isAncestor = (store, itemIdA, itemIdB) => {
7
- const itemMetaA = selectorItemMeta(store.value, itemIdA);
7
+ const itemMetaA = itemsSelectors.itemMeta(store.state, itemIdA);
8
8
  if (itemMetaA.parentId === itemIdB) {
9
9
  return true;
10
10
  }
@@ -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 { selectorItemMeta, selectorIsItemSelected, useInstanceEventHandler, selectorDataSourceState, selectorGetTreeItemError, selectorExpandedItems } from '@mui/x-tree-view/internals';
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.update(prevState => {
39
- if (!prevState.lazyLoading.dataSource.loading[itemId] && !isLoading) {
40
- return prevState;
41
- }
42
- const loading = _extends({}, prevState.lazyLoading.dataSource.loading);
43
- if (isLoading === false) {
44
- delete loading[itemId];
45
- } else {
46
- loading[itemId] = isLoading;
47
- }
48
- return _extends({}, prevState, {
49
- lazyLoading: _extends({}, prevState.lazyLoading, {
50
- dataSource: _extends({}, prevState.lazyLoading.dataSource, {
51
- loading
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
- store.update(prevState => {
62
- const errors = _extends({}, prevState.lazyLoading.dataSource.errors);
63
- if (error === null && errors[itemId] !== undefined) {
64
- delete errors[itemId];
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
- return _extends({}, prevState, {
70
- lazyLoading: _extends({}, prevState.lazyLoading, {
71
- dataSource: _extends({}, prevState.lazyLoading.dataSource, {
72
- errors
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.update(prevState => _extends({}, prevState, {
83
- lazyLoading: _extends({}, prevState.lazyLoading, {
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 (selectorDataSourceState(store.value) !== INITIAL_STATE) {
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 id => {
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(id);
145
+ nestedDataManager.clearPendingRequest(itemId);
153
146
  return;
154
147
  }
155
- const parent = selectorItemMeta(store.value, id);
148
+ const parent = itemsSelectors.itemMeta(store.state, itemId);
156
149
  if (!parent) {
157
- nestedDataManager.clearPendingRequest(id);
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(id, true);
156
+ instance.setDataSourceLoading(itemId, true);
164
157
 
165
158
  // handle caching here
166
- const cachedData = cacheRef.current.get(id);
167
- if (cachedData !== undefined && cachedData !== -1) {
168
- nestedDataManager.setRequestSettled(id);
169
- instance.addItems({
170
- items: cachedData,
171
- depth,
172
- parentId: id,
173
- getChildrenCount
174
- });
175
- instance.setDataSourceLoading(id, false);
176
- return;
177
- }
178
- if (cachedData === -1) {
179
- instance.removeChildren(id);
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
- const existingError = selectorGetTreeItemError(store.value, id) ?? null;
182
- if (existingError) {
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(id);
187
- nestedDataManager.setRequestSettled(id);
180
+ const getTreeItemsResponse = await getTreeItems(itemId);
181
+ nestedDataManager.setRequestSettled(itemId);
188
182
 
189
183
  // set caching
190
- cacheRef.current.set(id, getTreeItemsResponse);
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: id,
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(id, childrenFetchError);
202
- instance.removeChildren(id);
198
+ instance.setDataSourceError(itemId, childrenFetchError);
199
+ instance.removeChildren(itemId);
203
200
  } finally {
204
201
  // unset loading
205
- instance.setDataSourceLoading(id, false);
206
- nestedDataManager.setRequestSettled(id);
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 fetchErrors = Boolean(selectorGetTreeItemError(store.value, eventParameters.itemId));
218
- if (!fetchErrors) {
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 (selectorIsItemSelected(store.value, eventParameters.itemId)) {
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.update(prevState => _extends({}, prevState, {
238
- lazyLoading: _extends({}, prevState.lazyLoading, {
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 = selectorExpandedItems(store.value);
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(id));
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,5 +1,5 @@
1
1
  /**
2
- * @mui/x-tree-view-pro v8.10.2
2
+ * @mui/x-tree-view-pro v8.11.1
3
3
  *
4
4
  * @license SEE LICENSE IN LICENSE
5
5
  * This source code is licensed under the SEE LICENSE IN LICENSE license found in the
@@ -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");
@@ -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, _internals.useSelector)(store, _useTreeViewItemsReordering.selectorDraggedItemProperties, itemId);
25
- const canItemBeReordered = (0, _internals.useSelector)(store, _useTreeViewItemsReordering.selectorCanItemBeReordered, itemId);
26
- const isValidTarget = (0, _internals.useSelector)(store, _useTreeViewItemsReordering.selectorIsItemValidReorderingTarget, itemId);
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 = (0, _useTreeViewItemsReordering3.selectorCurrentItemReordering)(store.value);
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 = (0, _internals.selectorItemMeta)(store.value, itemId);
40
- const targetItemIndex = (0, _internals.selectorItemIndex)(store.value, targetItemMeta.id);
41
- const draggedItemMeta = (0, _internals.selectorItemMeta)(store.value, currentReorder.draggedItemId);
42
- const draggedItemIndex = (0, _internals.selectorItemIndex)(store.value, draggedItemMeta.id);
43
- const isTargetLastSibling = targetItemIndex === (0, _internals.selectorItemOrderedChildrenIds)(store.value, targetItemMeta.parentId).length - 1;
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: (0, _internals.selectorItemOrderedChildrenIds)(store.value, targetItemMeta.parentId).length
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.update(prevState => {
93
- const isItemBeingEditing = (0, _internals.selectorIsItemBeingEdited)(prevState, itemId);
94
- if (isItemBeingEditing) {
95
- return prevState;
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
- return (0, _extends2.default)({}, prevState, {
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 = (0, _useTreeViewItemsReordering3.selectorCurrentItemReordering)(store.value);
106
+ const currentReorder = _useTreeViewItemsReordering3.itemsReorderingSelectors.currentReorder(store.state);
111
107
  if (currentReorder == null) {
112
108
  return;
113
109
  }
114
- store.update(prevState => (0, _extends2.default)({}, prevState, {
115
- itemsReordering: (0, _extends2.default)({}, prevState.itemsReordering, {
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 = (0, _useTreeViewItemsReordering3.selectorCurrentItemReordering)(store.value);
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.update(prevState => (0, _extends2.default)({}, prevState, {
127
- itemsReordering: (0, _extends2.default)({}, prevState.itemsReordering, {
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 = (0, _internals.selectorItemMeta)(store.value, currentReorder.draggedItemId);
125
+ const draggedItemMeta = _internals.itemsSelectors.itemMeta(store.state, currentReorder.draggedItemId);
134
126
  const oldPosition = {
135
127
  parentId: draggedItemMeta.parentId,
136
- index: (0, _internals.selectorItemIndex)(store.value, draggedItemMeta.id)
128
+ index: _internals.itemsSelectors.itemIndex(store.state, draggedItemMeta.id)
137
129
  };
138
130
  const newPosition = currentReorder.newPosition;
139
- store.update(prevState => (0, _extends2.default)({}, prevState, {
140
- itemsReordering: (0, _extends2.default)({}, prevState.itemsReordering, {
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: prevState.items
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.update(prevState => {
166
- const prevItemReorder = prevState.itemsReordering.currentReorder;
167
- if (prevItemReorder == null || (0, _useTreeViewItemsReordering.isAncestor)(store, itemId, prevItemReorder.draggedItemId)) {
168
- return prevState;
169
- }
170
- const action = (0, _useTreeViewItemsReordering.chooseActionToApply)({
171
- itemChildrenIndentation: params.itemChildrenIndentation,
172
- validActions,
173
- targetHeight,
174
- targetDepth: prevState.items.itemMetaLookup[itemId].depth,
175
- cursorY,
176
- cursorX,
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.update(prevState => (0, _extends2.default)({}, prevState, {
196
- itemsReordering: (0, _extends2.default)({}, prevState.itemsReordering, {
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 {