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.
- package/README.md +57 -26
- 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 +82 -29
- 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 +82 -28
- 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
|
@@ -5,11 +5,18 @@
|
|
|
5
5
|
[](https://badge.fury.io/js/react-native-tree-multi-select) [](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml)    [](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue)  [](https://snyk.io/test/github/jairajjangle/react-native-tree-multi-select) [](https://snack.expo.dev/@futurejj/react-native-tree-multi-select-example)  [](https://github.com/sponsors/JairajJangle)
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
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
|
|
136
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
| `
|
|
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
|
|
348
|
-
| -------------- |
|
|
349
|
-
| `onTouchStart` | `(e:
|
|
350
|
-
| `onTouchEnd` | `() => void`
|
|
351
|
-
| `onTouchCancel`| `() => void`
|
|
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
|
-
####
|
|
383
|
+
#### MoveResult`<ID = string>`
|
|
366
384
|
|
|
367
|
-
*
|
|
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
|
|
370
|
-
|
|
|
371
|
-
| `draggedNodeId`
|
|
372
|
-
| `targetNodeId`
|
|
373
|
-
| `position`
|
|
374
|
-
| `
|
|
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
|
---
|
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":[]}
|