From 68f0319e1bb5ee354f7ef8c72a7d350eb392724f Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Mon, 11 Mar 2024 20:26:31 +0000 Subject: [PATCH] feat: expose component string --- .../src/__tests__/api/api.spec.ts | 2 +- .../__tests__/api/dockviewPanelApi.spec.ts | 9 +- .../__tests__/dockview/dockviewPanel.spec.ts | 90 +++++++++++++++---- .../src/api/dockviewGroupPanelApi.ts | 2 +- .../dockview-core/src/api/dockviewPanelApi.ts | 13 ++- .../dockview-core/src/api/gridviewPanelApi.ts | 4 +- packages/dockview-core/src/api/panelApi.ts | 2 +- .../dockview-core/src/api/paneviewPanelApi.ts | 4 +- .../src/api/splitviewPanelApi.ts | 4 +- .../src/dockview/deserializer.ts | 2 + .../src/dockview/dockviewComponent.ts | 2 + .../src/dockview/dockviewPanel.ts | 10 ++- .../src/gridview/gridviewPanel.ts | 2 +- .../src/paneview/paneviewPanel.ts | 2 +- .../src/splitview/splitviewPanel.ts | 2 +- 15 files changed, 114 insertions(+), 36 deletions(-) diff --git a/packages/dockview-core/src/__tests__/api/api.spec.ts b/packages/dockview-core/src/__tests__/api/api.spec.ts index 5b40a6aa9..d596c2052 100644 --- a/packages/dockview-core/src/__tests__/api/api.spec.ts +++ b/packages/dockview-core/src/__tests__/api/api.spec.ts @@ -5,7 +5,7 @@ describe('api', () => { let api: PanelApiImpl; beforeEach(() => { - api = new PanelApiImpl('dummy_id'); + api = new PanelApiImpl('dummy_id', 'fake-component'); }); test('updateParameters', () => { diff --git a/packages/dockview-core/src/__tests__/api/dockviewPanelApi.spec.ts b/packages/dockview-core/src/__tests__/api/dockviewPanelApi.spec.ts index 33ebe05d9..c883a20f8 100644 --- a/packages/dockview-core/src/__tests__/api/dockviewPanelApi.spec.ts +++ b/packages/dockview-core/src/__tests__/api/dockviewPanelApi.spec.ts @@ -31,7 +31,8 @@ describe('groupPanelApi', () => { const cut = new DockviewPanelApiImpl( panel, group, - accessor + accessor, + 'fake-component' ); cut.setTitle('test_title'); @@ -59,7 +60,8 @@ describe('groupPanelApi', () => { const cut = new DockviewPanelApiImpl( groupPanel, groupViewPanel, - accessor + accessor, + 'fake-component' ); cut.updateParameters({ keyA: 'valueA' }); @@ -89,7 +91,8 @@ describe('groupPanelApi', () => { const cut = new DockviewPanelApiImpl( groupPanel, groupViewPanel, - accessor + accessor, + 'fake-component' ); let events = 0; diff --git a/packages/dockview-core/src/__tests__/dockview/dockviewPanel.spec.ts b/packages/dockview-core/src/__tests__/dockview/dockviewPanel.spec.ts index 0a6dc8e64..24bbb2f9d 100644 --- a/packages/dockview-core/src/__tests__/dockview/dockviewPanel.spec.ts +++ b/packages/dockview-core/src/__tests__/dockview/dockviewPanel.spec.ts @@ -34,9 +34,18 @@ describe('dockviewPanel', () => { }); const model = new panelModelMock(); - const cut = new DockviewPanel('fake-id', accessor, api, group, model, { - renderer: 'onlyWhenVisibile', - }); + const cut = new DockviewPanel( + 'fake-id', + 'fake-component', + undefined, + accessor, + api, + group, + model, + { + renderer: 'onlyWhenVisibile', + } + ); let latestTitle: string | undefined = undefined; @@ -84,9 +93,18 @@ describe('dockviewPanel', () => { }); const model = new panelModelMock(); - const cut = new DockviewPanel('fake-id', accessor, api, group, model, { - renderer: 'onlyWhenVisibile', - }); + const cut = new DockviewPanel( + 'fake-id', + 'fake-component', + undefined, + accessor, + api, + group, + model, + { + renderer: 'onlyWhenVisibile', + } + ); cut.init({ title: 'myTitle', params: {} }); expect(cut.title).toBe('myTitle'); @@ -130,9 +148,18 @@ describe('dockviewPanel', () => { }); const model = new panelModelMock(); - const cut = new DockviewPanel('fake-id', accessor, api, group, model, { - renderer: 'onlyWhenVisibile', - }); + const cut = new DockviewPanel( + 'fake-id', + 'fake-component', + undefined, + accessor, + api, + group, + model, + { + renderer: 'onlyWhenVisibile', + } + ); cut.init({ params: {}, title: 'title' }); @@ -167,9 +194,18 @@ describe('dockviewPanel', () => { }); const model = new panelModelMock(); - const cut = new DockviewPanel('fake-id', accessor, api, group, model, { - renderer: 'onlyWhenVisibile', - }); + const cut = new DockviewPanel( + 'fake-id', + 'fake-component', + undefined, + accessor, + api, + group, + model, + { + renderer: 'onlyWhenVisibile', + } + ); expect(cut.params).toEqual(undefined); @@ -205,9 +241,18 @@ describe('dockviewPanel', () => { }); const model = new panelModelMock(); - const cut = new DockviewPanel('fake-id', accessor, api, group, model, { - renderer: 'onlyWhenVisibile', - }); + const cut = new DockviewPanel( + 'fake-id', + 'fake-component', + undefined, + accessor, + api, + group, + model, + { + renderer: 'onlyWhenVisibile', + } + ); cut.api.setSize({ height: 123, width: 456 }); @@ -241,9 +286,18 @@ describe('dockviewPanel', () => { }); const model = new panelModelMock(); - const cut = new DockviewPanel('fake-id', accessor, api, group, model, { - renderer: 'onlyWhenVisibile', - }); + const cut = new DockviewPanel( + 'fake-id', + 'fake-component', + undefined, + accessor, + api, + group, + model, + { + renderer: 'onlyWhenVisibile', + } + ); cut.init({ params: { a: '1', b: '2' }, title: 'A title' }); expect(cut.params).toEqual({ a: '1', b: '2' }); diff --git a/packages/dockview-core/src/api/dockviewGroupPanelApi.ts b/packages/dockview-core/src/api/dockviewGroupPanelApi.ts index 2f299b6ee..c72d990f6 100644 --- a/packages/dockview-core/src/api/dockviewGroupPanelApi.ts +++ b/packages/dockview-core/src/api/dockviewGroupPanelApi.ts @@ -42,7 +42,7 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl { } constructor(id: string, private readonly accessor: DockviewComponent) { - super(id); + super(id, '__dockviewgroup__'); this.addDisposables(this._onDidLocationChange); } diff --git a/packages/dockview-core/src/api/dockviewPanelApi.ts b/packages/dockview-core/src/api/dockviewPanelApi.ts index 06a4ebc22..a5f4087b8 100644 --- a/packages/dockview-core/src/api/dockviewPanelApi.ts +++ b/packages/dockview-core/src/api/dockviewPanelApi.ts @@ -62,6 +62,7 @@ export class DockviewPanelApiImpl implements DockviewPanelApi { private _group: DockviewGroupPanel; + private _tabComponent: string | undefined; readonly _onDidTitleChange = new Emitter(); readonly onDidTitleChange = this._onDidTitleChange.event; @@ -118,12 +119,20 @@ export class DockviewPanelApiImpl return this._group; } + get tabComponent(): string | undefined { + return this._tabComponent; + } + constructor( private panel: DockviewPanel, group: DockviewGroupPanel, - private readonly accessor: DockviewComponent + private readonly accessor: DockviewComponent, + component: string, + tabComponent?: string ) { - super(panel.id); + super(panel.id, component); + + this._tabComponent = tabComponent; this.initialize(panel); diff --git a/packages/dockview-core/src/api/gridviewPanelApi.ts b/packages/dockview-core/src/api/gridviewPanelApi.ts index 4a7e50424..8c661a4fe 100644 --- a/packages/dockview-core/src/api/gridviewPanelApi.ts +++ b/packages/dockview-core/src/api/gridviewPanelApi.ts @@ -44,8 +44,8 @@ export class GridviewPanelApiImpl private readonly _onDidSizeChange = new Emitter(); readonly onDidSizeChange: Event = this._onDidSizeChange.event; - constructor(id: string, panel?: IPanel) { - super(id); + constructor(id: string, component: string, panel?: IPanel) { + super(id, component); this.addDisposables( this._onDidConstraintsChangeInternal, diff --git a/packages/dockview-core/src/api/panelApi.ts b/packages/dockview-core/src/api/panelApi.ts index 698c480e9..bba4a616b 100644 --- a/packages/dockview-core/src/api/panelApi.ts +++ b/packages/dockview-core/src/api/panelApi.ts @@ -121,7 +121,7 @@ export class PanelApiImpl extends CompositeDisposable implements PanelApi { return this._height; } - constructor(readonly id: string) { + constructor(readonly id: string, readonly component: string) { super(); this.addDisposables( diff --git a/packages/dockview-core/src/api/paneviewPanelApi.ts b/packages/dockview-core/src/api/paneviewPanelApi.ts index c90a70db4..c387fd9c0 100644 --- a/packages/dockview-core/src/api/paneviewPanelApi.ts +++ b/packages/dockview-core/src/api/paneviewPanelApi.ts @@ -35,8 +35,8 @@ export class PaneviewPanelApiImpl this._pane = pane; } - constructor(id: string) { - super(id); + constructor(id: string, component: string) { + super(id, component); this.addDisposables( this._onDidExpansionChange, diff --git a/packages/dockview-core/src/api/splitviewPanelApi.ts b/packages/dockview-core/src/api/splitviewPanelApi.ts index cfe3cd103..089d9e4ec 100644 --- a/packages/dockview-core/src/api/splitviewPanelApi.ts +++ b/packages/dockview-core/src/api/splitviewPanelApi.ts @@ -45,8 +45,8 @@ export class SplitviewPanelApiImpl this._onDidSizeChange.event; // - constructor(id: string) { - super(id); + constructor(id: string, component: string) { + super(id, component); this.addDisposables( this._onDidConstraintsChangeInternal, diff --git a/packages/dockview-core/src/dockview/deserializer.ts b/packages/dockview-core/src/dockview/deserializer.ts index 3b9ab8e96..41a4a0102 100644 --- a/packages/dockview-core/src/dockview/deserializer.ts +++ b/packages/dockview-core/src/dockview/deserializer.ts @@ -49,6 +49,8 @@ export class DefaultDockviewDeserialzier implements IPanelDeserializer { const panel = new DockviewPanel( panelId, + contentComponent, + tabComponent, this.accessor, new DockviewApi(this.accessor), group, diff --git a/packages/dockview-core/src/dockview/dockviewComponent.ts b/packages/dockview-core/src/dockview/dockviewComponent.ts index a5fdacf39..f905f6444 100644 --- a/packages/dockview-core/src/dockview/dockviewComponent.ts +++ b/packages/dockview-core/src/dockview/dockviewComponent.ts @@ -2204,6 +2204,8 @@ export class DockviewComponent const panel = new DockviewPanel( options.id, + contentComponent, + tabComponent, this, this._api, group, diff --git a/packages/dockview-core/src/dockview/dockviewPanel.ts b/packages/dockview-core/src/dockview/dockviewPanel.ts index 72ae1ca72..fdc3656e7 100644 --- a/packages/dockview-core/src/dockview/dockviewPanel.ts +++ b/packages/dockview-core/src/dockview/dockviewPanel.ts @@ -58,6 +58,8 @@ export class DockviewPanel constructor( public readonly id: string, + component: string, + tabComponent: string | undefined, private readonly accessor: DockviewComponent, private readonly containerApi: DockviewApi, group: DockviewGroupPanel, @@ -68,7 +70,13 @@ export class DockviewPanel this._renderer = options.renderer; this._group = group; - this.api = new DockviewPanelApiImpl(this, this._group, accessor); + this.api = new DockviewPanelApiImpl( + this, + this._group, + accessor, + component, + tabComponent + ); this.addDisposables( this.api.onActiveChange(() => { diff --git a/packages/dockview-core/src/gridview/gridviewPanel.ts b/packages/dockview-core/src/gridview/gridviewPanel.ts index 799395f0c..f398f5b7a 100644 --- a/packages/dockview-core/src/gridview/gridviewPanel.ts +++ b/packages/dockview-core/src/gridview/gridviewPanel.ts @@ -140,7 +140,7 @@ export abstract class GridviewPanel< }, api?: T ) { - super(id, component, api ?? new GridviewPanelApiImpl(id)); + super(id, component, api ?? new GridviewPanelApiImpl(id, component)); if (typeof options?.minimumWidth === 'number') { this._minimumWidth = options.minimumWidth; diff --git a/packages/dockview-core/src/paneview/paneviewPanel.ts b/packages/dockview-core/src/paneview/paneviewPanel.ts index d07490d48..6d3d7254a 100644 --- a/packages/dockview-core/src/paneview/paneviewPanel.ts +++ b/packages/dockview-core/src/paneview/paneviewPanel.ts @@ -164,7 +164,7 @@ export abstract class PaneviewPanel isExpanded: boolean, isHeaderVisible: boolean ) { - super(id, component, new PaneviewPanelApiImpl(id)); + super(id, component, new PaneviewPanelApiImpl(id, component)); this.api.pane = this; // TODO cannot use 'this' before 'super' this.api.initialize(this); diff --git a/packages/dockview-core/src/splitview/splitviewPanel.ts b/packages/dockview-core/src/splitview/splitviewPanel.ts index f9e834068..e96275aba 100644 --- a/packages/dockview-core/src/splitview/splitviewPanel.ts +++ b/packages/dockview-core/src/splitview/splitviewPanel.ts @@ -83,7 +83,7 @@ export abstract class SplitviewPanel } constructor(id: string, componentName: string) { - super(id, componentName, new SplitviewPanelApiImpl(id)); + super(id, componentName, new SplitviewPanelApiImpl(id, componentName)); this.api.initialize(this);