From 0a32c2ed891d0483cec5dabe58d49ce3cd497a9c Mon Sep 17 00:00:00 2001 From: mathuo <6710312+mathuo@users.noreply.github.com> Date: Wed, 27 Apr 2022 18:32:22 +0100 Subject: [PATCH] feat: simplify public api --- packages/dockview/src/api/component.api.ts | 36 ++++++++++++------- .../src/dockview/dockviewComponent.ts | 16 ++++----- .../src/gridview/gridviewComponent.ts | 19 ++-------- packages/dockview/src/panel/types.ts | 1 + .../src/paneview/paneviewComponent.ts | 25 ++++++------- .../src/splitview/splitviewComponent.ts | 26 ++++++-------- 6 files changed, 56 insertions(+), 67 deletions(-) diff --git a/packages/dockview/src/api/component.api.ts b/packages/dockview/src/api/component.api.ts index 324b53c6d..41430f0d2 100644 --- a/packages/dockview/src/api/component.api.ts +++ b/packages/dockview/src/api/component.api.ts @@ -33,16 +33,20 @@ import { GroupviewPanel, IGroupviewPanel } from '../groupview/groupviewPanel'; import { Emitter, Event } from '../events'; import { PaneviewDropEvent } from '../react'; -export interface CommonApi { +export interface CommonApi { readonly height: number; readonly width: number; readonly onDidLayoutChange: Event; + readonly onDidLayoutFromJSON: Event; focus(): void; layout(width: number, height: number): void; resizeToFit(): void; + fromJSON(data: T): void; + + toJSON(): T; } -export class SplitviewApi implements CommonApi { +export class SplitviewApi implements CommonApi { get minimumSize(): number { return this.component.minimumSize; } @@ -67,6 +71,10 @@ export class SplitviewApi implements CommonApi { return this.component.orientation; } + get onDidLayoutFromJSON(): Event { + return this.component.onDidLayoutFromJSON; + } + get onDidLayoutChange(): Event { return this.component.onDidLayoutChange; } @@ -125,8 +133,8 @@ export class SplitviewApi implements CommonApi { this.component.movePanel(from, to); } - fromJSON(data: SerializedSplitview, deferComponentLayout?: boolean): void { - this.component.fromJSON(data, deferComponentLayout); + fromJSON(data: SerializedSplitview): void { + this.component.fromJSON(data); } toJSON(): SerializedSplitview { @@ -134,7 +142,7 @@ export class SplitviewApi implements CommonApi { } } -export class PaneviewApi implements CommonApi { +export class PaneviewApi implements CommonApi { get minimumSize(): number { return this.component.minimumSize; } @@ -155,6 +163,10 @@ export class PaneviewApi implements CommonApi { return this.component.onDidLayoutChange; } + get onDidLayoutFromJSON(): Event { + return this.component.onDidLayoutFromJSON; + } + get onDidAddView(): Event { return this.component.onDidAddView; } @@ -212,8 +224,8 @@ export class PaneviewApi implements CommonApi { this.component.resizeToFit(); } - fromJSON(data: SerializedPaneview, deferComponentLayout?: boolean): void { - this.component.fromJSON(data, deferComponentLayout); + fromJSON(data: SerializedPaneview): void { + this.component.fromJSON(data); } toJSON(): SerializedPaneview { @@ -221,7 +233,7 @@ export class PaneviewApi implements CommonApi { } } -export class GridviewApi implements CommonApi { +export class GridviewApi implements CommonApi { get minimumHeight(): number { return this.component.minimumHeight; } @@ -323,8 +335,8 @@ export class GridviewApi implements CommonApi { this.component.setActive(panel); } - fromJSON(data: SerializedGridview, deferComponentLayout?: boolean): void { - return this.component.fromJSON(data, deferComponentLayout); + fromJSON(data: SerializedGridview): void { + return this.component.fromJSON(data); } toJSON(): SerializedGridview { @@ -332,7 +344,7 @@ export class GridviewApi implements CommonApi { } } -export class DockviewApi implements CommonApi { +export class DockviewApi implements CommonApi { get width(): number { return this.component.width; } @@ -389,7 +401,7 @@ export class DockviewApi implements CommonApi { return this.component.onDidRemovePanel; } - get onDidLayoutfromJSON(): Event { + get onDidLayoutFromJSON(): Event { return this.component.onDidLayoutfromJSON; } diff --git a/packages/dockview/src/dockview/dockviewComponent.ts b/packages/dockview/src/dockview/dockviewComponent.ts index dd7b763c5..66cd71801 100644 --- a/packages/dockview/src/dockview/dockviewComponent.ts +++ b/packages/dockview/src/dockview/dockviewComponent.ts @@ -416,15 +416,15 @@ export class DockviewComponent let referenceGroup: GroupviewPanel | undefined; if (options.position?.referencePanel) { - const referencePanel = this.getGroupPanel( - options.position.referencePanel - ); + const referencePanel = this.getGroupPanel( + options.position.referencePanel + ); - if (!referencePanel) { - throw new Error( - `referencePanel ${options.position.referencePanel} does not exist` - ); - } + if (!referencePanel) { + throw new Error( + `referencePanel ${options.position.referencePanel} does not exist` + ); + } referenceGroup = this.findGroup(referencePanel); } else { diff --git a/packages/dockview/src/gridview/gridviewComponent.ts b/packages/dockview/src/gridview/gridviewComponent.ts index 2ae69ea1c..891792ac0 100644 --- a/packages/dockview/src/gridview/gridviewComponent.ts +++ b/packages/dockview/src/gridview/gridviewComponent.ts @@ -38,7 +38,6 @@ export interface SerializedGridview { } export interface AddComponentOptions extends BaseComponentOptions { - size?: number; minimumWidth?: number; maximumWidth?: number; minimumHeight?: number; @@ -67,10 +66,7 @@ export interface IGridviewComponent extends IBaseGrid { removePanel(panel: IGridviewPanel, sizing?: Sizing): void; toggleVisibility(panel: IGridviewPanel): void; focus(): void; - fromJSON( - serializedGridview: SerializedGridview, - deferComponentLayout?: boolean - ): void; + fromJSON(serializedGridview: SerializedGridview): void; toJSON(): SerializedGridview; movePanel( panel: IGridviewPanel, @@ -182,10 +178,7 @@ export class GridviewComponent this.activeGroup?.focus(); } - public fromJSON( - serializedGridview: SerializedGridview, - deferComponentLayout?: boolean - ) { + public fromJSON(serializedGridview: SerializedGridview) { const { grid, activePanel } = serializedGridview; const groups = Array.from(this._groups.values()); // reassign since group panels will mutate @@ -237,13 +230,7 @@ export class GridviewComponent this.layout(this.width, this.height, true); - if (deferComponentLayout) { - setTimeout(() => { - queue.forEach((f) => f()); - }, 0); - } else { - queue.forEach((f) => f()); - } + queue.forEach((f) => f()); if (typeof activePanel === 'string') { const panel = this.getPanel(activePanel); diff --git a/packages/dockview/src/panel/types.ts b/packages/dockview/src/panel/types.ts index 83e067162..7519da20a 100644 --- a/packages/dockview/src/panel/types.ts +++ b/packages/dockview/src/panel/types.ts @@ -35,4 +35,5 @@ export interface BaseComponentOptions { params?: Parameters; snap?: boolean; priority?: LayoutPriority; + size?: number; } diff --git a/packages/dockview/src/paneview/paneviewComponent.ts b/packages/dockview/src/paneview/paneviewComponent.ts index c3fbd6a8a..65e251c08 100644 --- a/packages/dockview/src/paneview/paneviewComponent.ts +++ b/packages/dockview/src/paneview/paneviewComponent.ts @@ -102,13 +102,11 @@ export interface IPaneviewComponent extends IDisposable { readonly onDidRemoveView: Event; readonly onDidDrop: Event; readonly onDidLayoutChange: Event; + readonly onDidLayoutFromJSON: Event; addPanel(options: AddPaneviewComponentOptions): IPaneviewPanel; layout(width: number, height: number): void; toJSON(): SerializedPaneview; - fromJSON( - serializedPaneview: SerializedPaneview, - deferComponentLayout?: boolean - ): void; + fromJSON(serializedPaneview: SerializedPaneview): void; resizeToFit(): void; focus(): void; getPanels(): IPaneviewPanel[]; @@ -126,6 +124,9 @@ export class PaneviewComponent private _viewDisposables = new Map(); private _paneview!: Paneview; + private readonly _onDidLayoutfromJSON = new Emitter(); + readonly onDidLayoutFromJSON: Event = this._onDidLayoutfromJSON.event; + private readonly _onDidLayoutChange = new Emitter(); readonly onDidLayoutChange: Event = this._onDidLayoutChange.event; @@ -188,6 +189,7 @@ export class PaneviewComponent this.addDisposables( this._onDidLayoutChange, + this._onDidLayoutfromJSON, this._onDidDrop, this._onDidAddView, this._onDidRemoveView @@ -353,10 +355,7 @@ export class PaneviewComponent }; } - fromJSON( - serializedPaneview: SerializedPaneview, - deferComponentLayout?: boolean - ): void { + fromJSON(serializedPaneview: SerializedPaneview): void { const { views, size } = serializedPaneview; const queue: Function[] = []; @@ -446,13 +445,9 @@ export class PaneviewComponent this.layout(this.width, this.height); - if (deferComponentLayout) { - setTimeout(() => { - queue.forEach((f) => f()); - }, 0); - } else { - queue.forEach((f) => f()); - } + queue.forEach((f) => f()); + + this._onDidLayoutfromJSON.fire(); } private doAddPanel(panel: PaneFramework) { diff --git a/packages/dockview/src/splitview/splitviewComponent.ts b/packages/dockview/src/splitview/splitviewComponent.ts index 4cbf03bf7..a0e223f39 100644 --- a/packages/dockview/src/splitview/splitviewComponent.ts +++ b/packages/dockview/src/splitview/splitviewComponent.ts @@ -41,7 +41,6 @@ export interface SerializedSplitview { } export interface AddSplitviewComponentOptions extends BaseComponentOptions { - size?: number; index?: number; minimumSize?: number; maximumSize?: number; @@ -61,15 +60,13 @@ export interface ISplitviewComponent extends IDisposable { readonly orientation: Orientation; readonly onDidAddView: Event; readonly onDidRemoveView: Event; + readonly onDidLayoutFromJSON: Event; updateOptions(options: Partial): void; addPanel(options: AddSplitviewComponentOptions): void; layout(width: number, height: number): void; onDidLayoutChange: Event; toJSON(): SerializedSplitview; - fromJSON( - serializedSplitview: SerializedSplitview, - deferComponentLayout?: boolean - ): void; + fromJSON(serializedSplitview: SerializedSplitview): void; resizeToFit(): void; focus(): void; getPanel(id: string): ISplitviewPanel | undefined; @@ -93,6 +90,9 @@ export class SplitviewComponent private panels = new Map>(); private _options: SplitviewComponentOptions; + private readonly _onDidLayoutfromJSON = new Emitter(); + readonly onDidLayoutFromJSON: Event = this._onDidLayoutfromJSON.event; + private readonly _onDidAddView = new Emitter(); readonly onDidAddView = this._onDidAddView.event; @@ -172,6 +172,7 @@ export class SplitviewComponent this.addDisposables( this._disposable, this._onDidAddView, + this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange ); @@ -345,10 +346,7 @@ export class SplitviewComponent }; } - fromJSON( - serializedSplitview: SerializedSplitview, - deferComponentLayout = false - ): void { + fromJSON(serializedSplitview: SerializedSplitview): void { const { views, orientation, size, activeView } = serializedSplitview; for (const [_, value] of this.panels.entries()) { @@ -412,13 +410,7 @@ export class SplitviewComponent this.layout(this.width, this.height); - if (deferComponentLayout) { - setTimeout(() => { - queue.forEach((f) => f()); - }, 0); - } else { - queue.forEach((f) => f()); - } + queue.forEach((f) => f()); if (typeof activeView === 'string') { const panel = this.getPanel(activeView); @@ -426,6 +418,8 @@ export class SplitviewComponent this.setActive(panel); } } + + this._onDidLayoutfromJSON.fire(); } dispose() {