diff --git a/src/sql/parts/modelComponents/modelViewContent.component.ts b/src/sql/parts/modelComponents/modelViewContent.component.ts index e6fddcefa6..3bbeea15a6 100644 --- a/src/sql/parts/modelComponents/modelViewContent.component.ts +++ b/src/sql/parts/modelComponents/modelViewContent.component.ts @@ -54,6 +54,11 @@ export class ModelViewContent extends ViewBase implements OnInit, IModelView { })); } + ngOnDestroy() { + this._onDestroy.fire(); + super.ngOnDestroy(); + } + public layout(): void { } diff --git a/src/sql/parts/modelComponents/viewBase.ts b/src/sql/parts/modelComponents/viewBase.ts index ca821bd8f0..1352477429 100644 --- a/src/sql/parts/modelComponents/viewBase.ts +++ b/src/sql/parts/modelComponents/viewBase.ts @@ -27,6 +27,8 @@ const componentRegistry = Registry.as(Extensions.ComponentCo export abstract class ViewBase extends AngularDisposable implements IModelView { protected readonly modelStore: IModelStore; protected rootDescriptor: IComponentDescriptor; + protected _onDestroy = new Emitter(); + public readonly onDestroy = this._onDestroy.event; constructor(protected changeRef: ChangeDetectorRef) { super(); this.modelStore = new ModelStore(); diff --git a/src/sql/services/model/modelViewService.ts b/src/sql/services/model/modelViewService.ts index ee0c3a7001..c74b96236b 100644 --- a/src/sql/services/model/modelViewService.ts +++ b/src/sql/services/model/modelViewService.ts @@ -23,4 +23,5 @@ export interface IModelView extends IView { registerEvent(componentId: string); onEvent: Event; validate(componentId: string): Thenable; + readonly onDestroy: Event; } diff --git a/src/sql/workbench/api/node/mainThreadModelView.ts b/src/sql/workbench/api/node/mainThreadModelView.ts index 68b8846626..322a0509a2 100644 --- a/src/sql/workbench/api/node/mainThreadModelView.ts +++ b/src/sql/workbench/api/node/mainThreadModelView.ts @@ -36,6 +36,7 @@ export class MainThreadModelView extends Disposable implements MainThreadModelVi let handle = MainThreadModelView._handlePool++; this._dialogs.set(handle, view); this._proxy.$registerWidget(handle, view.id, view.connection, view.serverInfo); + view.onDestroy(() => this._proxy.$onClosed(handle)); } }); }