Skip to content

Commit 024c6e1

Browse files
committed
bug: restoring popout groups
1 parent b50c950 commit 024c6e1

File tree

2 files changed

+74
-15
lines changed

2 files changed

+74
-15
lines changed

packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5597,6 +5597,67 @@ describe('dockviewComponent', () => {
55975597
expect(dockview.groups.length).toBe(0);
55985598
});
55995599

5600+
test('popout single panel -> save layout -> load layout', async () => {
5601+
const container = document.createElement('div');
5602+
5603+
window.open = () => setupMockWindow();
5604+
5605+
const dockview = new DockviewComponent(container, {
5606+
createComponent(options) {
5607+
switch (options.name) {
5608+
case 'default':
5609+
return new PanelContentPartTest(
5610+
options.id,
5611+
options.name
5612+
);
5613+
default:
5614+
throw new Error(`unsupported`);
5615+
}
5616+
},
5617+
});
5618+
5619+
dockview.layout(1000, 500);
5620+
5621+
const panel1 = dockview.addPanel({
5622+
id: 'panel_1',
5623+
component: 'default',
5624+
});
5625+
5626+
const panel2 = dockview.addPanel({
5627+
id: 'panel_2',
5628+
component: 'default',
5629+
});
5630+
5631+
const panel3 = dockview.addPanel({
5632+
id: 'panel_3',
5633+
component: 'default',
5634+
});
5635+
5636+
const panel4 = dockview.addPanel({
5637+
id: 'panel_4',
5638+
component: 'default',
5639+
position: { direction: 'right' },
5640+
});
5641+
5642+
expect(dockview.panels.length).toBe(4);
5643+
expect(dockview.groups.length).toBe(2);
5644+
5645+
expect(await dockview.addPopoutGroup(panel1)).toBeTruthy();
5646+
5647+
expect(dockview.panels.length).toBe(4);
5648+
expect(dockview.groups.length).toBe(3);
5649+
5650+
expect(panel1.api.location.type).toBe('popout');
5651+
5652+
dockview.fromJSON(dockview.toJSON());
5653+
5654+
await new Promise((resolve) => setTimeout(resolve, 0)); // popout views are completed as a promise so must complete microtask-queue
5655+
5656+
expect(dockview.panels.length).toBe(4);
5657+
expect(dockview.groups.length).toBe(3);
5658+
expect(dockview.groups.every((g) => g.api.isVisible)).toBeTruthy();
5659+
});
5660+
56005661
test('move from fixed to popout group and back', async () => {
56015662
const container = document.createElement('div');
56025663

packages/dockview-core/src/dockview/dockviewComponent.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export interface DockviewPopoutGroupOptions {
116116
* Defaults to `/popout.html` if not provided
117117
*/
118118
popoutUrl?: string;
119+
referenceGroup?: DockviewGroupPanel;
119120
onDidOpen?: (event: { id: string; window: Window }) => void;
120121
onWillClose?: (event: { id: string; window: Window }) => void;
121122
overridePopoutGroup?: DockviewGroupPanel;
@@ -726,10 +727,11 @@ export class DockviewComponent
726727
this
727728
);
728729

729-
const referenceGroup =
730-
itemToPopout instanceof DockviewPanel
731-
? itemToPopout.group
732-
: itemToPopout;
730+
const referenceGroup = options?.referenceGroup
731+
? options.referenceGroup
732+
: itemToPopout instanceof DockviewPanel
733+
? itemToPopout.group
734+
: itemToPopout;
733735

734736
const referenceLocation = itemToPopout.api.location.type;
735737

@@ -1483,18 +1485,14 @@ export class DockviewComponent
14831485

14841486
const group = createGroupFromSerializedState(data);
14851487

1486-
this.addPopoutGroup(
1487-
(gridReferenceGroup
1488+
this.addPopoutGroup(group, {
1489+
position: position ?? undefined,
1490+
overridePopoutGroup: gridReferenceGroup ? group : undefined,
1491+
referenceGroup: gridReferenceGroup
14881492
? this.getPanel(gridReferenceGroup)
1489-
: undefined) ?? group,
1490-
{
1491-
position: position ?? undefined,
1492-
overridePopoutGroup: gridReferenceGroup
1493-
? group
1494-
: undefined,
1495-
popoutUrl: url,
1496-
}
1497-
);
1493+
: undefined,
1494+
popoutUrl: url,
1495+
});
14981496
}
14991497

15001498
for (const floatingGroup of this._floatingGroups) {

0 commit comments

Comments
 (0)