@elliemae/ds-treeview 2.2.0-next.6 → 2.2.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 (61) hide show
  1. package/cjs/TreeView.js +6 -2
  2. package/cjs/TreeViewContext.js +8 -2
  3. package/cjs/config/useTreeview.js +13 -3
  4. package/cjs/index.js +1 -0
  5. package/cjs/parts/TreeItem.js +68 -43
  6. package/cjs/parts/TreeList.js +17 -15
  7. package/cjs/plugins/dnd/TreeDndPlugin.js +37 -0
  8. package/cjs/plugins/dnd/index.js +1 -0
  9. package/cjs/plugins/index.js +1 -0
  10. package/cjs/react-desc-prop-types.js +0 -1
  11. package/cjs/utils/dnd-helpers.js +140 -0
  12. package/cjs/utils/keyboard-helpers.js +5 -6
  13. package/cjs/utils/tree-helpers.js +2 -28
  14. package/cjs/utils/useDnDHelpers.js +220 -0
  15. package/cjs/utils/useTree.js +2 -4
  16. package/esm/TreeView.js +6 -2
  17. package/esm/TreeViewContext.js +8 -2
  18. package/esm/config/useTreeview.js +14 -4
  19. package/esm/index.js +1 -1
  20. package/esm/parts/TreeItem.js +67 -42
  21. package/esm/parts/TreeList.js +17 -16
  22. package/esm/plugins/dnd/TreeDndPlugin.js +33 -1
  23. package/esm/plugins/dnd/index.js +1 -1
  24. package/esm/plugins/index.js +1 -1
  25. package/esm/react-desc-prop-types.js +0 -1
  26. package/esm/utils/dnd-helpers.js +132 -0
  27. package/esm/utils/keyboard-helpers.js +5 -6
  28. package/esm/utils/tree-helpers.js +3 -28
  29. package/esm/utils/useDnDHelpers.js +216 -0
  30. package/esm/utils/useTree.js +3 -5
  31. package/package.json +19 -35
  32. package/types/TreeView.d.ts +1 -1
  33. package/types/parts/TreeItem.d.ts +11 -4
  34. package/types/parts/TreeList.d.ts +4 -0
  35. package/types/plugins/dnd/TreeDndPlugin.d.ts +2 -0
  36. package/types/react-desc-prop-types.d.ts +3 -17
  37. package/types/sharedTypes.d.ts +8 -1
  38. package/types/utils/dnd-helpers.d.ts +39 -0
  39. package/types/utils/keyboard-helpers.d.ts +1 -2
  40. package/types/utils/refs-helpers.d.ts +1 -1
  41. package/types/utils/tree-helpers.d.ts +1 -4
  42. package/types/utils/useDnDHelpers.d.ts +26 -0
  43. package/types/utils/useTree.d.ts +0 -1
  44. package/cjs/hoc/DnDTreeContext.js +0 -18
  45. package/cjs/hoc/SortableItemContext.js +0 -21
  46. package/cjs/hoc/WithConditionalDnDContext.js +0 -138
  47. package/cjs/hoc/WithDnDSortableItemContext.js +0 -70
  48. package/cjs/parts/DnDHandle.js +0 -46
  49. package/cjs/parts/DropIndicator.js +0 -75
  50. package/esm/hoc/DnDTreeContext.js +0 -14
  51. package/esm/hoc/SortableItemContext.js +0 -17
  52. package/esm/hoc/WithConditionalDnDContext.js +0 -128
  53. package/esm/hoc/WithDnDSortableItemContext.js +0 -61
  54. package/esm/parts/DnDHandle.js +0 -38
  55. package/esm/parts/DropIndicator.js +0 -68
  56. package/types/hoc/DnDTreeContext.d.ts +0 -14
  57. package/types/hoc/SortableItemContext.d.ts +0 -19
  58. package/types/hoc/WithConditionalDnDContext.d.ts +0 -4
  59. package/types/hoc/WithDnDSortableItemContext.d.ts +0 -4
  60. package/types/parts/DnDHandle.d.ts +0 -6
  61. package/types/parts/DropIndicator.d.ts +0 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-treeview",
3
- "version": "2.2.0-next.6",
3
+ "version": "2.2.1",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Tree View",
6
6
  "module": "./esm/index.js",
@@ -19,6 +19,10 @@
19
19
  "import": "./esm/utils/useInstanceRefActions.js",
20
20
  "require": "./cjs/utils/useInstanceRefActions.js"
21
21
  },
22
+ "./utils/useDnDHelpers": {
23
+ "import": "./esm/utils/useDnDHelpers.js",
24
+ "require": "./cjs/utils/useDnDHelpers.js"
25
+ },
22
26
  "./utils/tree-helpers": {
23
27
  "import": "./esm/utils/tree-helpers.js",
24
28
  "require": "./cjs/utils/tree-helpers.js"
@@ -47,6 +51,10 @@
47
51
  "import": "./esm/utils/group-expands-helpers.js",
48
52
  "require": "./cjs/utils/group-expands-helpers.js"
49
53
  },
54
+ "./utils/dnd-helpers": {
55
+ "import": "./esm/utils/dnd-helpers.js",
56
+ "require": "./cjs/utils/dnd-helpers.js"
57
+ },
50
58
  "./utils/array-helpers": {
51
59
  "import": "./esm/utils/array-helpers.js",
52
60
  "require": "./cjs/utils/array-helpers.js"
@@ -159,14 +167,6 @@
159
167
  "import": "./esm/parts/ExpandCaret.js",
160
168
  "require": "./cjs/parts/ExpandCaret.js"
161
169
  },
162
- "./parts/DropIndicator": {
163
- "import": "./esm/parts/DropIndicator.js",
164
- "require": "./cjs/parts/DropIndicator.js"
165
- },
166
- "./parts/DnDHandle": {
167
- "import": "./esm/parts/DnDHandle.js",
168
- "require": "./cjs/parts/DnDHandle.js"
169
- },
170
170
  "./parts/ChildrenCountDisplayer": {
171
171
  "import": "./esm/parts/ChildrenCountDisplayer.js",
172
172
  "require": "./cjs/parts/ChildrenCountDisplayer.js"
@@ -175,22 +175,6 @@
175
175
  "import": "./esm/parts/CheckboxSelectable.js",
176
176
  "require": "./cjs/parts/CheckboxSelectable.js"
177
177
  },
178
- "./hoc/WithDnDSortableItemContext": {
179
- "import": "./esm/hoc/WithDnDSortableItemContext.js",
180
- "require": "./cjs/hoc/WithDnDSortableItemContext.js"
181
- },
182
- "./hoc/WithConditionalDnDContext": {
183
- "import": "./esm/hoc/WithConditionalDnDContext.js",
184
- "require": "./cjs/hoc/WithConditionalDnDContext.js"
185
- },
186
- "./hoc/SortableItemContext": {
187
- "import": "./esm/hoc/SortableItemContext.js",
188
- "require": "./cjs/hoc/SortableItemContext.js"
189
- },
190
- "./hoc/DnDTreeContext": {
191
- "import": "./esm/hoc/DnDTreeContext.js",
192
- "require": "./cjs/hoc/DnDTreeContext.js"
193
- },
194
178
  "./config/useTreeview": {
195
179
  "import": "./esm/config/useTreeview.js",
196
180
  "require": "./cjs/config/useTreeview.js"
@@ -227,16 +211,16 @@
227
211
  "generateSubmodules": true
228
212
  },
229
213
  "dependencies": {
230
- "@elliemae/ds-button": "2.2.0-next.6",
231
- "@elliemae/ds-circular-progress-indicator": "2.2.0-next.6",
232
- "@elliemae/ds-classnames": "2.2.0-next.6",
233
- "@elliemae/ds-drag-and-drop": "2.2.0-next.6",
234
- "@elliemae/ds-form": "2.2.0-next.6",
235
- "@elliemae/ds-icons": "2.2.0-next.6",
236
- "@elliemae/ds-props-helpers": "2.2.0-next.6",
237
- "@elliemae/ds-shared": "2.2.0-next.6",
238
- "@elliemae/ds-truncated-tooltip-text": "2.2.0-next.6",
239
- "@elliemae/ds-utilities": "2.2.0-next.6",
214
+ "@elliemae/ds-button": "2.2.1",
215
+ "@elliemae/ds-circular-progress-indicator": "2.2.1",
216
+ "@elliemae/ds-classnames": "2.2.1",
217
+ "@elliemae/ds-form": "2.2.1",
218
+ "@elliemae/ds-icons": "2.2.1",
219
+ "@elliemae/ds-props-helpers": "2.2.1",
220
+ "@elliemae/ds-shared": "2.2.1",
221
+ "@elliemae/ds-truncated-tooltip-text": "2.2.1",
222
+ "@elliemae/ds-utilities": "2.2.1",
223
+ "@elliemae/react-sortable-hoc": "^1.0.0",
240
224
  "react-desc": "~4.1.3",
241
225
  "react-highlight-words": "~0.17.0",
242
226
  "react-virtual": "~2.3.2",
@@ -6,7 +6,7 @@ export declare namespace TreeView {
6
6
  var propTypes: React.WeakValidationMap<unknown>;
7
7
  }
8
8
  declare const TreeViewWithSchema: {
9
- (props?: DSTreeviewT.Props | undefined): JSX.Element;
9
+ (props?: unknown): JSX.Element;
10
10
  propTypes: unknown;
11
11
  toTypescript: () => import("react-desc").TypescriptSchema;
12
12
  };
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import React from 'react';
2
3
  import type { DSTreeviewT } from '../react-desc-prop-types';
3
4
  export declare const TreeListItem: React.ComponentType<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>>;
@@ -5,13 +6,19 @@ export declare const TreeListItemAddonsWrapper: React.ComponentType<{}>;
5
6
  interface PropsT {
6
7
  item: DSTreeviewT.Item;
7
8
  itemIndex: number;
8
- isDragOverlay?: boolean;
9
- virtualItemRef?: React.RefObject<HTMLLIElement>;
9
+ virtualItemRef: React.RefObject<HTMLLIElement>;
10
10
  itemWrapperStyle?: {
11
11
  [key: string]: unknown;
12
12
  };
13
13
  spaceForNestingLevel?: number;
14
+ onMouseDragOverItem?: (opts: {
15
+ event: React.MouseEvent<HTMLLIElement>;
16
+ item: DSTreeviewT.Item;
17
+ itemIndex: number;
18
+ setIsDraggingOverThis: React.Dispatch<React.SetStateAction<boolean>>;
19
+ openFolderOnHoverTimeout: React.MutableRefObject<NodeJS.Timeout | null>;
20
+ }) => void;
14
21
  }
15
22
  export declare const TreeItem: (props: PropsT) => JSX.Element;
16
- declare const _default: (props: PropsT) => JSX.Element;
17
- export default _default;
23
+ export declare const DragAndDropTreeItem: React.ComponentClass<PropsT & import("@elliemae/react-sortable-hoc").SortableElementProps, any>;
24
+ export {};
@@ -17,4 +17,8 @@ interface PropsT {
17
17
  }) => void;
18
18
  }
19
19
  export declare const TreeList: (props: PropsT) => JSX.Element;
20
+ export declare const DragAndDropTreeList: React.ComponentClass<PropsT & {
21
+ disableAnimation?: boolean | undefined;
22
+ getContainer: (element: React.ReactElement<unknown>) => HTMLElement | Promise<HTMLElement>;
23
+ } & import("@elliemae/react-sortable-hoc").SortableContainerProps, any>;
20
24
  export {};
@@ -1 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare const TreeDnD: () => JSX.Element;
1
3
  export declare const TreeDndPlugin = "tree-dnd";
@@ -13,7 +13,7 @@ export declare namespace DSTreeviewT {
13
13
  interface SimpleItem {
14
14
  [key: string]: unknown;
15
15
  name: string;
16
- children?: SimpleItem[];
16
+ children: SimpleItem[];
17
17
  id: StringOrNum;
18
18
  }
19
19
  interface Item extends SimpleItem {
@@ -27,19 +27,9 @@ export declare namespace DSTreeviewT {
27
27
  matchesSearchQuery?: boolean;
28
28
  nodeItemRef?: React.RefObject<HTMLLIElement>;
29
29
  model: TreeModel.Node<Item>['model'];
30
- node: TreeModel.Node<Item> & {
31
- parent?: TreeModel.Node<Item>;
32
- };
30
+ node: TreeModel.Node<Item>;
33
31
  nodePath: TreeModel.Node<Item>[];
34
32
  }
35
- interface DndItem {
36
- uid: string;
37
- depth: number;
38
- realIndex: number;
39
- childrenCount: number;
40
- parentId: string | null;
41
- original: SimpleItem;
42
- }
43
33
  interface Actions {
44
34
  toggleExpandAll: (isExpand: boolean) => Promise<DSTreeviewT.Item[]>;
45
35
  scrollTo: DSTreeviewT.ScrollToFunc;
@@ -60,7 +50,6 @@ export declare namespace DSTreeviewT {
60
50
  fluid: boolean;
61
51
  isMultiSelect: boolean;
62
52
  isSingleSelect: boolean;
63
- getIsDropValid: (active: DndItem, over: DndItem, dropIndicatorPosition: 'none' | 'before' | 'after' | 'inside') => boolean;
64
53
  restrictDragAndDrop: boolean;
65
54
  showChildrenAmount: boolean;
66
55
  sortable: boolean;
@@ -73,7 +62,7 @@ export declare namespace DSTreeviewT {
73
62
  item: Item;
74
63
  }) => void;
75
64
  onVisibleItemsChange: (newVisibleItems: Item[]) => void;
76
- onOrderChange: (newData: SimpleItem[], oldData: SimpleItem[], draggedItem: DndItem) => void;
65
+ onOrderChange: (newData: Item[], oldData: Item[], draggedItem: Item) => void;
77
66
  onSelectionChange: (selection: SelectionItems, item: Item, meta: {
78
67
  scrollToItem: ScrollToItemFunc;
79
68
  itemIndex: number;
@@ -135,9 +124,6 @@ export declare const TreeViewPropTypes: {
135
124
  isLoading: {
136
125
  deprecated: import("react-desc").PropTypesDescValidator;
137
126
  };
138
- getIsDropValid: {
139
- deprecated: import("react-desc").PropTypesDescValidator;
140
- };
141
127
  restrictDragAndDrop: {
142
128
  deprecated: import("react-desc").PropTypesDescValidator;
143
129
  };
@@ -19,15 +19,22 @@ export declare namespace DSTreeviewInternalsT {
19
19
  interface CTX {
20
20
  props: DSTreeviewT.Props;
21
21
  visibleItems: DSTreeviewT.Item[];
22
- flattenedItems: DSTreeviewT.DndItem[];
23
22
  withRadioChecks: boolean;
24
23
  withCheckboxChecks: boolean;
25
24
  withDragAndDrop: boolean;
25
+ relativeMouseCord: MouseCoord;
26
+ setRelativeMouseCord: StateSetter<MouseCoord>;
26
27
  triggerTreeRerender: () => void;
27
28
  tree?: TreeModel;
28
29
  treeRoot?: TreeModel.Node<DSTreeviewT.Item>;
29
30
  virtualListHelpers: ReturnType<typeof useVirtual>;
30
31
  virtualListRef?: React.MutableRefObject<HTMLUListElement | undefined>;
32
+ isDragging: boolean;
33
+ setIsDragging: StateSetter<boolean>;
34
+ isKeyboardDragging: boolean;
35
+ setIsKeyboardDragging: StateSetter<boolean>;
36
+ draggedItem: DSTreeviewT.Item | null;
37
+ setDraggedItem: StateSetter<DSTreeviewT.Item | null>;
31
38
  uniqueTreeViewUUID: string;
32
39
  selectedItem: DSTreeviewT.Item | null;
33
40
  setSelectedItem: StateSetter<DSTreeviewT.Item | null>;
@@ -0,0 +1,39 @@
1
+ import type { DSTreeviewT } from '../react-desc-prop-types';
2
+ import type { DSTreeviewInternalsT } from '../sharedTypes';
3
+ interface MetaInfoT {
4
+ isBefore: boolean;
5
+ isAfter: boolean;
6
+ draggedItem: DSTreeviewT.Item;
7
+ overItem: DSTreeviewT.Item;
8
+ }
9
+ interface KinshipT {
10
+ newParentNode: DSTreeviewT.Item['node'];
11
+ newNestedIndex: number;
12
+ }
13
+ export declare const keyCodes: {
14
+ lift: number[];
15
+ drop: number[];
16
+ cancel: number[];
17
+ up: number[];
18
+ down: number[];
19
+ };
20
+ export declare const sameParentAsHoverItemDrop: ({ isBefore, isAfter, draggedItem, overItem, movementDirection, }: MetaInfoT & {
21
+ movementDirection: DSTreeviewInternalsT.DnDMovementDirectionT;
22
+ }) => {
23
+ newNestedIndex: number;
24
+ newParentNode: import("tree-model/types").Node<DSTreeviewT.Item>;
25
+ };
26
+ export declare const inferHoverItemKinshipDrop: ({ isBefore, isAfter, draggedItem, overItem, movementDirection, }: MetaInfoT & {
27
+ movementDirection: DSTreeviewInternalsT.DnDMovementDirectionT;
28
+ }) => {
29
+ newNestedIndex: number;
30
+ newParentNode: import("tree-model/types").Node<DSTreeviewT.Item>;
31
+ };
32
+ export declare const isDropValid: ({ isBefore, isAfter, draggedItem, overItem, restrictDragAndDrop, }: MetaInfoT & {
33
+ restrictDragAndDrop: boolean;
34
+ }) => boolean;
35
+ export declare const inferKeyboardKinshipDrop: ({ items, newIndex, }: {
36
+ items: DSTreeviewT.Item[];
37
+ newIndex: number;
38
+ }) => Partial<KinshipT>;
39
+ export {};
@@ -1,6 +1,5 @@
1
1
  import type { DSTreeviewT } from '../react-desc-prop-types';
2
2
  import type { DSTreeviewInternalsT } from '../sharedTypes';
3
- import { SortableItemContextType } from '../hoc/SortableItemContext';
4
- export declare const useOnItemKeyDown: (item: DSTreeviewT.Item, draggableProps: SortableItemContextType['draggableProps']) => (e: React.KeyboardEvent<HTMLLIElement>) => void;
3
+ export declare const useOnItemKeyDown: (item: DSTreeviewT.Item) => (e: React.KeyboardEvent<HTMLLIElement>) => void;
5
4
  export declare const useGlobalKeyboardListener: (func: (e: KeyboardEvent) => void) => void;
6
5
  export declare const useGlobalToggleAllExpandShortcut: (treeRoot: DSTreeviewT.Item['node'], triggerTreeRerender: () => void, setLatestToggledItem: DSTreeviewInternalsT.CTX['setLatestToggledItem'], updateUserExpandedState: DSTreeviewInternalsT.CTX['updateUserExpandedState']) => void;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
- declare type GenericMergeableRef = null | undefined | React.MutableRefObject<unknown> | ((ref: HTMLElement) => void) | false;
2
+ declare type GenericMergeableRef = null | undefined | React.MutableRefObject<unknown> | ((ref: HTMLElement) => void);
3
3
  export declare const setMultipleRefs: (...refs: GenericMergeableRef[]) => (ref: HTMLElement) => void;
4
4
  export {};
@@ -7,9 +7,7 @@ export declare const walkAllNodeChildren: (node: DSTreeviewT.Item['node'], callb
7
7
  export declare const getNodeById: (treeRoot: DSTreeviewT.Item['node'], id: DSTreeviewT.StringOrNum) => TreeModel.Node<DSTreeviewT.Item>;
8
8
  export declare const cloneNode: (tree: TreeModel, node: DSTreeviewT.Item) => TreeModel.Node<DSTreeviewT.Item>;
9
9
  export declare const itemsShareSameParent: (items?: DSTreeviewT.Item[]) => boolean;
10
- export declare const getItemsParentNode: (items?: DSTreeviewT.Item[], skipSameParentCheck?: boolean) => TreeModel.Node<DSTreeviewT.Item> & {
11
- parent?: TreeModel.Node<DSTreeviewT.Item> | undefined;
12
- };
10
+ export declare const getItemsParentNode: (items?: DSTreeviewT.Item[], skipSameParentCheck?: boolean) => TreeModel.Node<DSTreeviewT.Item>;
13
11
  export declare const getNodeMatchesSearchQuery: (node: DSTreeviewT.Item['node'], searchQuery?: string) => boolean;
14
12
  export declare const getChildrenMatchesSearchQuery: (parentNode: DSTreeviewT.Item['node'], searchQuery?: string) => boolean;
15
13
  /**
@@ -24,5 +22,4 @@ export declare const getChildrenMatchesSearchQuery: (parentNode: DSTreeviewT.Ite
24
22
  */
25
23
  export declare const enrichNodeModelInPlace: (node: TreeModel.Node<DSTreeviewT.SimpleItem>, searchQuery?: string, selection?: DSTreeviewT.SelectionItems | null, expanded?: DSTreeviewT.ExpandedItems | null) => void;
26
24
  export declare const focusItem: (item: DSTreeviewT.Item | null) => void;
27
- export declare const flattenTreeForDnD: (data: DSTreeviewT.SimpleItem[], shouldDescend?: (datum: DSTreeviewT.SimpleItem) => boolean) => DSTreeviewT.DndItem[];
28
25
  export {};
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="mocha" />
3
+ /// <reference types="webpack-env" />
4
+ /// <reference types="styled-components" />
5
+ import React from 'react';
6
+ import type { DSTreeviewT } from '../react-desc-prop-types';
7
+ import type { DSTreeviewInternalsT } from '../sharedTypes';
8
+ export declare const useDnDHelpers: () => {
9
+ updateBeforeSortStart: (beforeStartArgs: {
10
+ index: number;
11
+ isKeySorting: boolean;
12
+ }) => Promise<unknown>;
13
+ onSortStart: () => void;
14
+ onSortEnd: ({ oldIndex, newIndex, isKeySorting }: {
15
+ oldIndex: number;
16
+ newIndex: number;
17
+ isKeySorting: boolean;
18
+ }) => void;
19
+ onMouseDragOverItem: ({ event, item, itemIndex, setIsDraggingOverThis, openFolderOnHoverTimeout, }: {
20
+ event: React.MouseEvent<HTMLLIElement>;
21
+ item: DSTreeviewT.Item;
22
+ itemIndex: number;
23
+ setIsDraggingOverThis: DSTreeviewInternalsT.StateSetter<boolean>;
24
+ openFolderOnHoverTimeout: React.MutableRefObject<NodeJS.Timeout | null>;
25
+ }) => void;
26
+ };
@@ -5,7 +5,6 @@ export declare const useTree: (data: DSTreeviewT.SimpleItem[], props: DSTreeview
5
5
  setExpandedGroups: DSTreeviewInternalsT.StateSetter<DSTreeviewT.ExpandedItems>;
6
6
  }) => {
7
7
  visibleItems: DSTreeviewT.Item[];
8
- flattenedItems: DSTreeviewT.DndItem[];
9
8
  tree: TreeModel;
10
9
  treeRoot: TreeModel.Node<DSTreeviewT.Item>;
11
10
  rerenderItems: {};
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var React = require('react');
6
- var SortableItemContext = require('./SortableItemContext.js');
7
-
8
- const DnDTreeContext = /*#__PURE__*/React.createContext({
9
- depth: undefined,
10
- activeIndex: undefined,
11
- visibleItems: undefined,
12
- dropIndicatorPosition: SortableItemContext.DropIndicatorPosition.None,
13
- lastActiveId: undefined,
14
- setLastActiveId: undefined,
15
- isDropValid: false
16
- });
17
-
18
- exports.DnDTreeContext = DnDTreeContext;
@@ -1,21 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var React = require('react');
6
-
7
- exports.DropIndicatorPosition = void 0;
8
-
9
- (function (DropIndicatorPosition) {
10
- DropIndicatorPosition[DropIndicatorPosition["None"] = 0] = "None";
11
- DropIndicatorPosition[DropIndicatorPosition["Before"] = 1] = "Before";
12
- DropIndicatorPosition[DropIndicatorPosition["After"] = 2] = "After";
13
- DropIndicatorPosition[DropIndicatorPosition["Inside"] = 3] = "Inside";
14
- })(exports.DropIndicatorPosition || (exports.DropIndicatorPosition = {}));
15
-
16
- /** Context for cross component communication */
17
- const SortableItemContext = /*#__PURE__*/React.createContext({
18
- draggableProps: false
19
- });
20
-
21
- exports.SortableItemContext = SortableItemContext;
@@ -1,138 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var _jsx = require('@babel/runtime/helpers/jsx');
6
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
- require('core-js/modules/web.dom-collections.iterator.js');
8
- require('core-js/modules/esnext.async-iterator.map.js');
9
- require('core-js/modules/esnext.iterator.map.js');
10
- require('core-js/modules/esnext.async-iterator.for-each.js');
11
- require('core-js/modules/esnext.iterator.constructor.js');
12
- require('core-js/modules/esnext.iterator.for-each.js');
13
- require('core-js/modules/esnext.async-iterator.find.js');
14
- require('core-js/modules/esnext.iterator.find.js');
15
- require('core-js/modules/esnext.async-iterator.filter.js');
16
- require('core-js/modules/esnext.iterator.filter.js');
17
- var React = require('react');
18
- var core = require('@dnd-kit/core');
19
- var sortable = require('@dnd-kit/sortable');
20
- var dsDragAndDrop = require('@elliemae/ds-drag-and-drop');
21
- var TreeViewContext = require('../TreeViewContext.js');
22
- var TreeItem = require('../parts/TreeItem.js');
23
- var DnDTreeContext = require('./DnDTreeContext.js');
24
- var jsxRuntime = require('react/jsx-runtime');
25
-
26
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
-
28
- var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
29
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
30
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
31
-
32
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
33
-
34
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35
-
36
- const ensure = function (argument) {
37
- let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'This should never happen';
38
-
39
- if (argument === undefined || argument === null) {
40
- throw new TypeError(message);
41
- }
42
-
43
- return argument;
44
- }; // only wraps in "DnDContext" and "DnDTreeContext" if any Drag and Drop functionality is requested
45
-
46
-
47
- const withConditionalDnDRowContext = Component => props => {
48
- const [lastActiveId, setLastActiveId] = React__default["default"].useState('');
49
- const {
50
- props: {
51
- data,
52
- onOrderChange,
53
- getIsDropValid
54
- },
55
- flattenedItems,
56
- visibleItems: flattenedVisibleTree,
57
- withDragAndDrop
58
- } = React.useContext(TreeViewContext["default"]);
59
- const flattenedVisibleTreeForDnD = React.useMemo(() => flattenedVisibleTree.map((item, index) => {
60
- var _item$treeDepth, _item$children$length, _item$children, _item$node$parent$mod, _item$node$parent, _item$node$parent$mod2, _item$node$parent$mod3;
61
-
62
- return {
63
- uid: item.id.toString(),
64
- depth: ((_item$treeDepth = item.treeDepth) !== null && _item$treeDepth !== void 0 ? _item$treeDepth : 1) - 1,
65
- realIndex: index,
66
- childrenCount: (_item$children$length = (_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) !== null && _item$children$length !== void 0 ? _item$children$length : 0,
67
- parentId: (_item$node$parent$mod = (_item$node$parent = item.node.parent) === null || _item$node$parent === void 0 ? void 0 : (_item$node$parent$mod2 = _item$node$parent.model) === null || _item$node$parent$mod2 === void 0 ? void 0 : (_item$node$parent$mod3 = _item$node$parent$mod2.id) === null || _item$node$parent$mod3 === void 0 ? void 0 : _item$node$parent$mod3.toString()) !== null && _item$node$parent$mod !== void 0 ? _item$node$parent$mod : null,
68
- original: item
69
- };
70
- }), [flattenedVisibleTree]);
71
- const onReorder = React.useCallback((tree, indexes) => {
72
- // Pull the row's original data into an object
73
- const nodes = {};
74
- tree.forEach(item => {
75
- const originalItem = item.original;
76
- originalItem.children = [];
77
- nodes[item.uid] = item.original;
78
- });
79
- const newUserTree = [];
80
- tree.forEach(item => {
81
- // If row has parent, insert it to it's subrows
82
- // otherwise append it to the new user data
83
- if (item.parentId !== null && item.parentId !== undefined && item.parentId !== '__ds_tree_root') {
84
- var _parentNode$children;
85
-
86
- const parentNode = nodes[item.parentId];
87
- (_parentNode$children = parentNode.children) === null || _parentNode$children === void 0 ? void 0 : _parentNode$children.push(item.original);
88
- } else if (item.uid !== '__ds_tree_root') newUserTree.push(item.original);
89
- }); // Tell the user that the order has change, he can chose to commit it or not
90
-
91
- onOrderChange(newUserTree, data, flattenedItems[indexes.fromIndex]);
92
- }, [onOrderChange, data, flattenedItems]);
93
- const {
94
- dndContextProps,
95
- sortableContextProps,
96
- activeId,
97
- activeIndex,
98
- depth,
99
- dropIndicatorPosition,
100
- visibleItems,
101
- isDropValid
102
- } = dsDragAndDrop.useTreeDndkitConfig({
103
- flattenedItems,
104
- visibleItems: flattenedVisibleTreeForDnD,
105
- isHorizontalDnD: false,
106
- isExpandable: true,
107
- onReorder,
108
- getIsDropValid,
109
- maxDragAndDropLevel: Infinity
110
- });
111
- if (lastActiveId !== activeId && activeId) setLastActiveId(activeId);
112
- if (withDragAndDrop) return /*#__PURE__*/jsxRuntime.jsxs(core.DndContext, _objectSpread(_objectSpread({}, dndContextProps), {}, {
113
- children: [/*#__PURE__*/jsxRuntime.jsx(sortable.SortableContext, _objectSpread(_objectSpread({}, sortableContextProps), {}, {
114
- children: /*#__PURE__*/_jsx__default["default"](DnDTreeContext.DnDTreeContext.Provider, {
115
- value: {
116
- activeIndex,
117
- depth,
118
- visibleItems: visibleItems.map(item => item.original),
119
- dropIndicatorPosition,
120
- lastActiveId,
121
- setLastActiveId,
122
- isDropValid
123
- }
124
- }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)))
125
- })), /*#__PURE__*/_jsx__default["default"](core.DragOverlay, {
126
- style: {
127
- width: 'auto'
128
- }
129
- }, void 0, activeId ? /*#__PURE__*/_jsx__default["default"](TreeItem.TreeItem, {
130
- itemIndex: activeIndex,
131
- item: ensure(flattenedVisibleTree.find(item => item.id.toString() === activeId)),
132
- isDragOverlay: true
133
- }) : null)]
134
- }));
135
- return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props));
136
- };
137
-
138
- exports.withConditionalDnDRowContext = withConditionalDnDRowContext;
@@ -1,70 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- require('core-js/modules/esnext.async-iterator.filter.js');
6
- require('core-js/modules/esnext.iterator.constructor.js');
7
- require('core-js/modules/esnext.iterator.filter.js');
8
- require('core-js/modules/esnext.async-iterator.for-each.js');
9
- require('core-js/modules/esnext.iterator.for-each.js');
10
- var _jsx = require('@babel/runtime/helpers/jsx');
11
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
12
- var React = require('react');
13
- var sortable = require('@dnd-kit/sortable');
14
- var SortableItemContext = require('./SortableItemContext.js');
15
- var TreeViewContext = require('../TreeViewContext.js');
16
- var DnDTreeContext = require('./DnDTreeContext.js');
17
- var jsxRuntime = require('react/jsx-runtime');
18
-
19
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
-
21
- var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
22
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
23
-
24
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
-
26
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
27
- const withDnDSortableItemContext = Component => props => {
28
- const {
29
- withDragAndDrop
30
- } = React.useContext(TreeViewContext["default"]);
31
- const {
32
- dropIndicatorPosition,
33
- lastActiveId,
34
- setLastActiveId,
35
- isDropValid
36
- } = React.useContext(DnDTreeContext.DnDTreeContext);
37
- const id = props.item.id.toString(); // onMount generate unique options, so everyting is only ran once
38
-
39
- const draggableOptions = React.useMemo(() => ({
40
- id
41
- }), [id]);
42
- const useSortableHelpers = sortable.useSortable(draggableOptions); // calculate all the "useSortable" values as per required
43
-
44
- const draggableProps = React.useMemo(() => {
45
- if (!withDragAndDrop) return false;
46
- const {
47
- index,
48
- overIndex
49
- } = useSortableHelpers;
50
- return _objectSpread(_objectSpread({}, useSortableHelpers), {}, {
51
- shouldShowDropIndicatorPosition: overIndex === index,
52
- dropIndicatorPosition,
53
- lastActiveId,
54
- setLastActiveId,
55
- isDropValid
56
- });
57
- }, [withDragAndDrop, useSortableHelpers, dropIndicatorPosition, lastActiveId, setLastActiveId, isDropValid]); // we use a context so we can easly access information wherever without bubbling down
58
- // this context is all Memoized so as long as component is not re-mounted,
59
- // the context won't trigger un-required renders per-se...
60
-
61
- const ctx = React.useMemo(() => ({
62
- draggableProps
63
- }), [draggableProps]); // we always add the context, if draggableProps===false we don't have the DnD enabled.
64
-
65
- return /*#__PURE__*/_jsx__default["default"](SortableItemContext.SortableItemContext.Provider, {
66
- value: ctx
67
- }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)));
68
- };
69
-
70
- exports.withDnDSortableItemContext = withDnDSortableItemContext;
@@ -1,46 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- require('core-js/modules/esnext.async-iterator.filter.js');
6
- require('core-js/modules/esnext.iterator.constructor.js');
7
- require('core-js/modules/esnext.iterator.filter.js');
8
- require('core-js/modules/esnext.async-iterator.for-each.js');
9
- require('core-js/modules/esnext.iterator.for-each.js');
10
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
11
- var React = require('react');
12
- var dsIcons = require('@elliemae/ds-icons');
13
- var SortableItemContext = require('../hoc/SortableItemContext.js');
14
-
15
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
16
-
17
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
18
-
19
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
-
21
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
- const DnDHandle = _ref => {
23
- let {
24
- id,
25
- isDragOverlay
26
- } = _ref;
27
- const {
28
- draggableProps
29
- } = React.useContext(SortableItemContext.SortableItemContext);
30
- const isDragging = draggableProps && draggableProps.isDragging;
31
- return /*#__PURE__*/React.createElement(dsIcons.GripperVertical, _objectSpread(_objectSpread({
32
- role: "button"
33
- }, draggableProps && _objectSpread(_objectSpread({}, draggableProps.listeners), draggableProps.attributes)), {}, {
34
- "data-testid": "drag-handle",
35
- "data-isactive": draggableProps && !!draggableProps.active,
36
- "data-isdragoverlay": isDragOverlay,
37
- id: "".concat(id, "-drag-handle"),
38
- key: "".concat(id, "-drag-handle"),
39
- className: "drag-handle ".concat(isDragging ? '' : 'focuseable'),
40
- color: ['brand-primary', '800'],
41
- size: "s",
42
- tabIndex: 0
43
- }));
44
- };
45
-
46
- exports.DnDHandle = DnDHandle;