@@ -647,6 +647,12 @@ class Store extends EventEmitter {
647
647
}
648
648
649
649
_mountComponent ( data : DataType ) {
650
+ if ( this . _nodes . has ( data . id ) ) {
651
+ // This node has been re-parented.
652
+ this . _updateComponent ( data ) ;
653
+ return ;
654
+ }
655
+
650
656
var map = Map ( data ) . set ( 'renders' , 1 ) ;
651
657
if ( data . nodeType === 'Composite' ) {
652
658
map = map . set ( 'collapsed' , true ) ;
@@ -663,16 +669,18 @@ class Store extends EventEmitter {
663
669
}
664
670
665
671
_updateComponent ( data : DataType ) {
666
- var node = this . get ( data . id ) ;
672
+ var id = data . id ;
673
+ var node = this . get ( id ) ;
667
674
if ( ! node ) {
668
675
return ;
669
676
}
670
677
data . renders = node . get ( 'renders' ) + 1 ;
671
- this . _nodes = this . _nodes . mergeIn ( [ data . id ] , Map ( data ) ) ;
678
+ this . _nodes = this . _nodes . mergeIn ( [ id ] , Map ( data ) ) ;
672
679
if ( data . children && data . children . forEach ) {
673
680
data . children . forEach ( cid => {
674
- if ( ! this . _parents . get ( cid ) ) {
675
- this . _parents = this . _parents . set ( cid , data . id ) ;
681
+ var pid = this . _parents . get ( cid ) ;
682
+ if ( ! pid ) {
683
+ this . _parents = this . _parents . set ( cid , id ) ;
676
684
var childNode = this . _nodes . get ( cid ) ;
677
685
var childID = childNode . get ( 'id' ) ;
678
686
if (
@@ -687,6 +695,9 @@ class Store extends EventEmitter {
687
695
this . emit ( 'searchRoots' ) ;
688
696
this . highlightSearch ( ) ;
689
697
}
698
+ } else if ( pid !== id ) {
699
+ // This node has been re-parented.
700
+ this . _parents = this . _parents . set ( cid , id ) ;
690
701
}
691
702
} ) ;
692
703
}
0 commit comments