From 33d8a7a026e159f60826c05e8f438cda7283e5f6 Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Thu, 25 Apr 2024 23:06:20 +0100 Subject: [PATCH] bug: prevent unintential add_panel event --- .../dockview/dockviewComponent.spec.ts | 52 +++++++++++++++++++ .../src/dockview/dockviewComponent.ts | 4 +- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts b/packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts index 569670d09..17497364f 100644 --- a/packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts +++ b/packages/dockview-core/src/__tests__/dockview/dockviewComponent.spec.ts @@ -5279,4 +5279,56 @@ describe('dockviewComponent', () => { expect(api.activePanel).toBe(panel1); }); }); + + describe('events flow', () => { + test('that floating a panel should not call an additional addPanel event', () => { + const container = document.createElement('div'); + + const dockview = new DockviewComponent({ + parentElement: container, + createComponent(options) { + switch (options.name) { + case 'default': + return new PanelContentPartTest( + options.id, + options.name + ); + default: + throw new Error(`unsupported`); + } + }, + }); + const api = new DockviewApi(dockview); + + dockview.layout(1000, 1000); + + let addPanelCount = 0; + let addGroupCount = 0; + + api.onDidAddPanel((event) => { + addPanelCount++; + }); + api.onDidAddGroup((event) => { + addGroupCount++; + }); + + api.addPanel({ + id: 'panel_1', + component: 'default', + }); + const panel2 = api.addPanel({ + id: 'panel_2', + component: 'default', + position: { referencePanel: 'panel_1' }, + }); + + expect(addPanelCount).toBe(2); + expect(addGroupCount).toBe(1); + + api.addFloatingGroup(panel2); + + expect(addPanelCount).toBe(2); + expect(addGroupCount).toBe(2); + }); + }); }); diff --git a/packages/dockview-core/src/dockview/dockviewComponent.ts b/packages/dockview-core/src/dockview/dockviewComponent.ts index fd9db4688..a3487e1be 100644 --- a/packages/dockview-core/src/dockview/dockviewComponent.ts +++ b/packages/dockview-core/src/dockview/dockviewComponent.ts @@ -857,7 +857,9 @@ export class DockviewComponent }) ); - group.model.openPanel(item, { skipSetGroupActive: true }); + this.movingLock(() => + group.model.openPanel(item, { skipSetGroupActive: true }) + ); } else { group = item;