@@ -370,9 +370,7 @@ export function useTreeData<T extends object>(options: TreeOptions<T>): TreeData
370
370
371
371
// If parentKey is null, insert into the root.
372
372
if ( toParentKey == null ) {
373
- // safe to reuse the original map since no node was actually removed, so we just need to update the one moved node
374
- newMap = new Map ( originalMap ) ;
375
- newMap . set ( movedNode . key , movedNode ) ;
373
+ addNode ( movedNode , newMap ) ;
376
374
return { items : [
377
375
...newItems . slice ( 0 , index ) ,
378
376
movedNode ,
@@ -406,7 +404,7 @@ export function useTreeData<T extends object>(options: TreeOptions<T>): TreeData
406
404
parent = nodeMap . get ( toParentKey ) ?? null ;
407
405
}
408
406
let toIndex = parent ?. children ? parent . children . indexOf ( node ) : items . indexOf ( node ) ;
409
- return moveItems ( prevState , keys , parent , toIndex , updateTree ) ;
407
+ return moveItems ( prevState , keys , parent , toIndex , updateTree , addNode ) ;
410
408
} ) ;
411
409
} ,
412
410
moveAfter ( key : Key , keys : Iterable < Key > ) {
@@ -423,7 +421,7 @@ export function useTreeData<T extends object>(options: TreeOptions<T>): TreeData
423
421
}
424
422
let toIndex = parent ?. children ? parent . children . indexOf ( node ) : items . indexOf ( node ) ;
425
423
toIndex ++ ;
426
- return moveItems ( prevState , keys , parent , toIndex , updateTree ) ;
424
+ return moveItems ( prevState , keys , parent , toIndex , updateTree , addNode ) ;
427
425
} ) ;
428
426
} ,
429
427
update ( oldKey : Key , newValue : T ) {
@@ -450,10 +448,11 @@ function moveItems<T extends object>(
450
448
toIndex : number ,
451
449
updateTree : (
452
450
items : TreeNode < T > [ ] ,
453
- key : Key ,
451
+ key : Key | null ,
454
452
update : ( node : TreeNode < T > ) => TreeNode < T > | null ,
455
453
originalMap : Map < Key , TreeNode < T > >
456
- ) => TreeDataState < T >
454
+ ) => TreeDataState < T > ,
455
+ addNode : ( node : TreeNode < T > , map : Map < Key , TreeNode < T > > ) => void
457
456
) : TreeDataState < T > {
458
457
let { items, nodeMap} = state ;
459
458
@@ -515,8 +514,9 @@ function moveItems<T extends object>(
515
514
let inOrderItems = removedItems . sort ( ( a , b ) => inOrderKeys . get ( a . key ) ! > inOrderKeys . get ( b . key ) ! ? 1 : - 1 ) ;
516
515
// If parentKey is null, insert into the root.
517
516
if ( ! toParent || toParent . key == null ) {
518
- newMap = new Map ( nodeMap ) ;
519
- inOrderItems . forEach ( movedNode => newMap . set ( movedNode . key , movedNode ) ) ;
517
+ inOrderItems . forEach ( movedNode => {
518
+ addNode ( movedNode , newMap ) ;
519
+ } ) ;
520
520
return { items : [
521
521
...newItems . slice ( 0 , toIndex ) ,
522
522
...inOrderItems ,
0 commit comments