@@ -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,13 +1154,18 @@ 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 {
1158
+ data,
1159
+ position,
1160
+ gridReferenceGroup : referenceGroup ,
1161
+ } = serializedPopoutGroup ;
1146
1162
1147
1163
const group = createGroupFromSerializedState ( data ) ;
1148
1164
1149
- this . addPopoutGroup ( group , {
1165
+ this . addPopoutGroup ( this . getPanel ( referenceGroup ) ?? group , {
1150
1166
skipRemoveGroup : true ,
1151
1167
position : position ?? undefined ,
1168
+ overridePopoutGroup : group ,
1152
1169
} ) ;
1153
1170
}
1154
1171
@@ -1557,7 +1574,9 @@ export class DockviewComponent
1557
1574
if ( selectedGroup ) {
1558
1575
if ( ! options ?. skipDispose ) {
1559
1576
if ( ! options ?. skipPopoutAssociated ) {
1560
- this . removeGroup ( selectedGroup . referenceGroup ) ;
1577
+ if ( this . _groups . has ( selectedGroup . referenceGroup . id ) ) {
1578
+ this . removeGroup ( selectedGroup . referenceGroup ) ;
1579
+ }
1561
1580
}
1562
1581
1563
1582
selectedGroup . popoutGroup . dispose ( ) ;
0 commit comments