@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.
- package/CHANGELOG.md +111 -1
- package/RichTreeViewPro/RichTreeViewPro.js +32 -29
- package/RichTreeViewPro/RichTreeViewPro.types.d.ts +6 -5
- package/RichTreeViewPro/index.d.ts +1 -2
- package/RichTreeViewPro/useExtractRichTreeViewProParameters.d.ts +294 -0
- package/RichTreeViewPro/useExtractRichTreeViewProParameters.js +107 -0
- package/esm/RichTreeViewPro/RichTreeViewPro.js +32 -29
- package/esm/RichTreeViewPro/RichTreeViewPro.types.d.ts +6 -5
- package/esm/RichTreeViewPro/index.d.ts +1 -2
- package/esm/RichTreeViewPro/useExtractRichTreeViewProParameters.d.ts +294 -0
- package/esm/RichTreeViewPro/useExtractRichTreeViewProParameters.js +99 -0
- package/esm/hooks/useRichTreeViewProApiRef.d.ts +2 -2
- package/esm/index.d.ts +0 -1
- package/esm/index.js +1 -2
- package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.d.ts +49 -0
- package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.js +15 -0
- package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.types.d.ts +69 -0
- package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.utils.d.ts +3 -0
- package/esm/internals/RichTreeViewProStore/RichTreeViewProStore.utils.js +18 -0
- package/esm/internals/RichTreeViewProStore/index.d.ts +2 -0
- package/esm/internals/RichTreeViewProStore/index.js +2 -0
- package/esm/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.d.ts +53 -0
- package/esm/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.js +180 -0
- package/esm/internals/plugins/itemsReordering/index.d.ts +3 -0
- package/esm/internals/plugins/itemsReordering/index.js +3 -0
- package/esm/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.js +6 -7
- package/esm/internals/plugins/itemsReordering/selectors.d.ts +29 -0
- package/esm/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js → itemsReordering/selectors.js} +4 -4
- package/esm/internals/plugins/itemsReordering/types.d.ts +6 -0
- package/{internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts → esm/internals/plugins/itemsReordering/utils.d.ts} +7 -7
- package/esm/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js → itemsReordering/utils.js} +2 -2
- package/esm/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.d.ts +51 -0
- package/esm/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.js +230 -0
- package/esm/internals/plugins/lazyLoading/index.d.ts +2 -0
- package/esm/internals/plugins/lazyLoading/index.js +2 -0
- package/esm/internals/plugins/lazyLoading/types.d.ts +21 -0
- package/esm/internals/plugins/lazyLoading/types.js +1 -0
- package/{internals/plugins/useTreeViewLazyLoading → esm/internals/plugins/lazyLoading}/utils.d.ts +3 -7
- package/esm/internals/plugins/{useTreeViewLazyLoading → lazyLoading}/utils.js +3 -11
- package/hooks/useRichTreeViewProApiRef.d.ts +2 -2
- package/index.d.ts +0 -1
- package/index.js +1 -23
- package/internals/RichTreeViewProStore/RichTreeViewProStore.d.ts +49 -0
- package/internals/RichTreeViewProStore/RichTreeViewProStore.js +23 -0
- package/internals/RichTreeViewProStore/RichTreeViewProStore.types.d.ts +69 -0
- package/internals/RichTreeViewProStore/RichTreeViewProStore.utils.d.ts +3 -0
- package/internals/RichTreeViewProStore/RichTreeViewProStore.utils.js +25 -0
- package/internals/RichTreeViewProStore/index.d.ts +2 -0
- package/internals/RichTreeViewProStore/index.js +27 -0
- package/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.d.ts +53 -0
- package/internals/plugins/itemsReordering/TreeViewItemsReorderingPlugin.js +188 -0
- package/internals/plugins/itemsReordering/index.d.ts +3 -0
- package/internals/plugins/itemsReordering/index.js +27 -0
- package/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.js +9 -10
- package/internals/plugins/itemsReordering/selectors.d.ts +29 -0
- package/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.js → itemsReordering/selectors.js} +4 -4
- package/internals/plugins/itemsReordering/types.d.ts +6 -0
- package/{esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.utils.d.ts → internals/plugins/itemsReordering/utils.d.ts} +7 -7
- package/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.utils.js → itemsReordering/utils.js} +2 -2
- package/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.d.ts +51 -0
- package/internals/plugins/lazyLoading/TreeViewLazyLoadingPlugin.js +238 -0
- package/internals/plugins/lazyLoading/index.d.ts +2 -0
- package/internals/plugins/lazyLoading/index.js +27 -0
- package/internals/plugins/lazyLoading/types.d.ts +21 -0
- package/internals/plugins/lazyLoading/types.js +5 -0
- package/{esm/internals/plugins/useTreeViewLazyLoading → internals/plugins/lazyLoading}/utils.d.ts +3 -7
- package/internals/plugins/{useTreeViewLazyLoading → lazyLoading}/utils.js +3 -9
- package/package.json +4 -4
- package/RichTreeViewPro/RichTreeViewPro.plugins.d.ts +0 -5
- package/RichTreeViewPro/RichTreeViewPro.plugins.js +0 -12
- package/esm/RichTreeViewPro/RichTreeViewPro.plugins.d.ts +0 -5
- package/esm/RichTreeViewPro/RichTreeViewPro.plugins.js +0 -6
- package/esm/internals/index.d.ts +0 -1
- package/esm/internals/plugins/useTreeViewItemsReordering/index.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewItemsReordering/index.js +0 -2
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.d.ts +0 -3
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +0 -196
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +0 -30
- package/esm/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +0 -107
- package/esm/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/index.js +0 -1
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.d.ts +0 -2
- package/esm/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +0 -251
- package/internals/index.d.ts +0 -1
- package/internals/plugins/useTreeViewItemsReordering/index.d.ts +0 -3
- package/internals/plugins/useTreeViewItemsReordering/index.js +0 -19
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.d.ts +0 -3
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.js +0 -205
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.selectors.d.ts +0 -30
- package/internals/plugins/useTreeViewItemsReordering/useTreeViewItemsReordering.types.d.ts +0 -107
- package/internals/plugins/useTreeViewLazyLoading/index.d.ts +0 -1
- package/internals/plugins/useTreeViewLazyLoading/index.js +0 -12
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.d.ts +0 -2
- package/internals/plugins/useTreeViewLazyLoading/useTreeViewLazyLoading.js +0 -259
- /package/esm/internals/{index.js → RichTreeViewProStore/RichTreeViewProStore.types.js} +0 -0
- /package/esm/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.d.ts +0 -0
- /package/esm/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.types.js → itemsReordering/types.js} +0 -0
- /package/internals/{index.js → RichTreeViewProStore/RichTreeViewProStore.types.js} +0 -0
- /package/internals/plugins/{useTreeViewItemsReordering → itemsReordering}/itemPlugin.d.ts +0 -0
- /package/internals/plugins/{useTreeViewItemsReordering/useTreeViewItemsReordering.types.js → itemsReordering/types.js} +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
|
+
const _excluded = ["apiRef", "slots", "slotProps", "disabledItemsFocusable", "items", "isItemDisabled", "isItemSelectionDisabled", "getItemLabel", "getItemChildren", "getItemId", "onItemClick", "itemChildrenIndentation", "id", "expandedItems", "defaultExpandedItems", "onExpandedItemsChange", "onItemExpansionToggle", "expansionTrigger", "disableSelection", "selectedItems", "defaultSelectedItems", "multiSelect", "checkboxSelection", "selectionPropagation", "onSelectedItemsChange", "onItemSelectionToggle", "onItemFocus", "onItemLabelChange", "isItemEditable", "dataSource", "dataSourceCache", "itemsReordering", "isItemReorderable", "canMoveItemToNewPosition", "onItemPositionChange"];
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
export function useExtractRichTreeViewProParameters(props) {
|
|
5
|
+
const {
|
|
6
|
+
// Props for Provider
|
|
7
|
+
apiRef,
|
|
8
|
+
slots,
|
|
9
|
+
slotProps,
|
|
10
|
+
// Shared parameters
|
|
11
|
+
disabledItemsFocusable,
|
|
12
|
+
items,
|
|
13
|
+
isItemDisabled,
|
|
14
|
+
isItemSelectionDisabled,
|
|
15
|
+
getItemLabel,
|
|
16
|
+
getItemChildren,
|
|
17
|
+
getItemId,
|
|
18
|
+
onItemClick,
|
|
19
|
+
itemChildrenIndentation,
|
|
20
|
+
id,
|
|
21
|
+
expandedItems,
|
|
22
|
+
defaultExpandedItems,
|
|
23
|
+
onExpandedItemsChange,
|
|
24
|
+
onItemExpansionToggle,
|
|
25
|
+
expansionTrigger,
|
|
26
|
+
disableSelection,
|
|
27
|
+
selectedItems,
|
|
28
|
+
defaultSelectedItems,
|
|
29
|
+
multiSelect,
|
|
30
|
+
checkboxSelection,
|
|
31
|
+
selectionPropagation,
|
|
32
|
+
onSelectedItemsChange,
|
|
33
|
+
onItemSelectionToggle,
|
|
34
|
+
onItemFocus,
|
|
35
|
+
// RichTreeViewStore parameters
|
|
36
|
+
onItemLabelChange,
|
|
37
|
+
isItemEditable,
|
|
38
|
+
// RichTreeViewProStore parameters
|
|
39
|
+
dataSource,
|
|
40
|
+
dataSourceCache,
|
|
41
|
+
itemsReordering,
|
|
42
|
+
isItemReorderable,
|
|
43
|
+
canMoveItemToNewPosition,
|
|
44
|
+
onItemPositionChange
|
|
45
|
+
|
|
46
|
+
// Forwarded props
|
|
47
|
+
} = props,
|
|
48
|
+
forwardedProps = _objectWithoutPropertiesLoose(props, _excluded);
|
|
49
|
+
const parameters = React.useMemo(() => ({
|
|
50
|
+
// Shared parameters
|
|
51
|
+
disabledItemsFocusable,
|
|
52
|
+
items,
|
|
53
|
+
isItemDisabled,
|
|
54
|
+
isItemSelectionDisabled,
|
|
55
|
+
getItemLabel,
|
|
56
|
+
getItemChildren,
|
|
57
|
+
getItemId,
|
|
58
|
+
onItemClick,
|
|
59
|
+
itemChildrenIndentation,
|
|
60
|
+
id,
|
|
61
|
+
expandedItems,
|
|
62
|
+
defaultExpandedItems,
|
|
63
|
+
onExpandedItemsChange,
|
|
64
|
+
onItemExpansionToggle,
|
|
65
|
+
expansionTrigger,
|
|
66
|
+
disableSelection,
|
|
67
|
+
selectedItems,
|
|
68
|
+
defaultSelectedItems,
|
|
69
|
+
multiSelect,
|
|
70
|
+
checkboxSelection,
|
|
71
|
+
selectionPropagation,
|
|
72
|
+
onSelectedItemsChange,
|
|
73
|
+
onItemSelectionToggle,
|
|
74
|
+
onItemFocus,
|
|
75
|
+
// RichTreeViewStore parameters
|
|
76
|
+
onItemLabelChange,
|
|
77
|
+
isItemEditable,
|
|
78
|
+
// RichTreeViewProStore parameters
|
|
79
|
+
dataSource,
|
|
80
|
+
dataSourceCache,
|
|
81
|
+
itemsReordering,
|
|
82
|
+
isItemReorderable,
|
|
83
|
+
canMoveItemToNewPosition,
|
|
84
|
+
onItemPositionChange
|
|
85
|
+
}), [
|
|
86
|
+
// Shared parameters
|
|
87
|
+
disabledItemsFocusable, items, isItemDisabled, isItemSelectionDisabled, getItemLabel, getItemChildren, getItemId, onItemClick, itemChildrenIndentation, id, expandedItems, defaultExpandedItems, onExpandedItemsChange, onItemExpansionToggle, expansionTrigger, disableSelection, selectedItems, defaultSelectedItems, multiSelect, checkboxSelection, selectionPropagation, onSelectedItemsChange, onItemSelectionToggle, onItemFocus,
|
|
88
|
+
// RichTreeViewStore parameters
|
|
89
|
+
onItemLabelChange, isItemEditable,
|
|
90
|
+
// RichTreeViewProStore parameters
|
|
91
|
+
dataSource, dataSourceCache, itemsReordering, isItemReorderable, canMoveItemToNewPosition, onItemPositionChange]);
|
|
92
|
+
return {
|
|
93
|
+
apiRef,
|
|
94
|
+
slots,
|
|
95
|
+
slotProps,
|
|
96
|
+
parameters,
|
|
97
|
+
forwardedProps
|
|
98
|
+
};
|
|
99
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { TreeViewPublicAPI } from '@mui/x-tree-view/internals';
|
|
3
3
|
import { TreeViewDefaultItemModelProperties, TreeViewValidItem } from '@mui/x-tree-view/models';
|
|
4
|
-
import {
|
|
4
|
+
import { RichTreeViewProStore } from "../internals/RichTreeViewProStore/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* Creates the ref to pass to the `apiRef` prop of the `RichTreeViewPro` component.
|
|
7
7
|
*/
|
|
8
|
-
export declare function useRichTreeViewProApiRef<R extends TreeViewValidItem<R> = TreeViewDefaultItemModelProperties>(): React.RefObject<TreeViewPublicAPI<
|
|
8
|
+
export declare function useRichTreeViewProApiRef<R extends TreeViewValidItem<R> = TreeViewDefaultItemModelProperties>(): React.RefObject<TreeViewPublicAPI<RichTreeViewProStore<R, boolean>> | undefined>;
|
package/esm/index.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ export * from '@mui/x-tree-view/TreeItemIcon';
|
|
|
6
6
|
export * from '@mui/x-tree-view/TreeItemProvider';
|
|
7
7
|
export * from '@mui/x-tree-view/TreeItemDragAndDropOverlay';
|
|
8
8
|
export * from '@mui/x-tree-view/TreeItemLabelInput';
|
|
9
|
-
export { unstable_resetCleanupTracking } from '@mui/x-tree-view/internals';
|
|
10
9
|
export * from '@mui/x-tree-view/models';
|
|
11
10
|
export * from '@mui/x-tree-view/icons';
|
|
12
11
|
export * from '@mui/x-tree-view/hooks';
|
package/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @mui/x-tree-view-pro v8.
|
|
2
|
+
* @mui/x-tree-view-pro v8.24.0
|
|
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
|
|
@@ -16,7 +16,6 @@ export * from '@mui/x-tree-view/TreeItemIcon';
|
|
|
16
16
|
export * from '@mui/x-tree-view/TreeItemProvider';
|
|
17
17
|
export * from '@mui/x-tree-view/TreeItemDragAndDropOverlay';
|
|
18
18
|
export * from '@mui/x-tree-view/TreeItemLabelInput';
|
|
19
|
-
export { unstable_resetCleanupTracking } from '@mui/x-tree-view/internals';
|
|
20
19
|
export * from '@mui/x-tree-view/models';
|
|
21
20
|
export * from '@mui/x-tree-view/icons';
|
|
22
21
|
export * from '@mui/x-tree-view/hooks';
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ExtendableRichTreeViewStore } from '@mui/x-tree-view/internals';
|
|
2
|
+
import { TreeViewValidItem } from '@mui/x-tree-view/models';
|
|
3
|
+
import { RichTreeViewProStoreParameters, RichTreeViewProState } from "./RichTreeViewProStore.types.js";
|
|
4
|
+
import { TreeViewLazyLoadingPlugin } from "../plugins/lazyLoading/index.js";
|
|
5
|
+
import { TreeViewItemsReorderingPlugin } from "../plugins/itemsReordering/index.js";
|
|
6
|
+
export declare class RichTreeViewProStore<R extends TreeViewValidItem<R>, Multiple extends boolean | undefined> extends ExtendableRichTreeViewStore<R, Multiple, RichTreeViewProState<R, Multiple>, RichTreeViewProStoreParameters<R, Multiple>> {
|
|
7
|
+
lazyLoading: TreeViewLazyLoadingPlugin;
|
|
8
|
+
itemsReordering: TreeViewItemsReorderingPlugin;
|
|
9
|
+
constructor(parameters: RichTreeViewProStoreParameters<R, Multiple>);
|
|
10
|
+
buildPublicAPI(): {
|
|
11
|
+
updateItemChildren: (itemId: import("@mui/x-tree-view").TreeViewItemId | null) => Promise<void>;
|
|
12
|
+
setEditedItem: (itemId: import("@mui/x-tree-view").TreeViewItemId | null) => void;
|
|
13
|
+
updateItemLabel: (itemId: import("@mui/x-tree-view").TreeViewItemId, label: string) => void;
|
|
14
|
+
setItemSelection: ({
|
|
15
|
+
itemId,
|
|
16
|
+
event,
|
|
17
|
+
keepExistingSelection,
|
|
18
|
+
shouldBeSelected
|
|
19
|
+
}: {
|
|
20
|
+
itemId: string;
|
|
21
|
+
event?: React.SyntheticEvent | null;
|
|
22
|
+
shouldBeSelected?: boolean;
|
|
23
|
+
keepExistingSelection?: boolean;
|
|
24
|
+
}) => void;
|
|
25
|
+
isItemExpanded: (itemId: import("@mui/x-tree-view").TreeViewItemId) => boolean;
|
|
26
|
+
setItemExpansion: ({
|
|
27
|
+
itemId,
|
|
28
|
+
event,
|
|
29
|
+
shouldBeExpanded
|
|
30
|
+
}: {
|
|
31
|
+
itemId: import("@mui/x-tree-view").TreeViewItemId;
|
|
32
|
+
event?: React.SyntheticEvent | null;
|
|
33
|
+
shouldBeExpanded?: boolean;
|
|
34
|
+
}) => void;
|
|
35
|
+
focusItem: (event: React.SyntheticEvent | null, itemId: import("@mui/x-tree-view").TreeViewItemId) => void;
|
|
36
|
+
getItem: (itemId: import("@mui/x-tree-view").TreeViewItemId) => R;
|
|
37
|
+
getItemDOMElement: (itemId: import("@mui/x-tree-view").TreeViewItemId) => HTMLElement | null;
|
|
38
|
+
getItemOrderedChildrenIds: (itemId: import("@mui/x-tree-view").TreeViewItemId | null) => import("@mui/x-tree-view").TreeViewItemId[];
|
|
39
|
+
getItemTree: () => R[];
|
|
40
|
+
getParentId: (itemId: import("@mui/x-tree-view").TreeViewItemId) => import("@mui/x-tree-view").TreeViewItemId | null;
|
|
41
|
+
setIsItemDisabled: ({
|
|
42
|
+
itemId,
|
|
43
|
+
shouldBeDisabled
|
|
44
|
+
}: {
|
|
45
|
+
itemId: import("@mui/x-tree-view").TreeViewItemId;
|
|
46
|
+
shouldBeDisabled?: boolean;
|
|
47
|
+
}) => void;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { ExtendableRichTreeViewStore } from '@mui/x-tree-view/internals';
|
|
3
|
+
import { TreeViewLazyLoadingPlugin } from "../plugins/lazyLoading/index.js";
|
|
4
|
+
import { TreeViewItemsReorderingPlugin } from "../plugins/itemsReordering/index.js";
|
|
5
|
+
import { parametersToStateMapper } from "./RichTreeViewProStore.utils.js";
|
|
6
|
+
export class RichTreeViewProStore extends ExtendableRichTreeViewStore {
|
|
7
|
+
itemsReordering = (() => new TreeViewItemsReorderingPlugin(this))();
|
|
8
|
+
constructor(parameters) {
|
|
9
|
+
super(parameters, 'RichTreeViewPro', parametersToStateMapper);
|
|
10
|
+
this.lazyLoading = new TreeViewLazyLoadingPlugin(this);
|
|
11
|
+
}
|
|
12
|
+
buildPublicAPI() {
|
|
13
|
+
return _extends({}, super.buildPublicAPI(), this.lazyLoading.buildPublicAPI());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -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,18 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { ExtendableRichTreeViewStore } from '@mui/x-tree-view/internals';
|
|
3
|
+
import { TREE_VIEW_LAZY_LOADED_ITEMS_INITIAL_STATE } from "../plugins/lazyLoading/index.js";
|
|
4
|
+
const DEFAULT_IS_ITEM_REORDERABLE_WHEN_ENABLED = () => true;
|
|
5
|
+
const DEFAULT_IS_ITEM_REORDERABLE_WHEN_DISABLED = () => false;
|
|
6
|
+
const deriveStateFromParameters = parameters => ({
|
|
7
|
+
lazyLoadedItems: parameters.dataSource ? TREE_VIEW_LAZY_LOADED_ITEMS_INITIAL_STATE : null,
|
|
8
|
+
currentReorder: null,
|
|
9
|
+
isItemReorderable: parameters.itemsReordering ? parameters.isItemReorderable ?? DEFAULT_IS_ITEM_REORDERABLE_WHEN_ENABLED : DEFAULT_IS_ITEM_REORDERABLE_WHEN_DISABLED
|
|
10
|
+
});
|
|
11
|
+
export const parametersToStateMapper = {
|
|
12
|
+
getInitialState: (minimalInitialState, parameters) => _extends({}, ExtendableRichTreeViewStore.rawMapper.getInitialState(minimalInitialState, parameters), deriveStateFromParameters(parameters)),
|
|
13
|
+
updateStateFromParameters: (newMinimalState, parameters, updateModel) => {
|
|
14
|
+
const newState = _extends({}, ExtendableRichTreeViewStore.rawMapper.updateStateFromParameters(newMinimalState, parameters, updateModel), deriveStateFromParameters(parameters));
|
|
15
|
+
return newState;
|
|
16
|
+
},
|
|
17
|
+
shouldIgnoreItemsStateUpdate: parameters => !!parameters.dataSource
|
|
18
|
+
};
|
|
@@ -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,180 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import { itemsSelectors, labelSelectors } from '@mui/x-tree-view/internals';
|
|
3
|
+
import { itemsReorderingSelectors } from "./selectors.js";
|
|
4
|
+
import { chooseActionToApply, isAncestor, moveItemInTree } from "./utils.js";
|
|
5
|
+
import { useTreeViewItemsReorderingItemPlugin } from "./itemPlugin.js";
|
|
6
|
+
export class TreeViewItemsReorderingPlugin {
|
|
7
|
+
constructor(store) {
|
|
8
|
+
this.store = store;
|
|
9
|
+
store.itemPluginManager.register(useTreeViewItemsReorderingItemPlugin, null);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Get the valid reordering action if a given item is the target of the ongoing reordering.
|
|
14
|
+
* @param {TreeViewItemId} itemId The id of the item to get the action of.
|
|
15
|
+
* @returns {TreeViewItemItemReorderingValidActions} The valid actions for the item.
|
|
16
|
+
*/
|
|
17
|
+
getDroppingTargetValidActions = itemId => {
|
|
18
|
+
const currentReorder = itemsReorderingSelectors.currentReorder(this.store.state);
|
|
19
|
+
if (!currentReorder) {
|
|
20
|
+
throw new Error('There is no ongoing reordering.');
|
|
21
|
+
}
|
|
22
|
+
if (itemId === currentReorder.draggedItemId) {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
const canMoveItemToNewPosition = this.store.parameters.canMoveItemToNewPosition;
|
|
26
|
+
const targetItemMeta = itemsSelectors.itemMeta(this.store.state, itemId);
|
|
27
|
+
const targetItemIndex = itemsSelectors.itemIndex(this.store.state, targetItemMeta.id);
|
|
28
|
+
const draggedItemMeta = itemsSelectors.itemMeta(this.store.state, currentReorder.draggedItemId);
|
|
29
|
+
const draggedItemIndex = itemsSelectors.itemIndex(this.store.state, draggedItemMeta.id);
|
|
30
|
+
const isTargetLastSibling = targetItemIndex === itemsSelectors.itemOrderedChildrenIds(this.store.state, targetItemMeta.parentId).length - 1;
|
|
31
|
+
const oldPosition = {
|
|
32
|
+
parentId: draggedItemMeta.parentId,
|
|
33
|
+
index: draggedItemIndex
|
|
34
|
+
};
|
|
35
|
+
const checkIfPositionIsValid = positionAfterAction => {
|
|
36
|
+
let isValid;
|
|
37
|
+
// If the new position is equal to the old one, we don't want to show any dropping UI.
|
|
38
|
+
if (positionAfterAction.parentId === oldPosition.parentId && positionAfterAction.index === oldPosition.index) {
|
|
39
|
+
isValid = false;
|
|
40
|
+
} else if (canMoveItemToNewPosition) {
|
|
41
|
+
isValid = canMoveItemToNewPosition({
|
|
42
|
+
itemId: currentReorder.draggedItemId,
|
|
43
|
+
oldPosition,
|
|
44
|
+
newPosition: positionAfterAction
|
|
45
|
+
});
|
|
46
|
+
} else {
|
|
47
|
+
isValid = true;
|
|
48
|
+
}
|
|
49
|
+
return isValid;
|
|
50
|
+
};
|
|
51
|
+
const positionsAfterAction = {
|
|
52
|
+
'make-child': {
|
|
53
|
+
parentId: targetItemMeta.id,
|
|
54
|
+
index: 0
|
|
55
|
+
},
|
|
56
|
+
'reorder-above': {
|
|
57
|
+
parentId: targetItemMeta.parentId,
|
|
58
|
+
index: targetItemMeta.parentId === draggedItemMeta.parentId && targetItemIndex > draggedItemIndex ? targetItemIndex - 1 : targetItemIndex
|
|
59
|
+
},
|
|
60
|
+
'reorder-below': !targetItemMeta.expandable || isTargetLastSibling ? {
|
|
61
|
+
parentId: targetItemMeta.parentId,
|
|
62
|
+
index: targetItemMeta.parentId === draggedItemMeta.parentId && targetItemIndex > draggedItemIndex ? targetItemIndex : targetItemIndex + 1
|
|
63
|
+
} : null,
|
|
64
|
+
'move-to-parent': targetItemMeta.parentId == null ? null : {
|
|
65
|
+
parentId: targetItemMeta.parentId,
|
|
66
|
+
index: itemsSelectors.itemOrderedChildrenIds(this.store.state, targetItemMeta.parentId).length
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const validActions = {};
|
|
70
|
+
Object.keys(positionsAfterAction).forEach(action => {
|
|
71
|
+
const positionAfterAction = positionsAfterAction[action];
|
|
72
|
+
if (positionAfterAction != null && checkIfPositionIsValid(positionAfterAction)) {
|
|
73
|
+
validActions[action] = positionAfterAction;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return validActions;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Start a reordering for the given item.
|
|
81
|
+
* @param {TreeViewItemId} itemId The id of the item to start the reordering for.
|
|
82
|
+
*/
|
|
83
|
+
startDraggingItem = itemId => {
|
|
84
|
+
const isItemBeingEdited = labelSelectors.isItemBeingEdited(this.store.state, itemId);
|
|
85
|
+
if (isItemBeingEdited) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.store.set('currentReorder', {
|
|
89
|
+
targetItemId: itemId,
|
|
90
|
+
draggedItemId: itemId,
|
|
91
|
+
action: null,
|
|
92
|
+
newPosition: null
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Cancel the current reordering operation and reset the state.
|
|
98
|
+
*/
|
|
99
|
+
cancelDraggingItem = () => {
|
|
100
|
+
this.store.set('currentReorder', null);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Complete the reordering of a given item.
|
|
105
|
+
* @param {TreeViewItemId} itemId The id of the item to complete the reordering for.
|
|
106
|
+
*/
|
|
107
|
+
completeDraggingItem = itemId => {
|
|
108
|
+
const currentReorder = itemsReorderingSelectors.currentReorder(this.store.state);
|
|
109
|
+
if (currentReorder == null || currentReorder.draggedItemId !== itemId) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (currentReorder.draggedItemId === currentReorder.targetItemId || currentReorder.action == null || currentReorder.newPosition == null) {
|
|
113
|
+
this.cancelDraggingItem();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const draggedItemMeta = itemsSelectors.itemMeta(this.store.state, currentReorder.draggedItemId);
|
|
117
|
+
const oldPosition = {
|
|
118
|
+
parentId: draggedItemMeta.parentId,
|
|
119
|
+
index: itemsSelectors.itemIndex(this.store.state, draggedItemMeta.id)
|
|
120
|
+
};
|
|
121
|
+
const newPosition = currentReorder.newPosition;
|
|
122
|
+
this.store.update(_extends({
|
|
123
|
+
currentReorder: null
|
|
124
|
+
}, moveItemInTree({
|
|
125
|
+
itemToMoveId: itemId,
|
|
126
|
+
newPosition,
|
|
127
|
+
oldPosition,
|
|
128
|
+
prevState: this.store.state
|
|
129
|
+
})));
|
|
130
|
+
const onItemPositionChange = this.store.parameters.onItemPositionChange;
|
|
131
|
+
onItemPositionChange?.({
|
|
132
|
+
itemId,
|
|
133
|
+
newPosition,
|
|
134
|
+
oldPosition
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Set the new target item for the ongoing reordering.
|
|
140
|
+
* The action will be determined based on the position of the cursor inside the target and the valid actions for this target.
|
|
141
|
+
* @param {object} params The params describing the new target item.
|
|
142
|
+
* @param {TreeViewItemId} params.itemId The id of the new target item.
|
|
143
|
+
* @param {TreeViewItemItemReorderingValidActions} params.validActions The valid actions for the new target item.
|
|
144
|
+
* @param {number} params.targetHeight The height of the target item.
|
|
145
|
+
* @param {number} params.cursorY The Y coordinate of the mouse cursor.
|
|
146
|
+
* @param {number} params.cursorX The X coordinate of the mouse cursor.
|
|
147
|
+
* @param {HTMLDivElement} params.contentElement The DOM element rendered for the content slot.
|
|
148
|
+
*/
|
|
149
|
+
setDragTargetItem = ({
|
|
150
|
+
itemId,
|
|
151
|
+
validActions,
|
|
152
|
+
targetHeight,
|
|
153
|
+
cursorY,
|
|
154
|
+
cursorX,
|
|
155
|
+
contentElement
|
|
156
|
+
}) => {
|
|
157
|
+
const prevItemReorder = this.store.state.currentReorder;
|
|
158
|
+
if (prevItemReorder == null || isAncestor(this.store, itemId, prevItemReorder.draggedItemId)) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const action = chooseActionToApply({
|
|
162
|
+
itemChildrenIndentation: this.store.state.itemChildrenIndentation,
|
|
163
|
+
validActions,
|
|
164
|
+
targetHeight,
|
|
165
|
+
targetDepth: this.store.state.itemMetaLookup[itemId].depth,
|
|
166
|
+
cursorY,
|
|
167
|
+
cursorX,
|
|
168
|
+
contentElement
|
|
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
|
+
this.store.set('currentReorder', _extends({}, prevItemReorder, {
|
|
175
|
+
targetItemId: itemId,
|
|
176
|
+
newPosition,
|
|
177
|
+
action
|
|
178
|
+
}));
|
|
179
|
+
};
|
|
180
|
+
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useStore } from '@mui/x-internals/store';
|
|
3
3
|
import { useTreeViewContext, isTargetInDescendants } from '@mui/x-tree-view/internals';
|
|
4
|
-
import { itemsReorderingSelectors } from "./
|
|
4
|
+
import { itemsReorderingSelectors } from "./selectors.js";
|
|
5
5
|
export const isAndroid = () => navigator.userAgent.toLowerCase().includes('android');
|
|
6
6
|
export const useTreeViewItemsReorderingItemPlugin = ({
|
|
7
7
|
props
|
|
8
8
|
}) => {
|
|
9
9
|
const {
|
|
10
|
-
instance,
|
|
11
10
|
store
|
|
12
11
|
} = useTreeViewContext();
|
|
13
12
|
const {
|
|
@@ -49,7 +48,7 @@ export const useTreeViewItemsReorderingItemPlugin = ({
|
|
|
49
48
|
|
|
50
49
|
// iOS requires a media type to be defined
|
|
51
50
|
event.dataTransfer.setData('application/mui-x', '');
|
|
52
|
-
|
|
51
|
+
store.itemsReordering.startDraggingItem(itemId);
|
|
53
52
|
};
|
|
54
53
|
const handleRootDragOver = event => {
|
|
55
54
|
externalEventHandlers.onDragOver?.(event);
|
|
@@ -66,10 +65,10 @@ export const useTreeViewItemsReorderingItemPlugin = ({
|
|
|
66
65
|
|
|
67
66
|
// Check if the drag-and-drop was cancelled, possibly by pressing Escape
|
|
68
67
|
if (event.dataTransfer.dropEffect === 'none') {
|
|
69
|
-
|
|
68
|
+
store.itemsReordering.cancelDraggingItem();
|
|
70
69
|
return;
|
|
71
70
|
}
|
|
72
|
-
|
|
71
|
+
store.itemsReordering.completeDraggingItem(itemId);
|
|
73
72
|
};
|
|
74
73
|
return {
|
|
75
74
|
draggable: canItemBeReordered ? true : undefined,
|
|
@@ -93,7 +92,7 @@ export const useTreeViewItemsReorderingItemPlugin = ({
|
|
|
93
92
|
const rect = contentRefObject.current.getBoundingClientRect();
|
|
94
93
|
const y = event.clientY - rect.top;
|
|
95
94
|
const x = event.clientX - rect.left;
|
|
96
|
-
|
|
95
|
+
store.itemsReordering.setDragTargetItem({
|
|
97
96
|
itemId,
|
|
98
97
|
validActions: validActionsRef.current,
|
|
99
98
|
targetHeight: rect.height,
|
|
@@ -107,7 +106,7 @@ export const useTreeViewItemsReorderingItemPlugin = ({
|
|
|
107
106
|
if (event.defaultMuiPrevented) {
|
|
108
107
|
return;
|
|
109
108
|
}
|
|
110
|
-
validActionsRef.current =
|
|
109
|
+
validActionsRef.current = store.itemsReordering.getDroppingTargetValidActions(itemId);
|
|
111
110
|
};
|
|
112
111
|
return {
|
|
113
112
|
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
|
+
};
|
|
@@ -4,11 +4,11 @@ export const itemsReorderingSelectors = {
|
|
|
4
4
|
/**
|
|
5
5
|
* Gets the properties of the current reordering.
|
|
6
6
|
*/
|
|
7
|
-
currentReorder: createSelector(state => state.
|
|
7
|
+
currentReorder: createSelector(state => state.currentReorder),
|
|
8
8
|
/**
|
|
9
9
|
* Gets the properties of the dragged item.
|
|
10
10
|
*/
|
|
11
|
-
draggedItemProperties: createSelectorMemoized(state => state.
|
|
11
|
+
draggedItemProperties: createSelectorMemoized(state => state.currentReorder, itemsSelectors.itemMetaLookup, (currentReorder, itemMetaLookup, itemId) => {
|
|
12
12
|
if (!currentReorder || currentReorder.targetItemId !== itemId || currentReorder.action == null) {
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
@@ -24,9 +24,9 @@ export const itemsReorderingSelectors = {
|
|
|
24
24
|
/**
|
|
25
25
|
* Checks whether an item is being dragged.
|
|
26
26
|
*/
|
|
27
|
-
isDragging: createSelector(state => !!state.
|
|
27
|
+
isDragging: createSelector(state => !!state.currentReorder?.draggedItemId),
|
|
28
28
|
/**
|
|
29
29
|
* Checks whether an item can be reordered.
|
|
30
30
|
*/
|
|
31
|
-
canItemBeReordered: createSelector(state => state.
|
|
31
|
+
canItemBeReordered: createSelector(state => state.isItemReorderable, labelSelectors.isAnyItemBeingEdited, (isItemReorderable, isEditing, itemId) => !isEditing && isItemReorderable(itemId))
|
|
32
32
|
};
|