@@ -110,6 +110,7 @@ export interface SerializedFloatingGroup {
110
110
111
111
export interface SerializedPopoutGroup {
112
112
data : GroupPanelViewState ;
113
+ gridReferenceGroup : string ;
113
114
position : Box | null ;
114
115
}
115
116
@@ -542,17 +543,21 @@ export class DockviewComponent
542
543
}
543
544
544
545
addPopoutGroup (
545
- item : DockviewPanel | DockviewGroupPanel ,
546
+ itemToPopout : DockviewPanel | DockviewGroupPanel ,
546
547
options ?: {
547
548
skipRemoveGroup ?: boolean ;
548
549
position ?: Box ;
549
550
popoutUrl ?: string ;
550
551
onDidOpen ?: ( event : { id : string ; window : Window } ) => void ;
551
552
onWillClose ?: ( event : { id : string ; window : Window } ) => void ;
553
+ overridePopoutGroup ?: DockviewGroupPanel ;
552
554
}
553
555
) : Promise < void > {
554
- if ( item instanceof DockviewPanel && item . group . size === 1 ) {
555
- return this . addPopoutGroup ( item . group ) ;
556
+ if (
557
+ itemToPopout instanceof DockviewPanel &&
558
+ itemToPopout . group . size === 1
559
+ ) {
560
+ return this . addPopoutGroup ( itemToPopout . group ) ;
556
561
}
557
562
558
563
const theme = getDockviewTheme ( this . gridview . element ) ;
@@ -579,21 +584,22 @@ export class DockviewComponent
579
584
return options . position ;
580
585
}
581
586
582
- if ( item instanceof DockviewGroupPanel ) {
583
- return item . element . getBoundingClientRect ( ) ;
587
+ if ( itemToPopout instanceof DockviewGroupPanel ) {
588
+ return itemToPopout . element . getBoundingClientRect ( ) ;
584
589
}
585
590
586
- if ( item . group ) {
587
- return item . group . element . getBoundingClientRect ( ) ;
591
+ if ( itemToPopout . group ) {
592
+ return itemToPopout . group . element . getBoundingClientRect ( ) ;
588
593
}
589
594
return element . getBoundingClientRect ( ) ;
590
595
}
591
596
592
597
const box : Box = getBox ( ) ;
593
598
594
- const groupId = this . getNextGroupId ( ) ; //item.id;
599
+ const groupId =
600
+ options ?. overridePopoutGroup ?. id ?? this . getNextGroupId ( ) ; //item.id;
595
601
596
- item . api . setHidden ( true ) ;
602
+ itemToPopout . api . setHidden ( true ) ;
597
603
598
604
const _window = new PopoutWindow (
599
605
`${ this . id } -${ groupId } ` , // unique id
@@ -636,13 +642,18 @@ export class DockviewComponent
636
642
) ;
637
643
638
644
const referenceGroup =
639
- item instanceof DockviewPanel ? item . group : item ;
645
+ itemToPopout instanceof DockviewPanel
646
+ ? itemToPopout . group
647
+ : itemToPopout ;
640
648
641
- const group = this . createGroup ( { id : groupId } ) ;
649
+ const group =
650
+ options ?. overridePopoutGroup ??
651
+ this . createGroup ( { id : groupId } ) ;
642
652
group . model . renderContainer = overlayRenderContainer ;
643
653
644
- if ( item instanceof DockviewPanel ) {
645
- const panel = referenceGroup . model . removePanel ( item ) ;
654
+ if ( itemToPopout instanceof DockviewPanel ) {
655
+ const panel =
656
+ referenceGroup . model . removePanel ( itemToPopout ) ;
646
657
group . model . openPanel ( panel ) ;
647
658
} else {
648
659
moveGroupWithoutDestroying ( {
@@ -1016,6 +1027,7 @@ export class DockviewComponent
1016
1027
( group ) => {
1017
1028
return {
1018
1029
data : group . popoutGroup . toJSON ( ) as GroupPanelViewState ,
1030
+ gridReferenceGroup : group . referenceGroup . id ,
1019
1031
position : group . window . dimensions ( ) ,
1020
1032
} ;
1021
1033
}
@@ -1143,14 +1155,26 @@ export class DockviewComponent
1143
1155
const serializedPopoutGroups = data . popoutGroups ?? [ ] ;
1144
1156
1145
1157
for ( const serializedPopoutGroup of serializedPopoutGroups ) {
1146
- const { data, position } = serializedPopoutGroup ;
1158
+ const { data, position, gridReferenceGroup } =
1159
+ serializedPopoutGroup ;
1147
1160
1148
1161
const group = createGroupFromSerializedState ( data ) ;
1149
1162
1150
- this . addPopoutGroup ( group , {
1151
- skipRemoveGroup : true ,
1152
- position : position ?? undefined ,
1153
- } ) ;
1163
+ if ( ! gridReferenceGroup ) {
1164
+ /**
1165
+ * workaround to handle <= v1.9.2
1166
+ */
1167
+ this . doAddGroup ( group , [ 0 ] ) ;
1168
+ }
1169
+
1170
+ this . addPopoutGroup (
1171
+ this . getPanel ( gridReferenceGroup ) ?? group ,
1172
+ {
1173
+ skipRemoveGroup : true ,
1174
+ position : position ?? undefined ,
1175
+ overridePopoutGroup : group ,
1176
+ }
1177
+ ) ;
1154
1178
}
1155
1179
1156
1180
for ( const floatingGroup of this . _floatingGroups ) {
@@ -1558,7 +1582,9 @@ export class DockviewComponent
1558
1582
if ( selectedGroup ) {
1559
1583
if ( ! options ?. skipDispose ) {
1560
1584
if ( ! options ?. skipPopoutAssociated ) {
1561
- this . removeGroup ( selectedGroup . referenceGroup ) ;
1585
+ if ( this . _groups . has ( selectedGroup . referenceGroup . id ) ) {
1586
+ this . removeGroup ( selectedGroup . referenceGroup ) ;
1587
+ }
1562
1588
}
1563
1589
1564
1590
selectedGroup . popoutGroup . dispose ( ) ;
0 commit comments