diff --git a/packages/dockview/src/dockview/defaultGroupPanelView.ts b/packages/dockview/src/dockview/defaultGroupPanelView.ts index d714f0212..8b71b4867 100644 --- a/packages/dockview/src/dockview/defaultGroupPanelView.ts +++ b/packages/dockview/src/dockview/defaultGroupPanelView.ts @@ -62,7 +62,8 @@ export class DefaultGroupPanelView implements IGroupPanelView { } updateParentGroup(group: GroupviewPanel, isPanelVisible: boolean): void { - // TODO + this._content.updateParentGroup(group, isPanelVisible); + this._tab?.updateParentGroup(group, isPanelVisible); } layout(width: number, height: number): void { diff --git a/packages/dockview/src/events.ts b/packages/dockview/src/events.ts index 0ba2cae3e..db1d80f25 100644 --- a/packages/dockview/src/events.ts +++ b/packages/dockview/src/events.ts @@ -101,3 +101,24 @@ export function addDisposableListener( }, }; } + +export class TickDelayedEvent implements IDisposable { + private timer: any; + + private readonly _onFired = new Emitter(); + readonly onEvent = this._onFired.event; + + fire(): void { + if (this.timer) { + clearTimeout(this.timer); + } + this.timer = setTimeout(() => { + this._onFired.fire(); + clearTimeout(this.timer); + }); + } + + dispose(): void { + this._onFired.dispose(); + } +} diff --git a/packages/dockview/src/gridview/baseComponentGridview.ts b/packages/dockview/src/gridview/baseComponentGridview.ts index 2d2d14022..cc9e7d15d 100644 --- a/packages/dockview/src/gridview/baseComponentGridview.ts +++ b/packages/dockview/src/gridview/baseComponentGridview.ts @@ -1,4 +1,4 @@ -import { Emitter, Event } from '../events'; +import { Emitter, Event, TickDelayedEvent } from '../events'; import { getGridLocation, Gridview, IGridView } from './gridview'; import { Position } from '../dnd/droptarget'; import { CompositeDisposable, IValueDisposable } from '../lifecycle'; @@ -165,37 +165,35 @@ export abstract class BaseGrid this.addDisposables( (() => { - /** - * TODO Fix this relatively ugly 'merge and delay' - */ - let timer: any; + const tickDelayedEvent = new TickDelayedEvent(); - return this.onGridEvent((event) => { - if ( - [ - GroupChangeKind.ADD_GROUP, - GroupChangeKind.REMOVE_GROUP, - GroupChangeKind.ADD_PANEL, - GroupChangeKind.REMOVE_PANEL, - GroupChangeKind.GROUP_ACTIVE, - GroupChangeKind.PANEL_ACTIVE, - GroupChangeKind.LAYOUT, - ].includes(event.kind) - ) { - if (timer) { - clearTimeout(timer); + return new CompositeDisposable( + this.onGridEvent((event) => { + if ( + [ + GroupChangeKind.ADD_GROUP, + GroupChangeKind.REMOVE_GROUP, + GroupChangeKind.ADD_PANEL, + GroupChangeKind.REMOVE_PANEL, + GroupChangeKind.GROUP_ACTIVE, + GroupChangeKind.PANEL_ACTIVE, + GroupChangeKind.LAYOUT, + ].includes(event.kind) + ) { + tickDelayedEvent.fire(); } - timer = setTimeout(() => { - this._onDidLayoutChange.fire(); - clearTimeout(timer); - }); - } - }); + }), + tickDelayedEvent.onEvent(() => { + this._onDidLayoutChange.fire(); + }), + tickDelayedEvent + ); })() ); } public abstract toJSON(): object; + public abstract fromJSON(data: any): void; public setVisible(panel: T, visible: boolean) { diff --git a/packages/dockview/src/gridview/gridview.ts b/packages/dockview/src/gridview/gridview.ts index aca4484fa..c7f82391e 100644 --- a/packages/dockview/src/gridview/gridview.ts +++ b/packages/dockview/src/gridview/gridview.ts @@ -60,7 +60,7 @@ function flipNode( return result as T; } else { return new LeafNode( - (node as LeafNode).view, + node.view, orthogonal(node.orientation), orthogonalSize ) as T; @@ -161,11 +161,7 @@ export interface IGridView { readonly minimumHeight: number; readonly maximumHeight: number; priority?: LayoutPriority; - layout( - width: number, - height: number - // top: number, left: number - ): void; + layout(width: number, height: number): void; toJSON(): object; fromJSON?(json: object): void; snap?: boolean; @@ -615,7 +611,6 @@ export class Gridview implements IDisposable { parent.removeChild(index, sizing); if (parent.children.length === 0) { - // throw new Error('Invalid grid state'); return node.view; } diff --git a/packages/dockview/src/groupview/groupview.ts b/packages/dockview/src/groupview/groupview.ts index 4e8a44c49..deaf7d1c2 100644 --- a/packages/dockview/src/groupview/groupview.ts +++ b/packages/dockview/src/groupview/groupview.ts @@ -221,7 +221,7 @@ export class Groupview extends CompositeDisposable implements IGroupview { this.accessor.doSetGroupActive(this.parent, true); }), this.contentContainer.onDidBlur(() => { - // this._activePanel?.api._ondid + // noop }), this.dropTarget.onDrop((event) => { this.handleDropEvent(event.event, event.position); diff --git a/packages/dockview/src/paneview/paneview.ts b/packages/dockview/src/paneview/paneview.ts index c4d6f97ad..fe4a689f8 100644 --- a/packages/dockview/src/paneview/paneview.ts +++ b/packages/dockview/src/paneview/paneview.ts @@ -165,10 +165,6 @@ export class Paneview extends CompositeDisposable implements IDisposable { } public layout(size: number, orthogonalSize: number): void { - // for (const paneItem of this.paneItems) { - // paneItem.pane.orthogonalSize = orthogonalSize; - // } - this.splitview.layout(size, orthogonalSize); }