react-native-tree-multi-select 3.0.0-beta.5 → 3.0.0-beta.7

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 (64) hide show
  1. package/README.md +57 -26
  2. package/lib/module/TreeView.js +130 -24
  3. package/lib/module/TreeView.js.map +1 -1
  4. package/lib/module/components/DragOverlay.js +19 -2
  5. package/lib/module/components/DragOverlay.js.map +1 -1
  6. package/lib/module/components/NodeList.js +82 -29
  7. package/lib/module/components/NodeList.js.map +1 -1
  8. package/lib/module/constants/treeView.constants.js +5 -0
  9. package/lib/module/constants/treeView.constants.js.map +1 -1
  10. package/lib/module/helpers/moveTreeNode.helper.js +175 -47
  11. package/lib/module/helpers/moveTreeNode.helper.js.map +1 -1
  12. package/lib/module/helpers/toggleCheckbox.helper.js +5 -12
  13. package/lib/module/helpers/toggleCheckbox.helper.js.map +1 -1
  14. package/lib/module/helpers/treeNode.helper.js +49 -0
  15. package/lib/module/helpers/treeNode.helper.js.map +1 -1
  16. package/lib/module/hooks/useDragDrop.js +470 -186
  17. package/lib/module/hooks/useDragDrop.js.map +1 -1
  18. package/lib/module/hooks/useScrollToNode.js +17 -0
  19. package/lib/module/hooks/useScrollToNode.js.map +1 -1
  20. package/lib/module/index.js.map +1 -1
  21. package/lib/module/store/treeView.store.js +7 -0
  22. package/lib/module/store/treeView.store.js.map +1 -1
  23. package/lib/module/types/dragDrop.types.js +0 -2
  24. package/lib/typescript/src/TreeView.d.ts.map +1 -1
  25. package/lib/typescript/src/components/DragOverlay.d.ts.map +1 -1
  26. package/lib/typescript/src/components/NodeList.d.ts.map +1 -1
  27. package/lib/typescript/src/constants/treeView.constants.d.ts +4 -0
  28. package/lib/typescript/src/constants/treeView.constants.d.ts.map +1 -1
  29. package/lib/typescript/src/helpers/moveTreeNode.helper.d.ts +32 -0
  30. package/lib/typescript/src/helpers/moveTreeNode.helper.d.ts.map +1 -1
  31. package/lib/typescript/src/helpers/toggleCheckbox.helper.d.ts.map +1 -1
  32. package/lib/typescript/src/helpers/treeNode.helper.d.ts +15 -0
  33. package/lib/typescript/src/helpers/treeNode.helper.d.ts.map +1 -1
  34. package/lib/typescript/src/hooks/useDragDrop.d.ts +24 -6
  35. package/lib/typescript/src/hooks/useDragDrop.d.ts.map +1 -1
  36. package/lib/typescript/src/hooks/useScrollToNode.d.ts +10 -0
  37. package/lib/typescript/src/hooks/useScrollToNode.d.ts.map +1 -1
  38. package/lib/typescript/src/index.d.ts +2 -2
  39. package/lib/typescript/src/index.d.ts.map +1 -1
  40. package/lib/typescript/src/store/treeView.store.d.ts +6 -0
  41. package/lib/typescript/src/store/treeView.store.d.ts.map +1 -1
  42. package/lib/typescript/src/types/dragDrop.types.d.ts +24 -12
  43. package/lib/typescript/src/types/dragDrop.types.d.ts.map +1 -1
  44. package/lib/typescript/src/types/treeView.types.d.ts +68 -12
  45. package/lib/typescript/src/types/treeView.types.d.ts.map +1 -1
  46. package/package.json +2 -2
  47. package/src/TreeView.tsx +158 -26
  48. package/src/components/DragOverlay.tsx +32 -3
  49. package/src/components/NodeList.tsx +82 -28
  50. package/src/constants/treeView.constants.ts +6 -1
  51. package/src/helpers/moveTreeNode.helper.ts +160 -43
  52. package/src/helpers/toggleCheckbox.helper.ts +5 -12
  53. package/src/helpers/treeNode.helper.ts +52 -1
  54. package/src/hooks/useDragDrop.ts +573 -214
  55. package/src/hooks/useScrollToNode.ts +21 -0
  56. package/src/index.tsx +3 -1
  57. package/src/store/treeView.store.ts +6 -0
  58. package/src/types/dragDrop.types.ts +25 -13
  59. package/src/types/treeView.types.ts +71 -11
  60. package/lib/module/components/DropIndicator.js +0 -79
  61. package/lib/module/components/DropIndicator.js.map +0 -1
  62. package/lib/typescript/src/components/DropIndicator.d.ts +0 -12
  63. package/lib/typescript/src/components/DropIndicator.d.ts.map +0 -1
  64. package/src/components/DropIndicator.tsx +0 -95
package/README.md CHANGED
@@ -5,11 +5,18 @@
5
5
  [![npm version](https://img.shields.io/npm/v/react-native-tree-multi-select)](https://badge.fury.io/js/react-native-tree-multi-select) [![License](https://img.shields.io/github/license/JairajJangle/react-native-tree-multi-select)](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [![Workflow Status](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml/badge.svg)](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [![cov](https://raw.githubusercontent.com/JairajJangle/react-native-tree-multi-select/gh-pages/badges/coverage.svg)](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) ![Android](https://img.shields.io/badge/-Android-555555?logo=android&logoColor=3DDC84) ![iOS](https://img.shields.io/badge/-iOS-555555?logo=apple&logoColor=white) ![Web](https://img.shields.io/badge/-Web-555555?logo=google-chrome&logoColor=0096FF) [![GitHub issues](https://img.shields.io/github/issues/JairajJangle/react-native-tree-multi-select)](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue) ![TS](https://img.shields.io/badge/TypeScript-strict_💪-blue) [![Known Vulnerabilities](https://snyk.io/test/github/jairajjangle/react-native-tree-multi-select/badge.svg)](https://snyk.io/test/github/jairajjangle/react-native-tree-multi-select) [![Expo Snack](https://img.shields.io/badge/Expo%20Snack-555555?style=flat&logo=expo&logoColor=white)](https://snack.expo.dev/@futurejj/react-native-tree-multi-select-example) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/react-native-tree-multi-select) [![Sponsor](https://img.shields.io/badge/Sponsor-GitHub-ea4aaa?style=flat&logo=github-sponsors)](https://github.com/sponsors/JairajJangle)
6
6
 
7
7
 
8
- <div style="display: flex; justify-content: space-around;">
9
- <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExNHFleDNleTZsMXVoMjk1YnlpdXFtanZyZGprMDkwcDdteGhqYTNhcCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/L0w26RrC32gdfWZ8Ux/giphy.gif" alt="Expand/collapse demo" style="border: 1px solid gray;" />
10
- <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxuZHNqaGhrZmdyZzRtY21icHNtbHZoM3N4aHlyMDFxZjJrd25rMyZlcD12MV9pbnRtZXJuYWxfZ2lmX2J5X2lkJmN0PWc/KY6Y0gkSPYAFxffL8r/giphy.gif" alt="Search demo" style="border: 1px solid gray;" />
11
- <img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdXI4aWxpazdhaDk2MDk1a3BpaHphcmVoY2FpNGw3aHExZ3hwYmY3OSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZXtvX5eqGzoCuD3hus/giphy.gif" alt="Customization demo" style="border: 1px solid gray;" />
12
- </div>
8
+ <table>
9
+ <tr>
10
+ <td align="center"><img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExNHFleDNleTZsMXVoMjk1YnlpdXFtanZyZGprMDkwcDdteGhqYTNhcCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/L0w26RrC32gdfWZ8Ux/giphy.gif" alt="Expand/collapse demo" width="250" /></td>
11
+ <td align="center"><img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGxuZHNqaGhrZmdyZzRtY21icHNtbHZoM3N4aHlyMDFxZjJrd25rMyZlcD12MV9pbnRtZXJuYWxfZ2lmX2J5X2lkJmN0PWc/KY6Y0gkSPYAFxffL8r/giphy.gif" alt="Search demo" width="250" /></td>
12
+ <td align="center"><img src="https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExdXI4aWxpazdhaDk2MDk1a3BpaHphcmVoY2FpNGw3aHExZ3hwYmY3OSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZXtvX5eqGzoCuD3hus/giphy.gif" alt="Customization demo" width="250" /></td>
13
+ </tr>
14
+ <tr>
15
+ <td align="center"><img src="https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExZXF6MGNiNXN3N3Z4MnJrMGVlbnFwanpkNWxoc2Myc2FmZmxoazZ4eSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/eH2YX8fvdtX2cLR92p/giphy.gif" alt="Drag-and-drop demo" width="250" /></td>
16
+ <td align="center"><img src="https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExM3Jiejg2d2NkcDVpMnhkemx1NXdsd3diZmQ2ZGh2b25tcXgxeXNkMCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/0hbm2L1mVRLwyMGZ7H/giphy.gif" alt="Drag-and-drop demo" width="250" /></td>
17
+ <td align="center"><img src="https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExcnpiOTBjbXkxaHNsb2w4ajRlMm53YWljMHIxbGw0NWMybHd4aHZ3eSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/yCDRGVx4F40DTaDbRd/giphy.gif" alt="Drag-and-drop demo" width="250" /></td>
18
+ </tr>
19
+ </table>
13
20
 
14
21
  ## Installation
15
22
 
@@ -47,7 +54,7 @@ Make sure to follow the native-related installation instructions for these depen
47
54
  - 🔀 **Drag-and-Drop**: Long-press to drag nodes and reorder or nest them anywhere in the tree.
48
55
  - 💻 **Cross-Platform**: Works seamlessly across iOS, Android, and web (with React Native Web).
49
56
 
50
- > **Note**: Drag-and-drop is currently supported on iOS and Android only. Web support for drag-and-drop is a work in progress.
57
+ > **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
58
 
52
59
  ## Usage
53
60
 
@@ -120,6 +127,7 @@ export function TreeViewUsageExample(){
120
127
  ```tsx
121
128
  import {
122
129
  TreeView,
130
+ moveTreeNode,
123
131
  type TreeNode,
124
132
  type TreeViewRef,
125
133
  type DragEndEvent
@@ -132,8 +140,12 @@ export function DragDropExample(){
132
140
  const treeViewRef = React.useRef<TreeViewRef | null>(null);
133
141
 
134
142
  const handleDragEnd = (event: DragEndEvent) => {
135
- // event.newTreeData contains the reordered tree - just set it
136
- setData(event.newTreeData);
143
+ // `event` is a lightweight move delta (draggedNodeId, targetNodeId, position,
144
+ // previous/new parent + index) - not the whole tree. For a controlled tree,
145
+ // reconstruct it with the exported `moveTreeNode` helper:
146
+ setData(prev => moveTreeNode(prev, event.draggedNodeId, event.targetNodeId, event.position));
147
+ // Or, if you keep the tree inside the component, read it on demand:
148
+ // setData(treeViewRef.current?.getTreeData() ?? prev);
137
149
  };
138
150
 
139
151
  return(
@@ -152,7 +164,9 @@ export function DragDropExample(){
152
164
 
153
165
  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
166
 
155
- **Search + drag**: Drag-and-drop works while a search filter is active. You can drag visible (filtered) nodes and drop them onto other visible nodes. The move is applied to the full tree, so nodes hidden by the filter are not affected. After the drop, the search filter remains active and the view updates to reflect the new tree structure.
167
+ **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.
168
+
169
+ **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
170
 
157
171
  For visual customizations (overlay styles, indicator colors, or fully custom components), see the [`dragAndDrop.customizations`](#dragdropcustomizationsid) option.
158
172
 
@@ -186,7 +200,7 @@ For visual customizations (overlay styles, indicator colors, or fully custom com
186
200
 
187
201
  | Property | Type | Required | Description |
188
202
  | --------------------- | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ |
189
- | `enabled` | `boolean` | No | Enable drag-and-drop reordering (default: true when `dragAndDrop` is provided). Set to `false` to temporarily disable at runtime. |
203
+ | `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
204
  | `onDragStart` | `(event: `[DragStartEvent](#dragstarteventid--string)`<ID>) => void` | No | Callback fired when a drag operation begins |
191
205
  | `onDragEnd` | `(event: `[DragEndEvent](#dragendeventid--string)`<ID>) => void` | No | Callback fired after a node is successfully dropped at a new position |
192
206
  | `onDragCancel` | `(event: `[DragCancelEvent](#dragcanceleventid--string)`<ID>) => void` | No | Callback fired when a drag is cancelled without a successful drop |
@@ -194,13 +208,16 @@ For visual customizations (overlay styles, indicator colors, or fully custom com
194
208
  | `autoScrollThreshold` | `number` | No | Distance from edge (px) to trigger auto-scroll (default: 60) |
195
209
  | `autoScrollSpeed` | `number` | No | Speed multiplier for auto-scroll (default: 1.0) |
196
210
  | `dragOverlayOffset` | `number` | No | Overlay offset from the finger, in item-height units (default: -2, i.e. two rows above finger) |
211
+ | `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
212
  | `autoExpandDelay` | `number` | No | Delay in ms before auto-expanding a collapsed node during drag hover (default: 800) |
213
+ | `autoExpand` | `boolean` | No | Auto-expand a collapsed node while hovering "inside" it during a drag (default: `true`). Set `false` to disable hover-to-expand. |
214
+ | `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
215
  | `customizations` | [DragDropCustomizations](#dragdropcustomizationsid)`<ID>` | No | Customizations for drag-and-drop visuals (overlay, indicator, opacity) |
199
216
  | `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 exceeding this are suppressed |
217
+ | `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
218
  | `canNodeHaveChildren` | `(node: TreeNode<ID>) => boolean` | No | Callback to determine if a node can accept children |
202
219
  | `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 }` |
220
+ | `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
221
 
205
222
  ##### Notes
206
223
 
@@ -250,7 +267,8 @@ For visual customizations (overlay styles, indicator colors, or fully custom com
250
267
  | `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
268
  | `scrollToNodeID` | `(params: `[ScrollToNodeParams](#scrolltonodeparams)`<ID>) => void;` | Scrolls the tree view to the node of the specified ID. |
252
269
  | `getChildToParentMap` | `() => Map<ID, ID>` | Get the child to parent tree view map. |
253
- | `moveNode` | `(nodeId: ID, targetNodeId: ID, position: `[DropPosition](#dropposition)`) => void` | Programmatically move a node to a new position. Works like drag-and-drop without user interaction. Useful for undo/redo or external state management. |
270
+ | `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.** |
271
+ | `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
272
 
255
273
  #### ScrollToNodeParams
256
274
  | Property | Type | Required | Description |
@@ -344,11 +362,11 @@ Type: `boolean` OR `"indeterminate"`
344
362
 
345
363
  *Touch handlers to spread on a drag handle element within a custom node row.*
346
364
 
347
- | Property | Type | Required | Description |
348
- | -------------- | ------------------- | -------- | ------------------------------ |
349
- | `onTouchStart` | `(e: any) => void` | Yes | Touch start handler for drag |
350
- | `onTouchEnd` | `() => void` | Yes | Touch end handler |
351
- | `onTouchCancel`| `() => void` | Yes | Touch cancel handler |
365
+ | Property | Type | Required | Description |
366
+ | -------------- | ------------------------------------ | -------- | ------------------------------ |
367
+ | `onTouchStart` | `(e: GestureResponderEvent) => void` | Yes | Touch start handler for drag |
368
+ | `onTouchEnd` | `() => void` | Yes | Touch end handler |
369
+ | `onTouchCancel`| `() => void` | Yes | Touch cancel handler |
352
370
 
353
371
  ---
354
372
 
@@ -362,16 +380,25 @@ Type: `boolean` OR `"indeterminate"`
362
380
 
363
381
  ---
364
382
 
365
- #### DragEndEvent`<ID = string>`
383
+ #### MoveResult`<ID = string>`
366
384
 
367
- *The event object passed to the `onDragEnd` callback after a successful drop.*
385
+ *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
386
 
369
- | Property | Type | Description |
370
- | --------------- | --------------------------------------- | ------------------------------------------------------------ |
371
- | `draggedNodeId` | `ID` | The id of the node that was dragged |
372
- | `targetNodeId` | `ID` | The id of the target node where the dragged node was dropped |
373
- | `position` | [DropPosition](#dropposition) | Where relative to the target: `above`/`below` = sibling, `inside` = child |
374
- | `newTreeData` | `TreeNode<ID>[]` | The reordered tree data after the move |
387
+ | Property | Type | Description |
388
+ | ------------------ | ----------------------------- | ------------------------------------------------------------ |
389
+ | `draggedNodeId` | `ID` | The id of the node that was moved |
390
+ | `targetNodeId` | `ID` | The id of the target node the move was relative to |
391
+ | `position` | [DropPosition](#dropposition) | Where relative to the target: `above`/`below` = sibling, `inside` = child |
392
+ | `previousParentId` | `ID \| null` | Parent id before the move (`null` if it was a root-level node) |
393
+ | `newParentId` | `ID \| null` | Parent id after the move (`null` if it is now a root-level node) |
394
+ | `previousIndex` | `number` | Index within the previous parent's children (or the root array) |
395
+ | `newIndex` | `number` | Index within the new parent's children (or the root array) |
396
+
397
+ ---
398
+
399
+ #### DragEndEvent`<ID = string>`
400
+
401
+ *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
402
 
376
403
  #### DragCancelEvent`<ID = string>`
377
404
 
@@ -426,6 +453,8 @@ Type: `"above"` | `"below"` | `"inside"`
426
453
  | `circleSize` | `number` | No | Diameter of the circle at the line's start (default: 10) |
427
454
  | `highlightColor` | `string` | No | Background color of the "inside" highlight (default: `"rgba(0, 120, 255, 0.15)"`) |
428
455
  | `highlightBorderColor`| `string` | No | Border color of the "inside" highlight (default: `"rgba(0, 120, 255, 0.5)"`) |
456
+ | `highlightBorderWidth`| `number` | No | Border width of the "inside" highlight box (default: 2) |
457
+ | `highlightBorderRadius`| `number`| No | Corner radius of the "inside" highlight box (default: 4) |
429
458
 
430
459
  ---
431
460
 
@@ -437,9 +466,11 @@ Type: `"above"` | `"below"` | `"inside"`
437
466
  | --------------- | ---------------------- | -------- | ------------------------------------------------ |
438
467
  | `backgroundColor`| `string` | No | Background color (default: `"rgba(255, 255, 255, 0.95)"`) |
439
468
  | `shadowColor` | `string` | No | Shadow color (default: `"#000"`) |
469
+ | `shadowOffset` | `{ width: number; height: number }` | No | Shadow offset, iOS (default: `{ width: 0, height: 2 }`) |
440
470
  | `shadowOpacity` | `number` | No | Shadow opacity (default: 0.25) |
441
471
  | `shadowRadius` | `number` | No | Shadow radius (default: 4) |
442
472
  | `elevation` | `number` | No | Android elevation (default: 10) |
473
+ | `zIndex` | `number` | No | Stacking order of the overlay (default: 9999) |
443
474
  | `style` | `StyleProp<ViewStyle>` | No | Custom style applied to the overlay container |
444
475
 
445
476
  ---
@@ -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, recalculateCheckedStates, moveTreeNode } from "./helpers/index.js";
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 set internalDataRef before calling consumer's callback
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 = event.newTreeData;
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
- useDeepCompareEffect(() => {
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(data, internalDataRef.current)) {
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(data);
110
+ updateInitialTreeViewData(nextData);
92
111
  if (selectionPropagation) setSelectionPropagation(selectionPropagation);
93
- initializeNodeMaps(storeId, data);
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 moveNode(nodeId, targetNodeId, position) {
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 currentData = store.getState().initialTreeViewData;
121
- const newData = moveTreeNode(currentData, nodeId, targetNodeId, position);
122
- store.getState().updateInitialTreeViewData(newData);
123
- initializeNodeMaps(storeId, newData);
124
- recalculateCheckedStates(storeId);
125
- if (position === "inside") {
126
- expandNodes(storeId, [targetNodeId]);
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
- expandNodes(storeId, [nodeId], true);
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: 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
- export const DragOverlay = typedMemo(_DragOverlay);
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","typedMemo","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","shadowOpacity","shadowRadius","elevation","transform","translateX","translateY","children","isExpanded","onCheck","onExpand","nodeRow","paddingStart","text","name","onValueChange","value","length","expandArrow","DragOverlay","create","position","left","right","zIndex","shadowOffset","width","height","flex","flexDirection","alignItems","minWidth"],"sourceRoot":"../../../src","sources":["components/DragOverlay.tsx"],"mappings":"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","ignoreList":[]}
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":[]}