@mui/x-tree-view-pro 8.23.0 → 8.24.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +111 -1
  2. package/RichTreeViewPro/RichTreeViewPro.js +32 -29
  3. package/RichTreeViewPro/RichTreeViewPro.types.d.ts +6 -5
  4. package/RichTreeViewPro/index.d.ts +1 -2
  5. package/RichTreeViewPro/useExtractRichTreeViewProParameters.d.ts +294 -0
  6. package/RichTreeViewPro/useExtractRichTreeViewProParameters.js +107 -0
  7. package/esm/RichTreeViewPro/RichTreeViewPro.js +32 -29
  8. package/esm/RichTreeViewPro/RichTreeViewPro.types.d.ts +6 -5
  9. package/esm/RichTreeViewPro/index.d.ts +1 -2
  10. package/esm/RichTreeViewPro/useExtractRichTreeViewProParameters.d.ts +294 -0
  11. package/esm/RichTreeViewPro/useExtractRichTreeViewProParameters.js +99 -0
  12. package/esm/hooks/useRichTreeViewProApiRef.d.ts +2 -2
  13. package/esm/index.d.ts +0 -1
  14. package/esm/index.js +1 -2
  15. package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.d.ts +49 -0
  16. package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.js +15 -0
  17. package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.types.d.ts +69 -0
  18. package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.utils.d.ts +3 -0
  19. package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.utils.js +18 -0
  20. package/esm/internals/RichTreeViewProStore/index.d.ts +2 -0
  21. package/esm/internals/RichTreeViewProStore/index.js +2 -0
  22. package/esm/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.d.ts +53 -0
  23. package/esm/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.js +180 -0
  24. package/esm/internals/plugins/itemsReordering/index.d.ts +3 -0
  25. package/esm/internals/plugins/itemsReordering/index.js +3 -0
  26. package/esm/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.js +6 -7
  27. package/esm/internals/plugins/itemsReordering/selectors.d.ts +29 -0
  28. package/esm/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js → itemsReordering/selectors.js} +4 -4
  29. package/esm/internals/plugins/itemsReordering/types.d.ts +6 -0
  30. package/{internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts → esm/internals/plugins/itemsReordering/utils.d.ts} +7 -7
  31. package/esm/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js → itemsReordering/utils.js} +2 -2
  32. package/esm/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.d.ts +51 -0
  33. package/esm/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.js +230 -0
  34. package/esm/internals/plugins/lazyLoading/index.d.ts +2 -0
  35. package/esm/internals/plugins/lazyLoading/index.js +2 -0
  36. package/esm/internals/plugins/lazyLoading/types.d.ts +21 -0
  37. package/esm/internals/plugins/lazyLoading/types.js +1 -0
  38. package/{internals/plugins/useTreeViewLazyLoading → esm/internals/plugins/lazyLoading}/utils.d.ts +3 -7
  39. package/esm/internals/plugins/{useTreeViewLazyLoading → lazyLoading}/utils.js +3 -11
  40. package/hooks/useRichTreeViewProApiRef.d.ts +2 -2
  41. package/index.d.ts +0 -1
  42. package/index.js +1 -23
  43. package/internals/RichTreeViewProStore/RichTreeViewProStore.d.ts +49 -0
  44. package/internals/RichTreeViewProStore/RichTreeViewProStore.js +23 -0
  45. package/internals/RichTreeViewProStore/RichTreeViewProStore.types.d.ts +69 -0
  46. package/internals/RichTreeViewProStore/RichTreeViewProStore.utils.d.ts +3 -0
  47. package/internals/RichTreeViewProStore/RichTreeViewProStore.utils.js +25 -0
  48. package/internals/RichTreeViewProStore/index.d.ts +2 -0
  49. package/internals/RichTreeViewProStore/index.js +27 -0
  50. package/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.d.ts +53 -0
  51. package/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.js +188 -0
  52. package/internals/plugins/itemsReordering/index.d.ts +3 -0
  53. package/internals/plugins/itemsReordering/index.js +27 -0
  54. package/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.js +9 -10
  55. package/internals/plugins/itemsReordering/selectors.d.ts +29 -0
  56. package/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js → itemsReordering/selectors.js} +4 -4
  57. package/internals/plugins/itemsReordering/types.d.ts +6 -0
  58. package/{esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts → internals/plugins/itemsReordering/utils.d.ts} +7 -7
  59. package/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js → itemsReordering/utils.js} +2 -2
  60. package/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.d.ts +51 -0
  61. package/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.js +238 -0
  62. package/internals/plugins/lazyLoading/index.d.ts +2 -0
  63. package/internals/plugins/lazyLoading/index.js +27 -0
  64. package/internals/plugins/lazyLoading/types.d.ts +21 -0
  65. package/internals/plugins/lazyLoading/types.js +5 -0
  66. package/{esm/internals/plugins/useTreeViewLazyLoading → internals/plugins/lazyLoading}/utils.d.ts +3 -7
  67. package/internals/plugins/{useTreeViewLazyLoading → lazyLoading}/utils.js +3 -9
  68. package/package.json +4 -4
  69. package/RichTreeViewPro/RichTreeViewPro.plugins.d.ts +0 -5
  70. package/RichTreeViewPro/RichTreeViewPro.plugins.js +0 -12
  71. package/esm/RichTreeViewPro/RichTreeViewPro.plugins.d.ts +0 -5
  72. package/esm/RichTreeViewPro/RichTreeViewPro.plugins.js +0 -6
  73. package/esm/internals/index.d.ts +0 -1
  74. package/esm/internals/plugins/useTreeViewItemsReordering/index.d.ts +0 -3
  75. package/esm/internals/plugins/useTreeViewItemsReordering/index.js +0 -2
  76. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.d.ts +0 -3
  77. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +0 -196
  78. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +0 -30
  79. package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +0 -107
  80. package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -1
  81. package/esm/internals/plugins/useTreeViewLazyLoading/index.js +0 -1
  82. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.d.ts +0 -2
  83. package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +0 -251
  84. package/internals/index.d.ts +0 -1
  85. package/internals/plugins/useTreeViewItemsReordering/index.d.ts +0 -3
  86. package/internals/plugins/useTreeViewItemsReordering/index.js +0 -19
  87. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.d.ts +0 -3
  88. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +0 -205
  89. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +0 -30
  90. package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +0 -107
  91. package/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -1
  92. package/internals/plugins/useTreeViewLazyLoading/index.js +0 -12
  93. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.d.ts +0 -2
  94. package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +0 -259
  95. /package/esm/internals/{index.js → RichTreeViewProStore/RichTreeViewProStore.types.js} +0 -0
  96. /package/esm/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.d.ts +0 -0
  97. /package/esm/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.types.js → itemsReordering/types.js} +0 -0
  98. /package/internals/{index.js → RichTreeViewProStore/RichTreeViewProStore.types.js} +0 -0
  99. /package/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.d.ts +0 -0
  100. /package/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.types.js → itemsReordering/types.js} +0 -0
@@ -0,0 +1,69 @@
1
+ import { RichTreeViewStoreParameters, RichTreeViewState } from '@mui/x-tree-view/internals';
2
+ import { TreeViewItemId, TreeViewItemsReorderingAction, TreeViewValidItem } from '@mui/x-tree-view/models';
3
+ import { DataSourceCache } from '@mui/x-tree-view/utils';
4
+ import { TreeViewItemReorderPosition } from "../plugins/itemsReordering/index.js";
5
+ import { DataSource } from "../plugins/lazyLoading/index.js";
6
+ export interface RichTreeViewProState<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> extends RichTreeViewState<R, Multiple> {
7
+ /**
8
+ * Determine if a given item can be reordered.
9
+ * @param {TreeViewItemId} itemId The id of the item to check.
10
+ * @returns {boolean} `true` if the item can be reordered.
11
+ */
12
+ isItemReorderable: (itemId: TreeViewItemId) => boolean;
13
+ /**
14
+ * The current ongoing reordering operation.
15
+ */
16
+ currentReorder: {
17
+ draggedItemId: TreeViewItemId;
18
+ targetItemId: TreeViewItemId;
19
+ newPosition: TreeViewItemReorderPosition | null;
20
+ action: TreeViewItemsReorderingAction | null;
21
+ } | null;
22
+ }
23
+ export interface RichTreeViewProStoreParameters<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> extends RichTreeViewStoreParameters<R, Multiple> {
24
+ /**
25
+ * The data source object.
26
+ */
27
+ dataSource?: DataSource<R>;
28
+ /**
29
+ * The data source cache object.
30
+ */
31
+ dataSourceCache?: DataSourceCache;
32
+ /**
33
+ * If `true`, the reordering of items is enabled.
34
+ * @default false
35
+ */
36
+ itemsReordering?: boolean;
37
+ /**
38
+ * Determine if a given item can be reordered.
39
+ * @param {TreeViewItemId} itemId The id of the item to check.
40
+ * @returns {boolean} `true` if the item can be reordered.
41
+ * @default () => true
42
+ */
43
+ isItemReorderable?: (itemId: TreeViewItemId) => boolean;
44
+ /**
45
+ * Used to determine if a given item can move to some new position.
46
+ * @param {object} parameters The params describing the item re-ordering.
47
+ * @param {TreeViewItemId} parameters.itemId The id of the item that is being moved to a new position.
48
+ * @param {TreeViewItemReorderPosition} parameters.oldPosition The old position of the item.
49
+ * @param {TreeViewItemReorderPosition} parameters.newPosition The new position of the item.
50
+ * @returns {boolean} `true` if the item can move to the new position.
51
+ */
52
+ canMoveItemToNewPosition?: (parameters: {
53
+ itemId: TreeViewItemId;
54
+ oldPosition: TreeViewItemReorderPosition;
55
+ newPosition: TreeViewItemReorderPosition;
56
+ }) => boolean;
57
+ /**
58
+ * Callback fired when a Tree Item is moved in the tree.
59
+ * @param {object} parameters The params describing the item re-ordering.
60
+ * @param {TreeViewItemId} parameters.itemId The id of the item moved.
61
+ * @param {TreeViewItemReorderPosition} parameters.oldPosition The old position of the item.
62
+ * @param {TreeViewItemReorderPosition} parameters.newPosition The new position of the item.
63
+ */
64
+ onItemPositionChange?: (parameters: {
65
+ itemId: TreeViewItemId;
66
+ oldPosition: TreeViewItemReorderPosition;
67
+ newPosition: TreeViewItemReorderPosition;
68
+ }) => void;
69
+ }
@@ -0,0 +1,3 @@
1
+ import { TreeViewParametersToStateMapper } from '@mui/x-tree-view/internals';
2
+ import { RichTreeViewProStoreParameters, RichTreeViewProState } from "./RichTreeViewProStore.types.js";
3
+ export declare const parametersToStateMapper: TreeViewParametersToStateMapper<any, any, RichTreeViewProState<any, any>, RichTreeViewProStoreParameters<any, any>>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.parametersToStateMapper = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _internals = require("@mui/x-tree-view/internals");
10
+ var _lazyLoading = require("../plugins/lazyLoading");
11
+ const DEFAULT_IS_ITEM_REORDERABLE_WHEN_ENABLED = () => true;
12
+ const DEFAULT_IS_ITEM_REORDERABLE_WHEN_DISABLED = () => false;
13
+ const deriveStateFromParameters = parameters => ({
14
+ lazyLoadedItems: parameters.dataSource ? _lazyLoading.TREE_VIEW_LAZY_LOADED_ITEMS_INITIAL_STATE : null,
15
+ currentReorder: null,
16
+ isItemReorderable: parameters.itemsReordering ? parameters.isItemReorderable ?? DEFAULT_IS_ITEM_REORDERABLE_WHEN_ENABLED : DEFAULT_IS_ITEM_REORDERABLE_WHEN_DISABLED
17
+ });
18
+ const parametersToStateMapper = exports.parametersToStateMapper = {
19
+ getInitialState: (minimalInitialState, parameters) => (0, _extends2.default)({}, _internals.ExtendableRichTreeViewStore.rawMapper.getInitialState(minimalInitialState, parameters), deriveStateFromParameters(parameters)),
20
+ updateStateFromParameters: (newMinimalState, parameters, updateModel) => {
21
+ const newState = (0, _extends2.default)({}, _internals.ExtendableRichTreeViewStore.rawMapper.updateStateFromParameters(newMinimalState, parameters, updateModel), deriveStateFromParameters(parameters));
22
+ return newState;
23
+ },
24
+ shouldIgnoreItemsStateUpdate: parameters => !!parameters.dataSource
25
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./RichTreeViewProStore.js";
2
+ export * from "./RichTreeViewProStore.types.js";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _RichTreeViewProStore = require("./RichTreeViewProStore");
7
+ Object.keys(_RichTreeViewProStore).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _RichTreeViewProStore[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _RichTreeViewProStore[key];
14
+ }
15
+ });
16
+ });
17
+ var _RichTreeViewProStore2 = require("./RichTreeViewProStore.types");
18
+ Object.keys(_RichTreeViewProStore2).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _RichTreeViewProStore2[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _RichTreeViewProStore2[key];
25
+ }
26
+ });
27
+ });
@@ -0,0 +1,53 @@
1
+ import { TreeViewItemId } from '@mui/x-tree-view/models';
2
+ import { TreeViewItemItemReorderingValidActions } from "./types.js";
3
+ import { RichTreeViewProStore } from "../../RichTreeViewProStore/RichTreeViewProStore.js";
4
+ export declare class TreeViewItemsReorderingPlugin {
5
+ private store;
6
+ constructor(store: RichTreeViewProStore<any, any>);
7
+ /**
8
+ * Get the valid reordering action if a given item is the target of the ongoing reordering.
9
+ * @param {TreeViewItemId} itemId The id of the item to get the action of.
10
+ * @returns {TreeViewItemItemReorderingValidActions} The valid actions for the item.
11
+ */
12
+ getDroppingTargetValidActions: (itemId: string) => TreeViewItemItemReorderingValidActions;
13
+ /**
14
+ * Start a reordering for the given item.
15
+ * @param {TreeViewItemId} itemId The id of the item to start the reordering for.
16
+ */
17
+ startDraggingItem: (itemId: string) => void;
18
+ /**
19
+ * Cancel the current reordering operation and reset the state.
20
+ */
21
+ cancelDraggingItem: () => void;
22
+ /**
23
+ * Complete the reordering of a given item.
24
+ * @param {TreeViewItemId} itemId The id of the item to complete the reordering for.
25
+ */
26
+ completeDraggingItem: (itemId: string) => void;
27
+ /**
28
+ * Set the new target item for the ongoing reordering.
29
+ * The action will be determined based on the position of the cursor inside the target and the valid actions for this target.
30
+ * @param {object} params The params describing the new target item.
31
+ * @param {TreeViewItemId} params.itemId The id of the new target item.
32
+ * @param {TreeViewItemItemReorderingValidActions} params.validActions The valid actions for the new target item.
33
+ * @param {number} params.targetHeight The height of the target item.
34
+ * @param {number} params.cursorY The Y coordinate of the mouse cursor.
35
+ * @param {number} params.cursorX The X coordinate of the mouse cursor.
36
+ * @param {HTMLDivElement} params.contentElement The DOM element rendered for the content slot.
37
+ */
38
+ setDragTargetItem: ({
39
+ itemId,
40
+ validActions,
41
+ targetHeight,
42
+ cursorY,
43
+ cursorX,
44
+ contentElement
45
+ }: {
46
+ itemId: TreeViewItemId;
47
+ validActions: TreeViewItemItemReorderingValidActions;
48
+ targetHeight: number;
49
+ cursorY: number;
50
+ cursorX: number;
51
+ contentElement: HTMLDivElement;
52
+ }) => void;
53
+ }
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TreeViewItemsReorderingPlugin = void 0;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _internals = require("@mui/x-tree-view/internals");
10
+ var _selectors = require("./selectors");
11
+ var _utils = require("./utils");
12
+ var _itemPlugin = require("./itemPlugin");
13
+ class TreeViewItemsReorderingPlugin {
14
+ constructor(store) {
15
+ this.store = store;
16
+ store.itemPluginManager.register(_itemPlugin.useTreeViewItemsReorderingItemPlugin, null);
17
+ }
18
+
19
+ /**
20
+ * Get the valid reordering action if a given item is the target of the ongoing reordering.
21
+ * @param {TreeViewItemId} itemId The id of the item to get the action of.
22
+ * @returns {TreeViewItemItemReorderingValidActions} The valid actions for the item.
23
+ */
24
+ getDroppingTargetValidActions = itemId => {
25
+ const currentReorder = _selectors.itemsReorderingSelectors.currentReorder(this.store.state);
26
+ if (!currentReorder) {
27
+ throw new Error('There is no ongoing reordering.');
28
+ }
29
+ if (itemId === currentReorder.draggedItemId) {
30
+ return {};
31
+ }
32
+ const canMoveItemToNewPosition = this.store.parameters.canMoveItemToNewPosition;
33
+ const targetItemMeta = _internals.itemsSelectors.itemMeta(this.store.state, itemId);
34
+ const targetItemIndex = _internals.itemsSelectors.itemIndex(this.store.state, targetItemMeta.id);
35
+ const draggedItemMeta = _internals.itemsSelectors.itemMeta(this.store.state, currentReorder.draggedItemId);
36
+ const draggedItemIndex = _internals.itemsSelectors.itemIndex(this.store.state, draggedItemMeta.id);
37
+ const isTargetLastSibling = targetItemIndex === _internals.itemsSelectors.itemOrderedChildrenIds(this.store.state, targetItemMeta.parentId).length - 1;
38
+ const oldPosition = {
39
+ parentId: draggedItemMeta.parentId,
40
+ index: draggedItemIndex
41
+ };
42
+ const checkIfPositionIsValid = positionAfterAction => {
43
+ let isValid;
44
+ // If the new position is equal to the old one, we don't want to show any dropping UI.
45
+ if (positionAfterAction.parentId === oldPosition.parentId && positionAfterAction.index === oldPosition.index) {
46
+ isValid = false;
47
+ } else if (canMoveItemToNewPosition) {
48
+ isValid = canMoveItemToNewPosition({
49
+ itemId: currentReorder.draggedItemId,
50
+ oldPosition,
51
+ newPosition: positionAfterAction
52
+ });
53
+ } else {
54
+ isValid = true;
55
+ }
56
+ return isValid;
57
+ };
58
+ const positionsAfterAction = {
59
+ 'make-child': {
60
+ parentId: targetItemMeta.id,
61
+ index: 0
62
+ },
63
+ 'reorder-above': {
64
+ parentId: targetItemMeta.parentId,
65
+ index: targetItemMeta.parentId === draggedItemMeta.parentId && targetItemIndex > draggedItemIndex ? targetItemIndex - 1 : targetItemIndex
66
+ },
67
+ 'reorder-below': !targetItemMeta.expandable || isTargetLastSibling ? {
68
+ parentId: targetItemMeta.parentId,
69
+ index: targetItemMeta.parentId === draggedItemMeta.parentId && targetItemIndex > draggedItemIndex ? targetItemIndex : targetItemIndex + 1
70
+ } : null,
71
+ 'move-to-parent': targetItemMeta.parentId == null ? null : {
72
+ parentId: targetItemMeta.parentId,
73
+ index: _internals.itemsSelectors.itemOrderedChildrenIds(this.store.state, targetItemMeta.parentId).length
74
+ }
75
+ };
76
+ const validActions = {};
77
+ Object.keys(positionsAfterAction).forEach(action => {
78
+ const positionAfterAction = positionsAfterAction[action];
79
+ if (positionAfterAction != null && checkIfPositionIsValid(positionAfterAction)) {
80
+ validActions[action] = positionAfterAction;
81
+ }
82
+ });
83
+ return validActions;
84
+ };
85
+
86
+ /**
87
+ * Start a reordering for the given item.
88
+ * @param {TreeViewItemId} itemId The id of the item to start the reordering for.
89
+ */
90
+ startDraggingItem = itemId => {
91
+ const isItemBeingEdited = _internals.labelSelectors.isItemBeingEdited(this.store.state, itemId);
92
+ if (isItemBeingEdited) {
93
+ return;
94
+ }
95
+ this.store.set('currentReorder', {
96
+ targetItemId: itemId,
97
+ draggedItemId: itemId,
98
+ action: null,
99
+ newPosition: null
100
+ });
101
+ };
102
+
103
+ /**
104
+ * Cancel the current reordering operation and reset the state.
105
+ */
106
+ cancelDraggingItem = () => {
107
+ this.store.set('currentReorder', null);
108
+ };
109
+
110
+ /**
111
+ * Complete the reordering of a given item.
112
+ * @param {TreeViewItemId} itemId The id of the item to complete the reordering for.
113
+ */
114
+ completeDraggingItem = itemId => {
115
+ const currentReorder = _selectors.itemsReorderingSelectors.currentReorder(this.store.state);
116
+ if (currentReorder == null || currentReorder.draggedItemId !== itemId) {
117
+ return;
118
+ }
119
+ if (currentReorder.draggedItemId === currentReorder.targetItemId || currentReorder.action == null || currentReorder.newPosition == null) {
120
+ this.cancelDraggingItem();
121
+ return;
122
+ }
123
+ const draggedItemMeta = _internals.itemsSelectors.itemMeta(this.store.state, currentReorder.draggedItemId);
124
+ const oldPosition = {
125
+ parentId: draggedItemMeta.parentId,
126
+ index: _internals.itemsSelectors.itemIndex(this.store.state, draggedItemMeta.id)
127
+ };
128
+ const newPosition = currentReorder.newPosition;
129
+ this.store.update((0, _extends2.default)({
130
+ currentReorder: null
131
+ }, (0, _utils.moveItemInTree)({
132
+ itemToMoveId: itemId,
133
+ newPosition,
134
+ oldPosition,
135
+ prevState: this.store.state
136
+ })));
137
+ const onItemPositionChange = this.store.parameters.onItemPositionChange;
138
+ onItemPositionChange?.({
139
+ itemId,
140
+ newPosition,
141
+ oldPosition
142
+ });
143
+ };
144
+
145
+ /**
146
+ * Set the new target item for the ongoing reordering.
147
+ * The action will be determined based on the position of the cursor inside the target and the valid actions for this target.
148
+ * @param {object} params The params describing the new target item.
149
+ * @param {TreeViewItemId} params.itemId The id of the new target item.
150
+ * @param {TreeViewItemItemReorderingValidActions} params.validActions The valid actions for the new target item.
151
+ * @param {number} params.targetHeight The height of the target item.
152
+ * @param {number} params.cursorY The Y coordinate of the mouse cursor.
153
+ * @param {number} params.cursorX The X coordinate of the mouse cursor.
154
+ * @param {HTMLDivElement} params.contentElement The DOM element rendered for the content slot.
155
+ */
156
+ setDragTargetItem = ({
157
+ itemId,
158
+ validActions,
159
+ targetHeight,
160
+ cursorY,
161
+ cursorX,
162
+ contentElement
163
+ }) => {
164
+ const prevItemReorder = this.store.state.currentReorder;
165
+ if (prevItemReorder == null || (0, _utils.isAncestor)(this.store, itemId, prevItemReorder.draggedItemId)) {
166
+ return;
167
+ }
168
+ const action = (0, _utils.chooseActionToApply)({
169
+ itemChildrenIndentation: this.store.state.itemChildrenIndentation,
170
+ validActions,
171
+ targetHeight,
172
+ targetDepth: this.store.state.itemMetaLookup[itemId].depth,
173
+ cursorY,
174
+ cursorX,
175
+ contentElement
176
+ });
177
+ const newPosition = action == null ? null : validActions[action];
178
+ if (prevItemReorder.targetItemId === itemId && prevItemReorder.action === action && prevItemReorder.newPosition?.parentId === newPosition?.parentId && prevItemReorder.newPosition?.index === newPosition?.index) {
179
+ return;
180
+ }
181
+ this.store.set('currentReorder', (0, _extends2.default)({}, prevItemReorder, {
182
+ targetItemId: itemId,
183
+ newPosition,
184
+ action
185
+ }));
186
+ };
187
+ }
188
+ exports.TreeViewItemsReorderingPlugin = TreeViewItemsReorderingPlugin;
@@ -0,0 +1,3 @@
1
+ export * from "./TreeViewItemsReorderingPlugin.js";
2
+ export * from "./selectors.js";
3
+ export type { TreeViewItemReorderPosition } from "./types.js";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _TreeViewItemsReorderingPlugin = require("./TreeViewItemsReorderingPlugin");
7
+ Object.keys(_TreeViewItemsReorderingPlugin).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _TreeViewItemsReorderingPlugin[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _TreeViewItemsReorderingPlugin[key];
14
+ }
15
+ });
16
+ });
17
+ var _selectors = require("./selectors");
18
+ Object.keys(_selectors).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _selectors[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _selectors[key];
25
+ }
26
+ });
27
+ });
@@ -8,23 +8,22 @@ exports.useTreeViewItemsReorderingItemPlugin = exports.isAndroid = void 0;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _store = require("@mui/x-internals/store");
10
10
  var _internals = require("@mui/x-tree-view/internals");
11
- var _useTreeViewItemsReordering = require("./useTreeViewItemsReordering.selectors");
11
+ var _selectors = require("./selectors");
12
12
  const isAndroid = () => navigator.userAgent.toLowerCase().includes('android');
13
13
  exports.isAndroid = isAndroid;
14
14
  const useTreeViewItemsReorderingItemPlugin = ({
15
15
  props
16
16
  }) => {
17
17
  const {
18
- instance,
19
18
  store
20
19
  } = (0, _internals.useTreeViewContext)();
21
20
  const {
22
21
  itemId
23
22
  } = props;
24
23
  const validActionsRef = React.useRef(null);
25
- const draggedItemProperties = (0, _store.useStore)(store, _useTreeViewItemsReordering.itemsReorderingSelectors.draggedItemProperties, itemId);
26
- const canItemBeReordered = (0, _store.useStore)(store, _useTreeViewItemsReordering.itemsReorderingSelectors.canItemBeReordered, itemId);
27
- const isDragging = (0, _store.useStore)(store, _useTreeViewItemsReordering.itemsReorderingSelectors.isDragging, itemId);
24
+ const draggedItemProperties = (0, _store.useStore)(store, _selectors.itemsReorderingSelectors.draggedItemProperties, itemId);
25
+ const canItemBeReordered = (0, _store.useStore)(store, _selectors.itemsReorderingSelectors.canItemBeReordered, itemId);
26
+ const isDragging = (0, _store.useStore)(store, _selectors.itemsReorderingSelectors.isDragging, itemId);
28
27
  return {
29
28
  propsEnhancers: {
30
29
  root: ({
@@ -57,7 +56,7 @@ const useTreeViewItemsReorderingItemPlugin = ({
57
56
 
58
57
  // iOS requires a media type to be defined
59
58
  event.dataTransfer.setData('application/mui-x', '');
60
- instance.startDraggingItem(itemId);
59
+ store.itemsReordering.startDraggingItem(itemId);
61
60
  };
62
61
  const handleRootDragOver = event => {
63
62
  externalEventHandlers.onDragOver?.(event);
@@ -74,10 +73,10 @@ const useTreeViewItemsReorderingItemPlugin = ({
74
73
 
75
74
  // Check if the drag-and-drop was cancelled, possibly by pressing Escape
76
75
  if (event.dataTransfer.dropEffect === 'none') {
77
- instance.cancelDraggingItem();
76
+ store.itemsReordering.cancelDraggingItem();
78
77
  return;
79
78
  }
80
- instance.completeDraggingItem(itemId);
79
+ store.itemsReordering.completeDraggingItem(itemId);
81
80
  };
82
81
  return {
83
82
  draggable: canItemBeReordered ? true : undefined,
@@ -101,7 +100,7 @@ const useTreeViewItemsReorderingItemPlugin = ({
101
100
  const rect = contentRefObject.current.getBoundingClientRect();
102
101
  const y = event.clientY - rect.top;
103
102
  const x = event.clientX - rect.left;
104
- instance.setDragTargetItem({
103
+ store.itemsReordering.setDragTargetItem({
105
104
  itemId,
106
105
  validActions: validActionsRef.current,
107
106
  targetHeight: rect.height,
@@ -115,7 +114,7 @@ const useTreeViewItemsReorderingItemPlugin = ({
115
114
  if (event.defaultMuiPrevented) {
116
115
  return;
117
116
  }
118
- validActionsRef.current = instance.getDroppingTargetValidActions(itemId);
117
+ validActionsRef.current = store.itemsReordering.getDroppingTargetValidActions(itemId);
119
118
  };
120
119
  return {
121
120
  onDragEnter: handleDragEnter,
@@ -0,0 +1,29 @@
1
+ import { TreeViewItemId } from '@mui/x-tree-view/models';
2
+ import { RichTreeViewProState } from "../../RichTreeViewProStore/index.js";
3
+ export declare const itemsReorderingSelectors: {
4
+ /**
5
+ * Gets the properties of the current reordering.
6
+ */
7
+ currentReorder: (state: RichTreeViewProState<any, any>) => {
8
+ draggedItemId: TreeViewItemId;
9
+ targetItemId: TreeViewItemId;
10
+ newPosition: import("./types.js").TreeViewItemReorderPosition | null;
11
+ action: import("@mui/x-tree-view").TreeViewItemsReorderingAction | null;
12
+ } | null;
13
+ /**
14
+ * Gets the properties of the dragged item.
15
+ */
16
+ draggedItemProperties: (args_0: RichTreeViewProState<any, any>, itemId: string) => {
17
+ newPosition: import("./types.js").TreeViewItemReorderPosition | null;
18
+ action: import("@mui/x-tree-view").TreeViewItemsReorderingAction;
19
+ targetDepth: number;
20
+ } | null;
21
+ /**
22
+ * Checks whether an item is being dragged.
23
+ */
24
+ isDragging: (state: RichTreeViewProState<any, any>) => boolean;
25
+ /**
26
+ * Checks whether an item can be reordered.
27
+ */
28
+ canItemBeReordered: (args_0: RichTreeViewProState<any, any>, itemId: string) => boolean;
29
+ };
@@ -10,11 +10,11 @@ const itemsReorderingSelectors = exports.itemsReorderingSelectors = {
10
10
  /**
11
11
  * Gets the properties of the current reordering.
12
12
  */
13
- currentReorder: (0, _store.createSelector)(state => state.itemsReordering.currentReorder),
13
+ currentReorder: (0, _store.createSelector)(state => state.currentReorder),
14
14
  /**
15
15
  * Gets the properties of the dragged item.
16
16
  */
17
- draggedItemProperties: (0, _store.createSelectorMemoized)(state => state.itemsReordering.currentReorder, _internals.itemsSelectors.itemMetaLookup, (currentReorder, itemMetaLookup, itemId) => {
17
+ draggedItemProperties: (0, _store.createSelectorMemoized)(state => state.currentReorder, _internals.itemsSelectors.itemMetaLookup, (currentReorder, itemMetaLookup, itemId) => {
18
18
  if (!currentReorder || currentReorder.targetItemId !== itemId || currentReorder.action == null) {
19
19
  return null;
20
20
  }
@@ -30,9 +30,9 @@ const itemsReorderingSelectors = exports.itemsReorderingSelectors = {
30
30
  /**
31
31
  * Checks whether an item is being dragged.
32
32
  */
33
- isDragging: (0, _store.createSelector)(state => !!state.itemsReordering.currentReorder?.draggedItemId),
33
+ isDragging: (0, _store.createSelector)(state => !!state.currentReorder?.draggedItemId),
34
34
  /**
35
35
  * Checks whether an item can be reordered.
36
36
  */
37
- canItemBeReordered: (0, _store.createSelector)(state => state.itemsReordering.isItemReorderable, _internals.labelSelectors.isAnyItemBeingEdited, (isItemReorderable, isEditing, itemId) => !isEditing && isItemReorderable(itemId))
37
+ canItemBeReordered: (0, _store.createSelector)(state => state.isItemReorderable, _internals.labelSelectors.isAnyItemBeingEdited, (isItemReorderable, isEditing, itemId) => !isEditing && isItemReorderable(itemId))
38
38
  };
@@ -0,0 +1,6 @@
1
+ import { TreeViewItemsReorderingAction } from '@mui/x-tree-view/models';
2
+ export interface TreeViewItemReorderPosition {
3
+ parentId: string | null;
4
+ index: number;
5
+ }
6
+ export type TreeViewItemItemReorderingValidActions = { [key in TreeViewItemsReorderingAction]?: TreeViewItemReorderPosition };
@@ -1,10 +1,10 @@
1
- import { TreeViewUsedStore, UseTreeViewItemsState } from '@mui/x-tree-view/internals';
2
- import { TreeViewItemId, TreeViewItemsReorderingAction } from '@mui/x-tree-view/models';
3
- import { TreeViewItemItemReorderingValidActions, TreeViewItemReorderPosition, UseTreeViewItemsReorderingSignature } from "./useTreeViewItemsReordering.types.js";
1
+ import { TreeViewItemId, TreeViewItemsReorderingAction, TreeViewValidItem } from '@mui/x-tree-view/models';
2
+ import { TreeViewItemItemReorderingValidActions, TreeViewItemReorderPosition } from "./types.js";
3
+ import { RichTreeViewProState, RichTreeViewProStore } from "../../RichTreeViewProStore/index.js";
4
4
  /**
5
5
  * Checks if the item with the id itemIdB is an ancestor of the item with the id itemIdA.
6
6
  */
7
- export declare const isAncestor: (store: TreeViewUsedStore<UseTreeViewItemsReorderingSignature>, itemIdA: string, itemIdB: string) => boolean;
7
+ export declare const isAncestor: (store: RichTreeViewProStore<any, any>, itemIdA: string, itemIdB: string) => boolean;
8
8
  interface GetNewPositionParameters {
9
9
  itemChildrenIndentation: string | number;
10
10
  validActions: TreeViewItemItemReorderingValidActions;
@@ -23,7 +23,7 @@ export declare const chooseActionToApply: ({
23
23
  cursorY,
24
24
  contentElement
25
25
  }: GetNewPositionParameters) => TreeViewItemsReorderingAction | null;
26
- export declare const moveItemInTree: <R extends {}>({
26
+ export declare const moveItemInTree: <R extends TreeViewValidItem<R>>({
27
27
  itemToMoveId,
28
28
  oldPosition,
29
29
  newPosition,
@@ -32,6 +32,6 @@ export declare const moveItemInTree: <R extends {}>({
32
32
  itemToMoveId: TreeViewItemId;
33
33
  oldPosition: TreeViewItemReorderPosition;
34
34
  newPosition: TreeViewItemReorderPosition;
35
- prevState: UseTreeViewItemsState<R>["items"];
36
- }) => UseTreeViewItemsState<R>["items"];
35
+ prevState: RichTreeViewProState<R, any>;
36
+ }) => Pick<RichTreeViewProState<R, any>, "itemOrderedChildrenIdsLookup" | "itemChildrenIndexesLookup" | "itemMetaLookup">;
37
37
  export {};
@@ -159,10 +159,10 @@ const moveItemInTree = ({
159
159
  itemOrderedChildrenIds[itemId]?.forEach(childId => updateItemDepth(childId, depth + 1));
160
160
  };
161
161
  itemOrderedChildrenIds[itemToMoveId]?.forEach(childId => updateItemDepth(childId, itemToMoveDepth + 1));
162
- return (0, _extends2.default)({}, prevState, {
162
+ return {
163
163
  itemOrderedChildrenIdsLookup: itemOrderedChildrenIds,
164
164
  itemChildrenIndexesLookup: itemChildrenIndexes,
165
165
  itemMetaLookup
166
- });
166
+ };
167
167
  };
168
168
  exports.moveItemInTree = moveItemInTree;
@@ -0,0 +1,51 @@
1
+ import { TreeViewItemId } from '@mui/x-tree-view/models';
2
+ import { RichTreeViewProStore } from "../../RichTreeViewProStore/RichTreeViewProStore.js";
3
+ export declare const TREE_VIEW_LAZY_LOADED_ITEMS_INITIAL_STATE: {
4
+ loading: {};
5
+ errors: {};
6
+ };
7
+ export declare class TreeViewLazyLoadingPlugin {
8
+ private store;
9
+ private nestedDataManager;
10
+ private cache;
11
+ constructor(store: RichTreeViewProStore<any, any>);
12
+ private init;
13
+ private handleBeforeItemToggleExpansion;
14
+ private setItemLoading;
15
+ private setItemError;
16
+ buildPublicAPI: () => {
17
+ updateItemChildren: (itemId: TreeViewItemId | null) => Promise<void>;
18
+ };
19
+ /**
20
+ * Method used for fetching multiple items concurrently.
21
+ * Only relevant for lazy-loaded tree views.
22
+ *
23
+ * @param {TreeViewItemId[]} parentIds The ids of the items to fetch the children of.
24
+ * @returns {Promise<void>} The promise resolved when the items are fetched.
25
+ */
26
+ fetchItems: (parentIds: TreeViewItemId[]) => Promise<void>;
27
+ /**
28
+ * Method used for updating an item's children.
29
+ * Only relevant for lazy-loaded tree views.
30
+ *
31
+ * @param {TreeViewItemId | null} itemId The id of the item to update the children of. If null is passed, it will update the root's children.
32
+ * @returns {Promise<void>} The promise resolved when the items are fetched.
33
+ */
34
+ updateItemChildren: (itemId: TreeViewItemId | null) => Promise<void>;
35
+ /**
36
+ * Method used for fetching an item's children.
37
+ * Only relevant for lazy-loaded tree views.
38
+ *
39
+ * @param {object} parameters The parameters of the method.
40
+ * @param {TreeViewItemId} parameters.itemId The The id of the item to fetch the children of.
41
+ * @param {boolean} [parameters.forceRefresh] Whether to force a refresh of the children when the cache already contains some data.
42
+ * @returns {Promise<void>} The promise resolved when the items are fetched.
43
+ */
44
+ fetchItemChildren: ({
45
+ itemId,
46
+ forceRefresh
47
+ }: {
48
+ itemId: TreeViewItemId | null;
49
+ forceRefresh?: boolean;
50
+ }) => Promise<void>;
51
+ }