From d526fe0f7f63809d3374bc458ec6d12165183a45 Mon Sep 17 00:00:00 2001 From: Matt Irvine Date: Tue, 15 May 2018 17:35:31 -0700 Subject: [PATCH] Fire model view close event when destroyed (#1427) --- src/sql/parts/modelComponents/modelViewContent.component.ts | 5 +++++ src/sql/parts/modelComponents/viewBase.ts | 2 ++ src/sql/services/model/modelViewService.ts | 1 + src/sql/workbench/api/node/mainThreadModelView.ts | 1 + 4 files changed, 9 insertions(+) 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)); } }); }