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