From 3545483fc1087b8f3756f3b2e5b399353c625bd2 Mon Sep 17 00:00:00 2001 From: Matt Irvine Date: Fri, 6 Apr 2018 17:58:27 -0700 Subject: [PATCH] Update action collapsed state with emitter (#1099) --- src/sql/parts/dashboard/common/actions.ts | 9 ++++++++- .../contents/dashboardWidgetWrapper.component.ts | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/sql/parts/dashboard/common/actions.ts b/src/sql/parts/dashboard/common/actions.ts index 67fbd3f00f..5d42553547 100644 --- a/src/sql/parts/dashboard/common/actions.ts +++ b/src/sql/parts/dashboard/common/actions.ts @@ -8,6 +8,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IDisposable } from 'vs/base/common/lifecycle'; +import Event from 'vs/base/common/event'; import { IAngularEventingService, AngularEventType, IAngularEvent } from 'sql/services/angularEventing/angularEventingService'; import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface'; @@ -209,6 +210,7 @@ export class CollapseWidgetAction extends Action { private _uri: string, private _widgetUuid: string, private collpasedState: boolean, + private collapsedStateChangedEvent: Event, @IAngularEventingService private _angularEventService: IAngularEventingService ) { super( @@ -216,6 +218,7 @@ export class CollapseWidgetAction extends Action { collpasedState ? CollapseWidgetAction.EXPAND_LABEL : CollapseWidgetAction.COLLPASE_LABEL, collpasedState ? CollapseWidgetAction.EXPAND_ICON : CollapseWidgetAction.COLLAPSE_ICON ); + this.collapsedStateChangedEvent(collapsed => this._updateState(collapsed)); } run(): TPromise { @@ -225,7 +228,11 @@ export class CollapseWidgetAction extends Action { } private _toggleState(): void { - this.collpasedState = !this.collpasedState; + this._updateState(!this.collpasedState); + } + + private _updateState(collapsed: boolean): void { + this.collpasedState = collapsed; this._setClass(this.collpasedState ? CollapseWidgetAction.EXPAND_ICON : CollapseWidgetAction.COLLAPSE_ICON); this._setLabel(this.collpasedState ? CollapseWidgetAction.EXPAND_LABEL : CollapseWidgetAction.COLLPASE_LABEL); } diff --git a/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts b/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts index d1ed5b123d..4bfb335633 100644 --- a/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts +++ b/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts @@ -35,6 +35,7 @@ import { Registry } from 'vs/platform/registry/common/platform'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { memoize } from 'vs/base/common/decorators'; import { generateUuid } from 'vs/base/common/uuid'; +import { Emitter } from 'vs/base/common/event'; const componentMap: { [x: string]: Type } = { 'properties-widget': PropertiesWidgetComponent, @@ -63,12 +64,17 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit return; } this._collapsed = val; + if (this.collapsedStateChangedEmitter) { + this.collapsedStateChangedEmitter.fire(this._collapsed); + } this._changeref.detectChanges(); if (!val) { this.loadWidget(); } } + private collapsedStateChangedEmitter: Emitter; + @memoize public get guid(): string { return generateUuid(); @@ -108,7 +114,8 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit this._actionbar = new ActionBar(this._actionbarRef.nativeElement); if (this._actions) { if (this.collapsable) { - this._actionbar.push(this._bootstrap.instantiationService.createInstance(CollapseWidgetAction, this._bootstrap.getUnderlyingUri(), this.guid, this.collapsed), { icon: true, label: false }); + this.collapsedStateChangedEmitter = new Emitter(); + this._actionbar.push(this._bootstrap.instantiationService.createInstance(CollapseWidgetAction, this._bootstrap.getUnderlyingUri(), this.guid, this.collapsed, this.collapsedStateChangedEmitter.event), { icon: true, label: false }); } this._actionbar.push(this._bootstrap.instantiationService.createInstance(ToggleMoreWidgetAction, this._actions, this._component.actionsContext), { icon: true, label: false }); }