/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import 'vs/css!./media/loadingComponent'; import { Component, Input, Inject, ChangeDetectorRef, forwardRef, OnDestroy, AfterViewInit, ElementRef } from '@angular/core'; import * as azdata from 'azdata'; import { ComponentBase } from 'sql/workbench/browser/modelComponents/componentBase'; import { localize } from 'vs/nls'; import { IComponent, IComponentDescriptor, IModelStore } from 'sql/platform/dashboard/browser/interfaces'; import { status } from 'vs/base/browser/ui/aria/aria'; import { ILogService } from 'vs/platform/log/common/log'; @Component({ selector: 'modelview-loadingComponent', template: `
{{getStatusText()}}
` }) export default class LoadingComponent extends ComponentBase implements IComponent, OnDestroy, AfterViewInit { private _component: IComponentDescriptor; @Input() descriptor: IComponentDescriptor; @Input() modelStore: IModelStore; constructor( @Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef, @Inject(forwardRef(() => ElementRef)) el: ElementRef, @Inject(ILogService) logService: ILogService) { super(changeRef, el, logService); this._validations.push(() => { if (!this._component) { return true; } return this.modelStore.getComponent(this._component.id).validate(); }); } ngAfterViewInit(): void { this.setLayout(); this.baseInit(); } ngOnDestroy(): void { this.baseDestroy(); } /// IComponent implementation public setLayout(): void { this.layout(); } public setProperties(properties: { [key: string]: any; }): void { const wasLoading = this.loading; super.setProperties(properties); if (wasLoading && !this.loading) { status(this.getStatusText()); } } public get loading(): boolean { return this.getPropertyOrDefault((props) => props.loading, false); } public set loading(newValue: boolean) { this.setPropertyFromUI((properties, value) => { properties.loading = value; }, newValue); this.layout(); } public get showText(): boolean { return this.getPropertyOrDefault((props) => props.showText, false); } public get loadingText(): string { return this.getPropertyOrDefault((props) => props.loadingText, localize('loadingMessage', "Loading")); } public get loadingCompletedText(): string { return this.getPropertyOrDefault((props) => props.loadingCompletedText, localize('loadingCompletedMessage', "Loading completed")); } public addToContainer(componentDescriptor: IComponentDescriptor): void { this._component = componentDescriptor; this.layout(); } public removeFromContainer(_componentDescriptor: IComponentDescriptor): void { this._component = undefined; this.layout(); } public getStatusText(): string { return this.loading ? this.loadingText : this.loadingCompletedText; } }