react-native-tree-multi-select 3.0.0-beta.5 → 3.0.0-beta.6
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/README.md +45 -21
- package/lib/module/TreeView.js +130 -24
- package/lib/module/TreeView.js.map +1 -1
- package/lib/module/components/DragOverlay.js +19 -2
- package/lib/module/components/DragOverlay.js.map +1 -1
- package/lib/module/components/NodeList.js +76 -27
- package/lib/module/components/NodeList.js.map +1 -1
- package/lib/module/constants/treeView.constants.js +5 -0
- package/lib/module/constants/treeView.constants.js.map +1 -1
- package/lib/module/helpers/moveTreeNode.helper.js +175 -47
- package/lib/module/helpers/moveTreeNode.helper.js.map +1 -1
- package/lib/module/helpers/toggleCheckbox.helper.js +5 -12
- package/lib/module/helpers/toggleCheckbox.helper.js.map +1 -1
- package/lib/module/helpers/treeNode.helper.js +49 -0
- package/lib/module/helpers/treeNode.helper.js.map +1 -1
- package/lib/module/hooks/useDragDrop.js +470 -186
- package/lib/module/hooks/useDragDrop.js.map +1 -1
- package/lib/module/hooks/useScrollToNode.js +17 -0
- package/lib/module/hooks/useScrollToNode.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/store/treeView.store.js +7 -0
- package/lib/module/store/treeView.store.js.map +1 -1
- package/lib/module/types/dragDrop.types.js +0 -2
- package/lib/typescript/src/TreeView.d.ts.map +1 -1
- package/lib/typescript/src/components/DragOverlay.d.ts.map +1 -1
- package/lib/typescript/src/components/NodeList.d.ts.map +1 -1
- package/lib/typescript/src/constants/treeView.constants.d.ts +4 -0
- package/lib/typescript/src/constants/treeView.constants.d.ts.map +1 -1
- package/lib/typescript/src/helpers/moveTreeNode.helper.d.ts +32 -0
- package/lib/typescript/src/helpers/moveTreeNode.helper.d.ts.map +1 -1
- package/lib/typescript/src/helpers/toggleCheckbox.helper.d.ts.map +1 -1
- package/lib/typescript/src/helpers/treeNode.helper.d.ts +15 -0
- package/lib/typescript/src/helpers/treeNode.helper.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useDragDrop.d.ts +24 -6
- package/lib/typescript/src/hooks/useDragDrop.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useScrollToNode.d.ts +10 -0
- package/lib/typescript/src/hooks/useScrollToNode.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/store/treeView.store.d.ts +6 -0
- package/lib/typescript/src/store/treeView.store.d.ts.map +1 -1
- package/lib/typescript/src/types/dragDrop.types.d.ts +24 -12
- package/lib/typescript/src/types/dragDrop.types.d.ts.map +1 -1
- package/lib/typescript/src/types/treeView.types.d.ts +68 -12
- package/lib/typescript/src/types/treeView.types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/TreeView.tsx +158 -26
- package/src/components/DragOverlay.tsx +32 -3
- package/src/components/NodeList.tsx +79 -27
- package/src/constants/treeView.constants.ts +6 -1
- package/src/helpers/moveTreeNode.helper.ts +160 -43
- package/src/helpers/toggleCheckbox.helper.ts +5 -12
- package/src/helpers/treeNode.helper.ts +52 -1
- package/src/hooks/useDragDrop.ts +573 -214
- package/src/hooks/useScrollToNode.ts +21 -0
- package/src/index.tsx +3 -1
- package/src/store/treeView.store.ts +6 -0
- package/src/types/dragDrop.types.ts +25 -13
- package/src/types/treeView.types.ts +71 -11
- package/lib/module/components/DropIndicator.js +0 -79
- package/lib/module/components/DropIndicator.js.map +0 -1
- package/lib/typescript/src/components/DropIndicator.d.ts +0 -12
- package/lib/typescript/src/components/DropIndicator.d.ts.map +0 -1
- package/src/components/DropIndicator.tsx +0 -95
package/README.md
CHANGED
|
@@ -47,7 +47,7 @@ Make sure to follow the native-related installation instructions for these depen
|
|
|
47
47
|
- 🔀 **Drag-and-Drop**: Long-press to drag nodes and reorder or nest them anywhere in the tree.
|
|
48
48
|
- 💻 **Cross-Platform**: Works seamlessly across iOS, Android, and web (with React Native Web).
|
|
49
49
|
|
|
50
|
-
> **Note**: Drag-and-drop is
|
|
50
|
+
> **Note**: Drag-and-drop is fully supported on iOS and Android. Web support is a work in progress, so drag-and-drop is **disabled by default on web** - pass `dragAndDrop={{ enabled: true }}` to opt in there.
|
|
51
51
|
|
|
52
52
|
## Usage
|
|
53
53
|
|
|
@@ -120,6 +120,7 @@ export function TreeViewUsageExample(){
|
|
|
120
120
|
```tsx
|
|
121
121
|
import {
|
|
122
122
|
TreeView,
|
|
123
|
+
moveTreeNode,
|
|
123
124
|
type TreeNode,
|
|
124
125
|
type TreeViewRef,
|
|
125
126
|
type DragEndEvent
|
|
@@ -132,8 +133,12 @@ export function DragDropExample(){
|
|
|
132
133
|
const treeViewRef = React.useRef<TreeViewRef | null>(null);
|
|
133
134
|
|
|
134
135
|
const handleDragEnd = (event: DragEndEvent) => {
|
|
135
|
-
// event
|
|
136
|
-
|
|
136
|
+
// `event` is a lightweight move delta (draggedNodeId, targetNodeId, position,
|
|
137
|
+
// previous/new parent + index) - not the whole tree. For a controlled tree,
|
|
138
|
+
// reconstruct it with the exported `moveTreeNode` helper:
|
|
139
|
+
setData(prev => moveTreeNode(prev, event.draggedNodeId, event.targetNodeId, event.position));
|
|
140
|
+
// Or, if you keep the tree inside the component, read it on demand:
|
|
141
|
+
// setData(treeViewRef.current?.getTreeData() ?? prev);
|
|
137
142
|
};
|
|
138
143
|
|
|
139
144
|
return(
|
|
@@ -152,7 +157,9 @@ export function DragDropExample(){
|
|
|
152
157
|
|
|
153
158
|
Long-press a node to start dragging. Drag over other nodes to see drop indicators. Drop above/below to reorder as siblings, or drop inside a parent node to nest it. The tree auto-scrolls when dragging near the edges.
|
|
154
159
|
|
|
155
|
-
**Search + drag**: Drag-and-drop
|
|
160
|
+
**Search + drag**: Drag-and-drop is disabled while a search filter is active (long-press does not initiate a drag). The filtered view hides nodes that still exist in the full tree, so a drop position that looks unambiguous on screen could land the node next to hidden siblings. Clear the search to reorder interactively, or use the imperative [`moveNode`](#treeviewrefid) ref method, which works regardless of the active filter.
|
|
161
|
+
|
|
162
|
+
**Accessibility**: When a screen reader is active, picking up, moving, and cancelling a drag are announced (via `AccessibilityInfo`). For a fully assistive-tech-driven reorder (without the long-press gesture), wire your own accessibility actions to the imperative [`moveNode`](#treeviewrefid) ref method.
|
|
156
163
|
|
|
157
164
|
For visual customizations (overlay styles, indicator colors, or fully custom components), see the [`dragAndDrop.customizations`](#dragdropcustomizationsid) option.
|
|
158
165
|
|
|
@@ -186,7 +193,7 @@ For visual customizations (overlay styles, indicator colors, or fully custom com
|
|
|
186
193
|
|
|
187
194
|
| Property | Type | Required | Description |
|
|
188
195
|
| --------------------- | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ |
|
|
189
|
-
| `enabled` | `boolean` | No | Enable drag-and-drop reordering
|
|
196
|
+
| `enabled` | `boolean` | No | Enable drag-and-drop reordering. Default: `true` on iOS/Android when `dragAndDrop` is provided, `false` on web (WIP). Set explicitly to override per platform. |
|
|
190
197
|
| `onDragStart` | `(event: `[DragStartEvent](#dragstarteventid--string)`<ID>) => void` | No | Callback fired when a drag operation begins |
|
|
191
198
|
| `onDragEnd` | `(event: `[DragEndEvent](#dragendeventid--string)`<ID>) => void` | No | Callback fired after a node is successfully dropped at a new position |
|
|
192
199
|
| `onDragCancel` | `(event: `[DragCancelEvent](#dragcanceleventid--string)`<ID>) => void` | No | Callback fired when a drag is cancelled without a successful drop |
|
|
@@ -194,13 +201,16 @@ For visual customizations (overlay styles, indicator colors, or fully custom com
|
|
|
194
201
|
| `autoScrollThreshold` | `number` | No | Distance from edge (px) to trigger auto-scroll (default: 60) |
|
|
195
202
|
| `autoScrollSpeed` | `number` | No | Speed multiplier for auto-scroll (default: 1.0) |
|
|
196
203
|
| `dragOverlayOffset` | `number` | No | Overlay offset from the finger, in item-height units (default: -2, i.e. two rows above finger) |
|
|
204
|
+
| `overlayYCorrection` | `number` | No | Advanced: extra vertical correction for the overlay, in item-height units, added on top of `dragOverlayOffset`. Compensates for Android reporting touch `locationY` differently from iOS. Default: -2 on Android, 0 elsewhere. |
|
|
197
205
|
| `autoExpandDelay` | `number` | No | Delay in ms before auto-expanding a collapsed node during drag hover (default: 800) |
|
|
206
|
+
| `autoExpand` | `boolean` | No | Auto-expand a collapsed node while hovering "inside" it during a drag (default: `true`). Set `false` to disable hover-to-expand. |
|
|
207
|
+
| `magneticSnap` | `boolean` | No | Animate the overlay with a magnetic "snap" spring when the drop level changes (default: `true`). Set `false` to keep the overlay tracking the level without the spring (e.g. for reduced-motion). |
|
|
198
208
|
| `customizations` | [DragDropCustomizations](#dragdropcustomizationsid)`<ID>` | No | Customizations for drag-and-drop visuals (overlay, indicator, opacity) |
|
|
199
209
|
| `canDrop` | `(draggedNode, targetNode, position) => boolean` | No | Callback to determine if a node can be dropped on a specific target |
|
|
200
|
-
| `maxDepth` | `number` | No | Maximum nesting depth allowed. Drops
|
|
210
|
+
| `maxDepth` | `number` | No | Maximum nesting depth allowed, as a 0-based level index (e.g. `maxDepth: 2` permits levels 0, 1, and 2 - three visible depths). Drops that would exceed it are suppressed. |
|
|
201
211
|
| `canNodeHaveChildren` | `(node: TreeNode<ID>) => boolean` | No | Callback to determine if a node can accept children |
|
|
202
212
|
| `canDrag` | `(node: TreeNode<ID>) => boolean` | No | Callback to determine if a node can be dragged (default: all nodes) |
|
|
203
|
-
| `autoScrollToDroppedNode` | `boolean \| DropAutoScrollOptions` | No | Auto-scroll to the dropped node after a successful drop. Pass `false` to disable, `true` for defaults, or an object to customize. Default: `{ enabled: true, animated: true, viewPosition: 0.5 }` |
|
|
213
|
+
| `autoScrollToDroppedNode` | `boolean \| DropAutoScrollOptions` | No | Auto-scroll to the dropped node after a successful drop, if it ended up outside the viewport (no scroll happens when the node is already visible). Pass `false` to disable, `true` for defaults, or an object to customize. Default: `{ enabled: true, animated: true, viewPosition: 0.5 }` |
|
|
204
214
|
|
|
205
215
|
##### Notes
|
|
206
216
|
|
|
@@ -250,7 +260,8 @@ For visual customizations (overlay styles, indicator colors, or fully custom com
|
|
|
250
260
|
| `setSearchText` | `(searchText: string, searchKeys?: string[]) => void` | Set the search text and optionally the search keys. Default search key is "name"<br /><br />Recommended to call this inside a debounced function if you find any performance issue otherwise. |
|
|
251
261
|
| `scrollToNodeID` | `(params: `[ScrollToNodeParams](#scrolltonodeparams)`<ID>) => void;` | Scrolls the tree view to the node of the specified ID. |
|
|
252
262
|
| `getChildToParentMap` | `() => Map<ID, ID>` | Get the child to parent tree view map. |
|
|
253
|
-
| `
|
|
263
|
+
| `getTreeData` | `() => `[TreeNode](#treenodeid--string)`<ID>[]` | Get the current (live, reordered) tree data held by the component. Handy after a drag or `moveNode` to read the full tree without it being pushed through a move event. **Returns a live internal reference - treat it as read-only; clone it (e.g. via the exported `moveTreeNode` or `structuredClone`) before mutating, or you will desync the internal maps.** |
|
|
264
|
+
| `moveNode` | `(nodeId: ID, targetNodeId: ID, position: `[DropPosition](#dropposition)`, options?: { validate?: boolean; scrollToNode?: boolean \| DropAutoScrollOptions }) => `[MoveResult](#moveresultid--string)`<ID> \| null` | Programmatically move a node. Returns a lightweight `MoveResult` delta, or `null` if the move was a no-op / invalid (e.g. onto itself or, with `{ validate: true }`, blocked by `canDrop` / `maxDepth` / `canNodeHaveChildren`). `{ validate: true }` only enforces those rules when a `dragAndDrop` prop is configured (they live on it); without one, `validate` is ignored (a dev warning is logged) and the move proceeds. Pass `{ scrollToNode: true }` to scroll the moved node into view. Does **not** fire `onDragEnd`. Useful for undo/redo or external state management. |
|
|
254
265
|
|
|
255
266
|
#### ScrollToNodeParams
|
|
256
267
|
| Property | Type | Required | Description |
|
|
@@ -344,11 +355,11 @@ Type: `boolean` OR `"indeterminate"`
|
|
|
344
355
|
|
|
345
356
|
*Touch handlers to spread on a drag handle element within a custom node row.*
|
|
346
357
|
|
|
347
|
-
| Property | Type
|
|
348
|
-
| -------------- |
|
|
349
|
-
| `onTouchStart` | `(e:
|
|
350
|
-
| `onTouchEnd` | `() => void`
|
|
351
|
-
| `onTouchCancel`| `() => void`
|
|
358
|
+
| Property | Type | Required | Description |
|
|
359
|
+
| -------------- | ------------------------------------ | -------- | ------------------------------ |
|
|
360
|
+
| `onTouchStart` | `(e: GestureResponderEvent) => void` | Yes | Touch start handler for drag |
|
|
361
|
+
| `onTouchEnd` | `() => void` | Yes | Touch end handler |
|
|
362
|
+
| `onTouchCancel`| `() => void` | Yes | Touch cancel handler |
|
|
352
363
|
|
|
353
364
|
---
|
|
354
365
|
|
|
@@ -362,16 +373,25 @@ Type: `boolean` OR `"indeterminate"`
|
|
|
362
373
|
|
|
363
374
|
---
|
|
364
375
|
|
|
365
|
-
####
|
|
376
|
+
#### MoveResult`<ID = string>`
|
|
366
377
|
|
|
367
|
-
*
|
|
378
|
+
*A lightweight description of a completed move. Returned by the `moveNode` ref method and passed to the `onDragEnd` callback (i.e. `DragEndEvent` is an alias of `MoveResult`). It carries only the move delta - not a full tree copy - so you can update external state or persist the change cheaply. To get the full reordered tree, call the `getTreeData` ref method or reconstruct it with the exported `moveTreeNode` helper.*
|
|
368
379
|
|
|
369
|
-
| Property
|
|
370
|
-
|
|
|
371
|
-
| `draggedNodeId`
|
|
372
|
-
| `targetNodeId`
|
|
373
|
-
| `position`
|
|
374
|
-
| `
|
|
380
|
+
| Property | Type | Description |
|
|
381
|
+
| ------------------ | ----------------------------- | ------------------------------------------------------------ |
|
|
382
|
+
| `draggedNodeId` | `ID` | The id of the node that was moved |
|
|
383
|
+
| `targetNodeId` | `ID` | The id of the target node the move was relative to |
|
|
384
|
+
| `position` | [DropPosition](#dropposition) | Where relative to the target: `above`/`below` = sibling, `inside` = child |
|
|
385
|
+
| `previousParentId` | `ID \| null` | Parent id before the move (`null` if it was a root-level node) |
|
|
386
|
+
| `newParentId` | `ID \| null` | Parent id after the move (`null` if it is now a root-level node) |
|
|
387
|
+
| `previousIndex` | `number` | Index within the previous parent's children (or the root array) |
|
|
388
|
+
| `newIndex` | `number` | Index within the new parent's children (or the root array) |
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
#### DragEndEvent`<ID = string>`
|
|
393
|
+
|
|
394
|
+
*The event object passed to the `onDragEnd` callback after a successful drop. This is an alias of [`MoveResult`](#moveresultid--string)`<ID>` - see its fields above.*
|
|
375
395
|
|
|
376
396
|
#### DragCancelEvent`<ID = string>`
|
|
377
397
|
|
|
@@ -426,6 +446,8 @@ Type: `"above"` | `"below"` | `"inside"`
|
|
|
426
446
|
| `circleSize` | `number` | No | Diameter of the circle at the line's start (default: 10) |
|
|
427
447
|
| `highlightColor` | `string` | No | Background color of the "inside" highlight (default: `"rgba(0, 120, 255, 0.15)"`) |
|
|
428
448
|
| `highlightBorderColor`| `string` | No | Border color of the "inside" highlight (default: `"rgba(0, 120, 255, 0.5)"`) |
|
|
449
|
+
| `highlightBorderWidth`| `number` | No | Border width of the "inside" highlight box (default: 2) |
|
|
450
|
+
| `highlightBorderRadius`| `number`| No | Corner radius of the "inside" highlight box (default: 4) |
|
|
429
451
|
|
|
430
452
|
---
|
|
431
453
|
|
|
@@ -437,9 +459,11 @@ Type: `"above"` | `"below"` | `"inside"`
|
|
|
437
459
|
| --------------- | ---------------------- | -------- | ------------------------------------------------ |
|
|
438
460
|
| `backgroundColor`| `string` | No | Background color (default: `"rgba(255, 255, 255, 0.95)"`) |
|
|
439
461
|
| `shadowColor` | `string` | No | Shadow color (default: `"#000"`) |
|
|
462
|
+
| `shadowOffset` | `{ width: number; height: number }` | No | Shadow offset, iOS (default: `{ width: 0, height: 2 }`) |
|
|
440
463
|
| `shadowOpacity` | `number` | No | Shadow opacity (default: 0.25) |
|
|
441
464
|
| `shadowRadius` | `number` | No | Shadow radius (default: 4) |
|
|
442
465
|
| `elevation` | `number` | No | Android elevation (default: 10) |
|
|
466
|
+
| `zIndex` | `number` | No | Stacking order of the overlay (default: 9999) |
|
|
443
467
|
| `style` | `StyleProp<ViewStyle>` | No | Custom style applied to the overlay container |
|
|
444
468
|
|
|
445
469
|
---
|
package/lib/module/TreeView.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { forwardRef, startTransition, useCallback, useEffect, useId, useImperativeHandle, useRef } from "react";
|
|
3
|
+
import { forwardRef, startTransition, useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef } from "react";
|
|
4
4
|
import NodeList from "./components/NodeList.js";
|
|
5
|
-
import { selectAll, selectAllFiltered, unselectAll, unselectAllFiltered, initializeNodeMaps, expandAll, collapseAll, toggleCheckboxes, expandNodes, collapseNodes,
|
|
5
|
+
import { selectAll, selectAllFiltered, unselectAll, unselectAllFiltered, initializeNodeMaps, expandAll, collapseAll, toggleCheckboxes, expandNodes, collapseNodes, moveTreeNode, applyMoveToStore, findNodePosition, findNodePositionFromMaps, getSubtreeDepthFromMap, getNodeDepthFromParentMap } from "./helpers/index.js";
|
|
6
6
|
import { deleteTreeViewStore, getTreeViewStore, useTreeViewStore } from "./store/treeView.store.js";
|
|
7
7
|
import usePreviousState from "./utils/usePreviousState.js";
|
|
8
8
|
import { useShallow } from "zustand/react/shallow";
|
|
9
9
|
import useDeepCompareEffect from "./utils/useDeepCompareEffect.js";
|
|
10
10
|
import { typedMemo } from "./utils/typedMemo.js";
|
|
11
|
+
import { scrollMovedNodeIntoView } from "./hooks/useScrollToNode.js";
|
|
11
12
|
import { fastIsEqual } from "fast-is-equal";
|
|
12
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
14
|
function _innerTreeView(props, ref) {
|
|
@@ -41,7 +42,8 @@ function _innerTreeView(props, ref) {
|
|
|
41
42
|
checked,
|
|
42
43
|
indeterminate,
|
|
43
44
|
setSelectionPropagation,
|
|
44
|
-
cleanUpTreeViewStore
|
|
45
|
+
cleanUpTreeViewStore,
|
|
46
|
+
draggedNodeId
|
|
45
47
|
} = useTreeViewStore(storeId)(useShallow(state => ({
|
|
46
48
|
expanded: state.expanded,
|
|
47
49
|
updateExpanded: state.updateExpanded,
|
|
@@ -53,7 +55,8 @@ function _innerTreeView(props, ref) {
|
|
|
53
55
|
checked: state.checked,
|
|
54
56
|
indeterminate: state.indeterminate,
|
|
55
57
|
setSelectionPropagation: state.setSelectionPropagation,
|
|
56
|
-
cleanUpTreeViewStore: state.cleanUpTreeViewStore
|
|
58
|
+
cleanUpTreeViewStore: state.cleanUpTreeViewStore,
|
|
59
|
+
draggedNodeId: state.draggedNodeId
|
|
57
60
|
})));
|
|
58
61
|
useImperativeHandle(ref, () => ({
|
|
59
62
|
selectAll: () => selectAll(storeId),
|
|
@@ -69,35 +72,69 @@ function _innerTreeView(props, ref) {
|
|
|
69
72
|
setSearchText,
|
|
70
73
|
scrollToNodeID,
|
|
71
74
|
getChildToParentMap,
|
|
75
|
+
getTreeData,
|
|
72
76
|
moveNode
|
|
73
77
|
}));
|
|
74
78
|
const scrollToNodeHandlerRef = useRef(null);
|
|
75
79
|
const prevSearchText = usePreviousState(searchText);
|
|
76
80
|
const internalDataRef = useRef(null);
|
|
81
|
+
// Holds a `data` prop change that arrived mid-drag; applied once the drag ends so
|
|
82
|
+
// the destructive reinit never swaps the node maps out from under an active drag.
|
|
83
|
+
const pendingDataRef = useRef(null);
|
|
77
84
|
|
|
78
|
-
// Wrap onDragEnd to
|
|
85
|
+
// Wrap onDragEnd to capture the post-move tree before calling the consumer's
|
|
86
|
+
// callback. The reordered tree lives in the store (the event only carries the
|
|
87
|
+
// lightweight move delta); snapshotting it here lets a controlled consumer feed
|
|
88
|
+
// an equal tree back into `data` and skip re-initialization.
|
|
79
89
|
const wrappedOnDragEnd = useCallback(event => {
|
|
80
|
-
internalDataRef.current =
|
|
90
|
+
internalDataRef.current = getTreeViewStore(storeId).getState().initialTreeViewData;
|
|
91
|
+
// A `data` change deferred during this drag predates the move that just
|
|
92
|
+
// committed; applying it would silently undo the drop after onDragEnd
|
|
93
|
+
// already told the consumer it happened. Discard it - a controlled
|
|
94
|
+
// consumer reacts to onDragEnd with fresh data anyway.
|
|
95
|
+
pendingDataRef.current = null;
|
|
81
96
|
onDragEnd?.(event);
|
|
82
|
-
}, [onDragEnd]);
|
|
83
|
-
|
|
97
|
+
}, [onDragEnd, storeId]);
|
|
98
|
+
|
|
99
|
+
// Reinitialize the store from a tree. Held in a ref so the value stays stable
|
|
100
|
+
// (no dep churn) while always capturing the latest props/store actions.
|
|
101
|
+
const applyDataRef = useRef(() => {});
|
|
102
|
+
applyDataRef.current = nextData => {
|
|
84
103
|
// If data matches what was set internally from a drag-drop, skip reinitialize
|
|
85
|
-
if (internalDataRef.current !== null && fastIsEqual(
|
|
104
|
+
if (internalDataRef.current !== null && fastIsEqual(nextData, internalDataRef.current)) {
|
|
86
105
|
internalDataRef.current = null;
|
|
87
106
|
return;
|
|
88
107
|
}
|
|
89
108
|
internalDataRef.current = null;
|
|
90
109
|
cleanUpTreeViewStore();
|
|
91
|
-
updateInitialTreeViewData(
|
|
110
|
+
updateInitialTreeViewData(nextData);
|
|
92
111
|
if (selectionPropagation) setSelectionPropagation(selectionPropagation);
|
|
93
|
-
initializeNodeMaps(storeId,
|
|
112
|
+
initializeNodeMaps(storeId, nextData);
|
|
94
113
|
|
|
95
114
|
// Check any pre-selected nodes
|
|
96
115
|
toggleCheckboxes(storeId, preselectedIds, true);
|
|
97
116
|
|
|
98
117
|
// Expand pre-expanded nodes
|
|
99
118
|
expandNodes(storeId, [...preExpandedIds, ...(initialScrollNodeID ? [initialScrollNodeID] : [])]);
|
|
119
|
+
};
|
|
120
|
+
useDeepCompareEffect(() => {
|
|
121
|
+
// A reinit while a drag is in flight would replace nodeMap/childToParentMap
|
|
122
|
+
// under the drag's feet and corrupt the commit. Defer it until the drag ends.
|
|
123
|
+
if (getTreeViewStore(storeId).getState().draggedNodeId !== null) {
|
|
124
|
+
pendingDataRef.current = data;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
applyDataRef.current(data);
|
|
100
128
|
}, [data]);
|
|
129
|
+
|
|
130
|
+
// Apply any data change that was deferred during a drag, once the drag ends.
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
if (draggedNodeId === null && pendingDataRef.current !== null) {
|
|
133
|
+
const pending = pendingDataRef.current;
|
|
134
|
+
pendingDataRef.current = null;
|
|
135
|
+
applyDataRef.current(pending);
|
|
136
|
+
}
|
|
137
|
+
}, [draggedNodeId]);
|
|
101
138
|
function selectNodes(ids) {
|
|
102
139
|
toggleCheckboxes(storeId, ids, true);
|
|
103
140
|
}
|
|
@@ -115,18 +152,76 @@ function _innerTreeView(props, ref) {
|
|
|
115
152
|
const treeViewStore = getTreeViewStore(storeId);
|
|
116
153
|
return treeViewStore.getState().childToParentMap;
|
|
117
154
|
}
|
|
118
|
-
function
|
|
155
|
+
function getTreeData() {
|
|
156
|
+
return getTreeViewStore(storeId).getState().initialTreeViewData;
|
|
157
|
+
}
|
|
158
|
+
function moveNode(nodeId, targetNodeId, position, options) {
|
|
119
159
|
const store = getTreeViewStore(storeId);
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
160
|
+
const {
|
|
161
|
+
initialTreeViewData: currentData,
|
|
162
|
+
nodeMap,
|
|
163
|
+
childToParentMap
|
|
164
|
+
} = store.getState();
|
|
165
|
+
|
|
166
|
+
// A programmatic move during an in-flight drag would reinitialize
|
|
167
|
+
// nodeMap/childToParentMap under the drag's feet and corrupt the pending
|
|
168
|
+
// commit (same guard as the deferred data-prop reinit above).
|
|
169
|
+
if (store.getState().draggedNodeId !== null) {
|
|
170
|
+
if (__DEV__) {
|
|
171
|
+
console.warn("[react-native-tree-multi-select] moveNode() ignored: a drag is in progress.");
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Validation rules (canDrop / maxDepth / canNodeHaveChildren) live on the
|
|
177
|
+
// dragAndDrop prop, so `validate` only has rules to enforce when that prop is
|
|
178
|
+
// configured. Warn in dev if the caller asked to validate but nothing can.
|
|
179
|
+
if (__DEV__ && options?.validate && !(dragAndDrop?.canDrop || dragAndDrop?.maxDepth !== undefined || dragAndDrop?.canNodeHaveChildren)) {
|
|
180
|
+
console.warn("[react-native-tree-multi-select] moveNode({ validate: true }) was called, " + "but no validation rules are configured. canDrop / maxDepth / " + "canNodeHaveChildren are read from the `dragAndDrop` prop; without them the " + "move proceeds unvalidated.");
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Optional validation mirrors the interactive drag constraints so a
|
|
184
|
+
// programmatic move can't silently build a tree the drag UI would reject.
|
|
185
|
+
if (options?.validate && dragAndDrop) {
|
|
186
|
+
const draggedNode = nodeMap.get(nodeId);
|
|
187
|
+
const targetNode = nodeMap.get(targetNodeId);
|
|
188
|
+
if (!draggedNode || !targetNode) return null;
|
|
189
|
+
if (position === "inside" && dragAndDrop.canNodeHaveChildren && !dragAndDrop.canNodeHaveChildren(targetNode)) return null;
|
|
190
|
+
if (dragAndDrop.canDrop && !dragAndDrop.canDrop(draggedNode, targetNode, position)) return null;
|
|
191
|
+
if (dragAndDrop.maxDepth !== undefined) {
|
|
192
|
+
const targetLevel = getNodeDepthFromParentMap(childToParentMap, targetNodeId);
|
|
193
|
+
const subtreeDepth = getSubtreeDepthFromMap(nodeMap, nodeId);
|
|
194
|
+
const baseLevel = position === "inside" ? targetLevel + 1 : targetLevel;
|
|
195
|
+
if (baseLevel + subtreeDepth > dragAndDrop.maxDepth) return null;
|
|
196
|
+
}
|
|
127
197
|
}
|
|
128
|
-
|
|
198
|
+
|
|
199
|
+
// The maps still describe the pre-move tree here, so the O(depth) lookup applies.
|
|
200
|
+
const previousPosition = findNodePositionFromMaps(currentData, nodeMap, childToParentMap, nodeId);
|
|
201
|
+
const newData = moveTreeNode(currentData, nodeId, targetNodeId, position);
|
|
202
|
+
// moveTreeNode returns the original array reference on a no-op / invalid move
|
|
203
|
+
// (same node, dropping into own descendant, or node/target not found).
|
|
204
|
+
if (newData === currentData) return null;
|
|
205
|
+
|
|
206
|
+
// Same commit pipeline as the interactive drag path.
|
|
207
|
+
applyMoveToStore(storeId, newData, nodeId, targetNodeId, position);
|
|
129
208
|
internalDataRef.current = newData;
|
|
209
|
+
|
|
210
|
+
// Optionally scroll the moved node into view (the interactive drag does this
|
|
211
|
+
// automatically; programmatic moves opt in). Deferred so the expand/render settles.
|
|
212
|
+
if (options?.scrollToNode) {
|
|
213
|
+
scrollMovedNodeIntoView(scrollToNodeHandlerRef, nodeId, options.scrollToNode);
|
|
214
|
+
}
|
|
215
|
+
const newPosition = findNodePosition(newData, nodeId);
|
|
216
|
+
return {
|
|
217
|
+
draggedNodeId: nodeId,
|
|
218
|
+
targetNodeId,
|
|
219
|
+
position,
|
|
220
|
+
previousParentId: previousPosition?.parentId ?? null,
|
|
221
|
+
previousIndex: previousPosition?.index ?? -1,
|
|
222
|
+
newParentId: newPosition?.parentId ?? null,
|
|
223
|
+
newIndex: newPosition?.index ?? -1
|
|
224
|
+
};
|
|
130
225
|
}
|
|
131
226
|
const getIds = useCallback(node => {
|
|
132
227
|
if (!node.children || node.children.length === 0) {
|
|
@@ -160,6 +255,20 @@ function _innerTreeView(props, ref) {
|
|
|
160
255
|
deleteTreeViewStore(storeId);
|
|
161
256
|
};
|
|
162
257
|
}, [cleanUpTreeViewStore, storeId]);
|
|
258
|
+
|
|
259
|
+
// Consumers routinely pass `dragAndDrop` as an inline object literal, so its
|
|
260
|
+
// identity changes every render even when nothing differs. Stabilize by deep
|
|
261
|
+
// equality (callbacks compare by reference) so NodeList's memo - and with it
|
|
262
|
+
// the drag overlay - isn't churned by unrelated re-renders mid-drag.
|
|
263
|
+
const stableDragAndDropRef = useRef(dragAndDrop);
|
|
264
|
+
if (!fastIsEqual(stableDragAndDropRef.current, dragAndDrop)) {
|
|
265
|
+
stableDragAndDropRef.current = dragAndDrop;
|
|
266
|
+
}
|
|
267
|
+
const stableDragAndDrop = stableDragAndDropRef.current;
|
|
268
|
+
const dragAndDropWithWrappedEnd = useMemo(() => stableDragAndDrop && {
|
|
269
|
+
...stableDragAndDrop,
|
|
270
|
+
onDragEnd: wrappedOnDragEnd
|
|
271
|
+
}, [stableDragAndDrop, wrappedOnDragEnd]);
|
|
163
272
|
return /*#__PURE__*/_jsx(NodeList, {
|
|
164
273
|
storeId: storeId,
|
|
165
274
|
scrollToNodeHandlerRef: scrollToNodeHandlerRef,
|
|
@@ -171,10 +280,7 @@ function _innerTreeView(props, ref) {
|
|
|
171
280
|
ExpandCollapseIconComponent: ExpandCollapseIconComponent,
|
|
172
281
|
ExpandCollapseTouchableComponent: ExpandCollapseTouchableComponent,
|
|
173
282
|
CustomNodeRowComponent: CustomNodeRowComponent,
|
|
174
|
-
dragAndDrop:
|
|
175
|
-
...dragAndDrop,
|
|
176
|
-
onDragEnd: wrappedOnDragEnd
|
|
177
|
-
}
|
|
283
|
+
dragAndDrop: dragAndDropWithWrappedEnd
|
|
178
284
|
});
|
|
179
285
|
}
|
|
180
286
|
const _TreeView = /*#__PURE__*/forwardRef(_innerTreeView);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","startTransition","useCallback","useEffect","useId","useImperativeHandle","useRef","NodeList","selectAll","selectAllFiltered","unselectAll","unselectAllFiltered","initializeNodeMaps","expandAll","collapseAll","toggleCheckboxes","expandNodes","collapseNodes","recalculateCheckedStates","moveTreeNode","deleteTreeViewStore","getTreeViewStore","useTreeViewStore","usePreviousState","useShallow","useDeepCompareEffect","typedMemo","fastIsEqual","jsx","_jsx","_innerTreeView","props","ref","data","onCheck","onExpand","selectionPropagation","preselectedIds","preExpandedIds","initialScrollNodeID","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","dragAndDrop","onDragEnd","storeId","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","indeterminate","setSelectionPropagation","cleanUpTreeViewStore","state","ids","selectNodes","unselectNodes","setSearchText","scrollToNodeID","getChildToParentMap","moveNode","scrollToNodeHandlerRef","prevSearchText","internalDataRef","wrappedOnDragEnd","event","current","newTreeData","text","keys","params","treeViewStore","getState","childToParentMap","nodeId","targetNodeId","position","store","currentData","newData","getIds","node","children","length","id","flatMap","item","Array","from","Set","_TreeView","TreeView"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["forwardRef","startTransition","useCallback","useEffect","useId","useImperativeHandle","useMemo","useRef","NodeList","selectAll","selectAllFiltered","unselectAll","unselectAllFiltered","initializeNodeMaps","expandAll","collapseAll","toggleCheckboxes","expandNodes","collapseNodes","moveTreeNode","applyMoveToStore","findNodePosition","findNodePositionFromMaps","getSubtreeDepthFromMap","getNodeDepthFromParentMap","deleteTreeViewStore","getTreeViewStore","useTreeViewStore","usePreviousState","useShallow","useDeepCompareEffect","typedMemo","scrollMovedNodeIntoView","fastIsEqual","jsx","_jsx","_innerTreeView","props","ref","data","onCheck","onExpand","selectionPropagation","preselectedIds","preExpandedIds","initialScrollNodeID","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","dragAndDrop","onDragEnd","storeId","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","indeterminate","setSelectionPropagation","cleanUpTreeViewStore","draggedNodeId","state","ids","selectNodes","unselectNodes","setSearchText","scrollToNodeID","getChildToParentMap","getTreeData","moveNode","scrollToNodeHandlerRef","prevSearchText","internalDataRef","pendingDataRef","wrappedOnDragEnd","event","current","getState","applyDataRef","nextData","pending","text","keys","params","treeViewStore","childToParentMap","nodeId","targetNodeId","position","options","store","currentData","nodeMap","__DEV__","console","warn","validate","canDrop","maxDepth","undefined","canNodeHaveChildren","draggedNode","get","targetNode","targetLevel","subtreeDepth","baseLevel","previousPosition","newData","scrollToNode","newPosition","previousParentId","parentId","previousIndex","index","newParentId","newIndex","getIds","node","children","length","id","flatMap","item","Array","from","Set","stableDragAndDropRef","stableDragAndDrop","dragAndDropWithWrappedEnd","_TreeView","TreeView"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { memo } from "react";
|
|
3
4
|
import { Animated, StyleSheet, View } from "react-native";
|
|
5
|
+
import { fastIsEqual } from "fast-is-equal";
|
|
4
6
|
import { CheckboxView } from "./CheckboxView.js";
|
|
5
7
|
import { CustomExpandCollapseIcon } from "./CustomExpandCollapseIcon.js";
|
|
6
8
|
import { defaultIndentationMultiplier } from "../constants/treeView.constants.js";
|
|
7
9
|
import { getTreeViewStore } from "../store/treeView.store.js";
|
|
8
10
|
import { getCheckboxValue } from "../helpers/index.js";
|
|
9
|
-
import { typedMemo } from "../utils/typedMemo.js";
|
|
10
11
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
12
|
function _DragOverlay(props) {
|
|
12
13
|
const {
|
|
@@ -41,6 +42,9 @@ function _DragOverlay(props) {
|
|
|
41
42
|
...(overlayStyleProps.shadowColor != null && {
|
|
42
43
|
shadowColor: overlayStyleProps.shadowColor
|
|
43
44
|
}),
|
|
45
|
+
...(overlayStyleProps.shadowOffset != null && {
|
|
46
|
+
shadowOffset: overlayStyleProps.shadowOffset
|
|
47
|
+
}),
|
|
44
48
|
...(overlayStyleProps.shadowOpacity != null && {
|
|
45
49
|
shadowOpacity: overlayStyleProps.shadowOpacity
|
|
46
50
|
}),
|
|
@@ -49,6 +53,9 @@ function _DragOverlay(props) {
|
|
|
49
53
|
}),
|
|
50
54
|
...(overlayStyleProps.elevation != null && {
|
|
51
55
|
elevation: overlayStyleProps.elevation
|
|
56
|
+
}),
|
|
57
|
+
...(overlayStyleProps.zIndex != null && {
|
|
58
|
+
zIndex: overlayStyleProps.zIndex
|
|
52
59
|
})
|
|
53
60
|
}, overlayStyleProps?.style, {
|
|
54
61
|
transform: [{
|
|
@@ -86,7 +93,17 @@ function _DragOverlay(props) {
|
|
|
86
93
|
})
|
|
87
94
|
});
|
|
88
95
|
}
|
|
89
|
-
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Re-rendering the overlay mid-drag makes React Native re-bind the Animated
|
|
99
|
+
* transform, which can flash the overlay at its un-translated position for a
|
|
100
|
+
* frame (visible when e.g. auto-expand re-renders the tree while dragging).
|
|
101
|
+
* Nothing the overlay renders can change mid-drag, so block re-renders unless
|
|
102
|
+
* a prop meaningfully differs - style/customization objects are compared by
|
|
103
|
+
* value because consumers routinely pass fresh (but equal) literals per render.
|
|
104
|
+
*/
|
|
105
|
+
const overlayPropsAreEqual = (prev, next) => prev.storeId === next.storeId && prev.overlayY === next.overlayY && prev.overlayX === next.overlayX && prev.node === next.node && prev.level === next.level && prev.indentationMultiplier === next.indentationMultiplier && prev.CheckboxComponent === next.CheckboxComponent && prev.ExpandCollapseIconComponent === next.ExpandCollapseIconComponent && prev.CustomNodeRowComponent === next.CustomNodeRowComponent && fastIsEqual(prev.checkBoxViewStyleProps, next.checkBoxViewStyleProps) && fastIsEqual(prev.dragDropCustomizations, next.dragDropCustomizations);
|
|
106
|
+
export const DragOverlay = /*#__PURE__*/memo(_DragOverlay, overlayPropsAreEqual);
|
|
90
107
|
const styles = StyleSheet.create({
|
|
91
108
|
overlay: {
|
|
92
109
|
position: "absolute",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Animated","StyleSheet","View","CheckboxView","CustomExpandCollapseIcon","defaultIndentationMultiplier","getTreeViewStore","getCheckboxValue","
|
|
1
|
+
{"version":3,"names":["memo","Animated","StyleSheet","View","fastIsEqual","CheckboxView","CustomExpandCollapseIcon","defaultIndentationMultiplier","getTreeViewStore","getCheckboxValue","jsx","_jsx","jsxs","_jsxs","_DragOverlay","props","storeId","overlayY","overlayX","node","level","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","CustomNodeRowComponent","checkBoxViewStyleProps","dragDropCustomizations","store","checked","indeterminate","getState","checkedValue","has","id","overlayStyleProps","dragOverlayStyleProps","CustomOverlay","CustomDragOverlayComponent","pointerEvents","style","styles","overlay","backgroundColor","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","zIndex","transform","translateX","translateY","children","isExpanded","onCheck","onExpand","nodeRow","paddingStart","text","name","onValueChange","value","length","expandArrow","overlayPropsAreEqual","prev","next","DragOverlay","create","position","left","right","width","height","flex","flexDirection","alignItems","minWidth"],"sourceRoot":"../../../src","sources":["components/DragOverlay.tsx"],"mappings":"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","ignoreList":[]}
|