@microsoft/mgt
Version:
The Microsoft Graph Toolkit
99 lines • 3.59 kB
JavaScript
/**
* -------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
* See License in the project root for license information.
* -------------------------------------------------------------------------------------------
*/
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { property } from 'lit-element';
import { MgtBaseComponent } from '../baseComponent';
/**
* Abstract implementation for provider component
*
* @export
* @abstract
* @class MgtBaseProvider
* @extends {MgtBaseComponent}
*/
export class MgtBaseProvider extends MgtBaseComponent {
/**
* The IProvider created by this component
*
* @memberof MgtBaseProvider
*/
get provider() {
return this._provider;
}
set provider(value) {
if (this._provider) {
this.provider.removeStateChangedHandler(() => this.stateChangedHandler);
}
this._provider = value;
if (this._provider) {
this.provider.onStateChanged(() => this.stateChangedHandler);
}
}
/**
* Gets weather this provider can be used in this environment
*
* @readonly
* @type {boolean}
* @memberof MgtBaseProvider
*/
get isAvailable() {
return true;
}
/**
* Invoked when the element is first updated. Implement to perform one time
* work on the element after update.
*
* Setting properties inside this method will trigger the element to update
* again after this update cycle completes.
*
* * @param _changedProperties Map of changed properties with old values
*/
firstUpdated(changedProperties) {
super.firstUpdated(changedProperties);
let higherPriority = false;
if (this.dependsOn) {
let higherPriorityProvider = this.dependsOn;
while (higherPriorityProvider) {
if (higherPriorityProvider.isAvailable) {
higherPriority = true;
break;
}
higherPriorityProvider = higherPriorityProvider.dependsOn;
}
}
if (!higherPriority && this.isAvailable) {
this.initializeProvider();
}
}
/**
* method called to initialize the provider. Each derived class should provide
* their own implementation
*
* @protected
* @memberof MgtBaseProvider
*/
// tslint:disable-next-line: no-empty
initializeProvider() { }
stateChangedHandler() {
this.fireCustomEvent('onStateChanged', this.provider.state);
}
}
__decorate([
property({
attribute: 'depends-on',
converter: newValue => {
return document.querySelector(newValue);
},
type: String
})
], MgtBaseProvider.prototype, "dependsOn", void 0);
//# sourceMappingURL=baseProvider.js.map