mirror of
https://github.com/mathuo/dockview
synced 2025-08-11 19:56:02 +00:00
bug: restoring popout groups
This commit is contained in:
parent
b50c9506c6
commit
024c6e1a49
@ -5597,6 +5597,67 @@ describe('dockviewComponent', () => {
|
|||||||
expect(dockview.groups.length).toBe(0);
|
expect(dockview.groups.length).toBe(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('popout single panel -> save layout -> load layout', async () => {
|
||||||
|
const container = document.createElement('div');
|
||||||
|
|
||||||
|
window.open = () => setupMockWindow();
|
||||||
|
|
||||||
|
const dockview = new DockviewComponent(container, {
|
||||||
|
createComponent(options) {
|
||||||
|
switch (options.name) {
|
||||||
|
case 'default':
|
||||||
|
return new PanelContentPartTest(
|
||||||
|
options.id,
|
||||||
|
options.name
|
||||||
|
);
|
||||||
|
default:
|
||||||
|
throw new Error(`unsupported`);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
dockview.layout(1000, 500);
|
||||||
|
|
||||||
|
const panel1 = dockview.addPanel({
|
||||||
|
id: 'panel_1',
|
||||||
|
component: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const panel2 = dockview.addPanel({
|
||||||
|
id: 'panel_2',
|
||||||
|
component: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const panel3 = dockview.addPanel({
|
||||||
|
id: 'panel_3',
|
||||||
|
component: 'default',
|
||||||
|
});
|
||||||
|
|
||||||
|
const panel4 = dockview.addPanel({
|
||||||
|
id: 'panel_4',
|
||||||
|
component: 'default',
|
||||||
|
position: { direction: 'right' },
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(dockview.panels.length).toBe(4);
|
||||||
|
expect(dockview.groups.length).toBe(2);
|
||||||
|
|
||||||
|
expect(await dockview.addPopoutGroup(panel1)).toBeTruthy();
|
||||||
|
|
||||||
|
expect(dockview.panels.length).toBe(4);
|
||||||
|
expect(dockview.groups.length).toBe(3);
|
||||||
|
|
||||||
|
expect(panel1.api.location.type).toBe('popout');
|
||||||
|
|
||||||
|
dockview.fromJSON(dockview.toJSON());
|
||||||
|
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 0)); // popout views are completed as a promise so must complete microtask-queue
|
||||||
|
|
||||||
|
expect(dockview.panels.length).toBe(4);
|
||||||
|
expect(dockview.groups.length).toBe(3);
|
||||||
|
expect(dockview.groups.every((g) => g.api.isVisible)).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
test('move from fixed to popout group and back', async () => {
|
test('move from fixed to popout group and back', async () => {
|
||||||
const container = document.createElement('div');
|
const container = document.createElement('div');
|
||||||
|
|
||||||
|
@ -116,6 +116,7 @@ export interface DockviewPopoutGroupOptions {
|
|||||||
* Defaults to `/popout.html` if not provided
|
* Defaults to `/popout.html` if not provided
|
||||||
*/
|
*/
|
||||||
popoutUrl?: string;
|
popoutUrl?: string;
|
||||||
|
referenceGroup?: DockviewGroupPanel;
|
||||||
onDidOpen?: (event: { id: string; window: Window }) => void;
|
onDidOpen?: (event: { id: string; window: Window }) => void;
|
||||||
onWillClose?: (event: { id: string; window: Window }) => void;
|
onWillClose?: (event: { id: string; window: Window }) => void;
|
||||||
overridePopoutGroup?: DockviewGroupPanel;
|
overridePopoutGroup?: DockviewGroupPanel;
|
||||||
@ -726,10 +727,11 @@ export class DockviewComponent
|
|||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
const referenceGroup =
|
const referenceGroup = options?.referenceGroup
|
||||||
itemToPopout instanceof DockviewPanel
|
? options.referenceGroup
|
||||||
? itemToPopout.group
|
: itemToPopout instanceof DockviewPanel
|
||||||
: itemToPopout;
|
? itemToPopout.group
|
||||||
|
: itemToPopout;
|
||||||
|
|
||||||
const referenceLocation = itemToPopout.api.location.type;
|
const referenceLocation = itemToPopout.api.location.type;
|
||||||
|
|
||||||
@ -1483,18 +1485,14 @@ export class DockviewComponent
|
|||||||
|
|
||||||
const group = createGroupFromSerializedState(data);
|
const group = createGroupFromSerializedState(data);
|
||||||
|
|
||||||
this.addPopoutGroup(
|
this.addPopoutGroup(group, {
|
||||||
(gridReferenceGroup
|
position: position ?? undefined,
|
||||||
|
overridePopoutGroup: gridReferenceGroup ? group : undefined,
|
||||||
|
referenceGroup: gridReferenceGroup
|
||||||
? this.getPanel(gridReferenceGroup)
|
? this.getPanel(gridReferenceGroup)
|
||||||
: undefined) ?? group,
|
: undefined,
|
||||||
{
|
popoutUrl: url,
|
||||||
position: position ?? undefined,
|
});
|
||||||
overridePopoutGroup: gridReferenceGroup
|
|
||||||
? group
|
|
||||||
: undefined,
|
|
||||||
popoutUrl: url,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const floatingGroup of this._floatingGroups) {
|
for (const floatingGroup of this._floatingGroups) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user