UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

173 lines 23.3 kB
import { ContentChildren, Directive, EventEmitter, Injector, Input, IterableDiffers, Output, QueryList } from '@angular/core'; import { merge } from 'rxjs'; import { CoreBaseComponent } from '../../common/base.component'; import * as i0 from "@angular/core"; const _c0 = ["action"]; // eslint-disable-next-line @angular-eslint/directive-class-suffix export class ActionContainerComponent extends CoreBaseComponent { /** * Constructor for ActionContainerComponent. */ constructor(iterableDiffers, injector) { super(injector); this.iterableDiffers = iterableDiffers; this.targetChange = new EventEmitter(); /** * Event emitter fired whenever an error occurs within a child ActionItem. */ this.error = new EventEmitter(); /** * Event emitter fired whenever a child ActionItem is executed. */ this.executed = new EventEmitter(); /** * List of all child ActionItem objects, both HTML and programmatically defined. */ this.combinedActions = []; /** * List of programmatically defined ActionItem objects stored in ActionContainerComponent. */ this.internalActions = []; /** * List of HTML defined ActionItem objects stored in ActionContainerComponent. */ this.inlineActions = []; this.displayInlineActionsFirstInternal = false; this.enabledInternal = true; } /** * List of programmatically defined ActionItem objects stored in ActionContainerComponent. */ set actions(actions) { this.internalActions = actions || []; this.updateActions(); } /** * Flag set to display either HTML or programmatically defined ActionItem objects first. * True to display HTML defined actions first, false to display programmatically defined actions first (defaults to false). */ set displayInlineActionsFirst(displayFirst) { this.displayInlineActionsFirstInternal = displayFirst; } /** * List of all ActionItem objects stored in ActionContainerComponent. */ get actions() { this.combinedActions.length = 0; this.combinedActions.push.apply(this.combinedActions, this.displayInlineActionsFirstInternal ? this.inlineActions.concat(this.internalActions) : this.internalActions.concat(this.inlineActions)); return this.combinedActions; } /** * Target object used by child actions of ActionContainerComponent. */ set target(input) { this.internalTarget = input; this.targetChange.emit(this.internalTarget); this.updateActionStates(); } get target() { return this.internalTarget; } /** * Flag set to enable or disable ActionContainerComponent. */ set enabled(input) { this.enabledInternal = !!input; this.updateActionStates(); } get enabled() { return this.enabledInternal; } /** * Returns true if any child ActionItem objects have the busy flag set, false otherwise. */ get isBusy() { return this.actions && this.actions.some(action => action.busy); } /** * Callback method run when ActionContainerComponent is initialized. */ ngOnInit() { // whenever an action executes or errors, update action states // NOTE: Angular documentation states that we should not treat event emitters as observables. // in the future this could break if angular changes its implementation. // We should consider another way of surfacing this. this.completedSubscription = merge(this.executed, this.error).subscribe(next => this.updateActionStates()); } /** * Callback method run when ActionContainerComponent is destroyed. */ ngOnDestroy() { this.completedSubscription?.unsubscribe(); } /** * Callback method run immediately after Angular has completed initialization of all of ActionContainerComponent's content. */ ngAfterContentInit() { this.childActions.changes.subscribe(val => { this.inlineActions.length = 0; this.inlineActions.push.apply(this.inlineActions, this.childActions.map(item => item.action)); }); this.inlineActions = this.childActions.map(item => item.action); this.updateActions(); } // Needs more investigation. /** * Angular's doCheck life cycle hook. Note there is an odd condition when trying to create dynamic toolbar items inline with ng for. * Somehow this method is not getting called in time to initialize the button that is created by the ng for statement. */ ngDoCheck() { if (this.actionsDiffer) { const changes = this.actionsDiffer.diff(this.actions); if (changes) { changes.forEachAddedItem((record) => (record.item).addedToContainer(this.target, this)); changes.forEachRemovedItem((record) => (record.item).removedFromContainer()); } } if (this.wasBusy !== this.isBusy) { this.wasBusy = this.isBusy; this.updateActionStates(); } } /** * Method to update all child ActionItem objects states. */ updateActionStates() { if (this.actions && this.actions.length > 0) { this.actions.forEach(action => action.setActionState(this.target, this)); } } updateActions() { this.actionsDiffer = this.iterableDiffers.find(this.actions).create(null); this.updateActionStates(); } } /** @nocollapse */ ActionContainerComponent.ɵfac = function ActionContainerComponent_Factory(t) { return new (t || ActionContainerComponent)(i0.ɵɵdirectiveInject(i0.IterableDiffers), i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ ActionContainerComponent.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: ActionContainerComponent, contentQueries: function ActionContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, _c0, 4); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.childActions = _t); } }, inputs: { actions: "actions", displayInlineActionsFirst: "displayInlineActionsFirst", target: "target", enabled: "enabled" }, outputs: { targetChange: "targetChange", error: "error", executed: "executed" }, features: [i0.ɵɵInheritDefinitionFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionContainerComponent, [{ type: Directive }], function () { return [{ type: i0.IterableDiffers }, { type: i0.Injector }]; }, { childActions: [{ type: ContentChildren, args: ['action'] }], actions: [{ type: Input }], displayInlineActionsFirst: [{ type: Input }], target: [{ type: Input }], targetChange: [{ type: Output }], enabled: [{ type: Input }], error: [{ type: Output }], executed: [{ type: Output }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9hY3Rpb25zL2NvbnRhaW5lcnMvYWN0aW9uLWNvbnRhaW5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGVBQWUsRUFDZixTQUFTLEVBRVQsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsZUFBZSxFQUdmLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUtoRSxrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQix3QkFDbEIsU0FBUSxpQkFBaUI7SUEySHpCOztPQUVHO0lBQ0gsWUFBb0IsZUFBZ0MsRUFBRSxRQUFrQjtRQUNwRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEQSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUEzRDdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQWM5Qzs7V0FFRztRQUdJLFVBQUssR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUUxRDs7V0FFRztRQUVJLGFBQVEsR0FBOEMsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFTN0c7O1dBRUc7UUFDSSxvQkFBZSxHQUFpQixFQUFFLENBQUM7UUFFMUM7O1dBRUc7UUFDSSxvQkFBZSxHQUFpQixFQUFFLENBQUM7UUFFMUM7O1VBRUU7UUFDSyxrQkFBYSxHQUFpQixFQUFFLENBQUM7UUFFaEMsc0NBQWlDLEdBQUcsS0FBSyxDQUFDO1FBQzFDLG9CQUFlLEdBQUcsSUFBSSxDQUFDO0lBVy9CLENBQUM7SUE1R0Q7O09BRUc7SUFDSCxJQUNXLE9BQU8sQ0FBQyxP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QU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDOzttSEFsTWlCLHdCQUF3QjswR0FBeEIsd0JBQXdCOzs7Ozs7dUZBQXhCLHdCQUF3QjtjQUY3QyxTQUFTO3lGQXFCQyxZQUFZO2tCQURsQixlQUFlO21CQUFDLFFBQVE7WUFPZCxPQUFPO2tCQURqQixLQUFLO1lBV0sseUJBQXlCO2tCQURuQyxLQUFLO1lBd0JLLE1BQU07a0JBRGhCLEtBQUs7WUFXQyxZQUFZO2tCQURsQixNQUFNO1lBT0ksT0FBTztrQkFEakIsS0FBSztZQWNDLEtBQUs7a0JBRlgsTUFBTTtZQVFBLFFBQVE7a0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgRGlyZWN0aXZlLFxyXG4gICAgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBJdGVyYWJsZUNoYW5nZVJlY29yZCxcclxuICAgIEl0ZXJhYmxlRGlmZmVyLFxyXG4gICAgSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUXVlcnlMaXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtLCBBY3Rpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vaXRlbXMvYWN0aW9uLWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aW9uQ29udGFpbmVyLCBBY3Rpb25Db250YWluZXJPcmllbnRhdGlvbiwgQWN0aW9uSXRlbUV4ZWN1dGVkRXZlbnRBcmdzIH0gZnJvbSAnLi9hY3Rpb24tY29udGFpbmVyJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBDb3JlQmFzZUNvbXBvbmVudFxyXG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBEb0NoZWNrLCBPbkluaXQsIE9uRGVzdHJveSwgQWN0aW9uQ29udGFpbmVyIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IHRoYXQgc3RvcmVzIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudCBjb21wYWN0IHN0YXRlLiBUcnVlIGZvciBjb21wYWN0LCBmYWxzZSBmb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGNvbXBhY3QoKTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IHRoYXQgc3RvcmVzIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudCBvcmllbnRhdGlvbi5cclxuICAgICAqIFZlcnRpY2FsIGRpc3BsYXlzIGNvbnRhaW5lciBmcm9tIHRvcCB0byBib3R0b20gb2YgcGFnZSwgaG9yaXpvbnRhbCBkaXNwbGF5cyBmcm9tIGxlZnQgdG8gcmlnaHQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgb3JpZW50YXRpb24oKTogQWN0aW9uQ29udGFpbmVyT3JpZW50YXRpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0IG9mIEhUTUwgZGVmaW5lZCBBY3Rpb25JdGVtIG9iamVjdHMgc3RvcmVkIGluIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbignYWN0aW9uJylcclxuICAgIHB1YmxpYyBjaGlsZEFjdGlvbnM6IFF1ZXJ5TGlzdDxBY3Rpb25JdGVtQ29tcG9uZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2YgcHJvZ3JhbW1hdGljYWxseSBkZWZpbmVkIEFjdGlvbkl0ZW0gb2JqZWN0cyBzdG9yZWQgaW4gQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBhY3Rpb25zKGFjdGlvbnM6IEFjdGlvbkl0ZW1bXSkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBY3Rpb25zID0gYWN0aW9ucyB8fCBbXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsYWcgc2V0IHRvIGRpc3BsYXkgZWl0aGVyIEhUTUwgb3IgcHJvZ3JhbW1hdGljYWxseSBkZWZpbmVkIEFjdGlvbkl0ZW0gb2JqZWN0cyBmaXJzdC5cclxuICAgICAqIFRydWUgdG8gZGlzcGxheSBIVE1MIGRlZmluZWQgYWN0aW9ucyBmaXJzdCwgZmFsc2UgdG8gZGlzcGxheSBwcm9ncmFtbWF0aWNhbGx5IGRlZmluZWQgYWN0aW9ucyBmaXJzdCAoZGVmYXVsdHMgdG8gZmFsc2UpLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBkaXNwbGF5SW5saW5lQWN0aW9uc0ZpcnN0KGRpc3BsYXlGaXJzdDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUlubGluZUFjdGlvbnNGaXJzdEludGVybmFsID0gZGlzcGxheUZpcnN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBhbGwgQWN0aW9uSXRlbSBvYmplY3RzIHN0b3JlZCBpbiBBY3Rpb25Db250YWluZXJDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYWN0aW9ucygpOiBBY3Rpb25JdGVtW10ge1xyXG4gICAgICAgIHRoaXMuY29tYmluZWRBY3Rpb25zLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuY29tYmluZWRBY3Rpb25zLnB1c2guYXBwbHkoXHJcbiAgICAgICAgICAgIHRoaXMuY29tYmluZWRBY3Rpb25zLFxyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlJbmxpbmVBY3Rpb25zRmlyc3RJbnRlcm5hbCA/IHRoaXMuaW5saW5lQWN0aW9ucy5jb25jYXQodGhpcy5pbnRlcm5hbEFjdGlvbnMpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaW50ZXJuYWxBY3Rpb25zLmNvbmNhdCh0aGlzLmlubGluZUFjdGlvbnMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYmluZWRBY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IG9iamVjdCB1c2VkIGJ5IGNoaWxkIGFjdGlvbnMgb2YgQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCB0YXJnZXQoaW5wdXQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxUYXJnZXQgPSBpbnB1dDtcclxuICAgICAgICB0aGlzLnRhcmdldENoYW5nZS5lbWl0KHRoaXMuaW50ZXJuYWxUYXJnZXQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aW9uU3RhdGVzKCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHRhcmdldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFRhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB0YXJnZXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsYWcgc2V0IHRvIGVuYWJsZSBvciBkaXNhYmxlIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZW5hYmxlZChpbnB1dDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZEludGVybmFsID0gISFpbnB1dDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGlvblN0YXRlcygpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBlbmFibGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWRJbnRlcm5hbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IGVtaXR0ZXIgZmlyZWQgd2hlbmV2ZXIgYW4gZXJyb3Igb2NjdXJzIHdpdGhpbiBhIGNoaWxkIEFjdGlvbkl0ZW0uXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXHJcbiAgICBwdWJsaWMgZXJyb3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudCBlbWl0dGVyIGZpcmVkIHdoZW5ldmVyIGEgY2hpbGQgQWN0aW9uSXRlbSBpcyBleGVjdXRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZXhlY3V0ZWQ6IEV2ZW50RW1pdHRlcjxBY3Rpb25JdGVtRXhlY3V0ZWRFdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25JdGVtRXhlY3V0ZWRFdmVudEFyZ3M+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgYW55IGNoaWxkIEFjdGlvbkl0ZW0gb2JqZWN0cyBoYXZlIHRoZSBidXN5IGZsYWcgc2V0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXNCdXN5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbnMgJiYgdGhpcy5hY3Rpb25zLnNvbWUoYWN0aW9uID0+IGFjdGlvbi5idXN5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2YgYWxsIGNoaWxkIEFjdGlvbkl0ZW0gb2JqZWN0cywgYm90aCBIVE1MIGFuZCBwcm9ncmFtbWF0aWNhbGx5IGRlZmluZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21iaW5lZEFjdGlvbnM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBwcm9ncmFtbWF0aWNhbGx5IGRlZmluZWQgQWN0aW9uSXRlbSBvYmplY3RzIHN0b3JlZCBpbiBBY3Rpb25Db250YWluZXJDb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbEFjdGlvbnM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBMaXN0IG9mIEhUTUwgZGVmaW5lZCBBY3Rpb25JdGVtIG9iamVjdHMgc3RvcmVkIGluIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudC5cclxuICAgICovXHJcbiAgICBwdWJsaWMgaW5saW5lQWN0aW9uczogQWN0aW9uSXRlbVtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBkaXNwbGF5SW5saW5lQWN0aW9uc0ZpcnN0SW50ZXJuYWwgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZW5hYmxlZEludGVybmFsID0gdHJ1ZTtcclxuICAgIHByaXZhdGUgaW50ZXJuYWxUYXJnZXQ6IGFueTtcclxuICAgIHByaXZhdGUgYWN0aW9uc0RpZmZlcjogSXRlcmFibGVEaWZmZXI8YW55PjtcclxuICAgIHByaXZhdGUgd2FzQnVzeTogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgY29tcGxldGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciBmb3IgQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBtZXRob2QgcnVuIHdoZW4gQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gd2hlbmV2ZXIgYW4gYWN0aW9uIGV4ZWN1dGVzIG9yIGVycm9ycywgdXBkYXRlIGFjdGlvbiBzdGF0ZXNcclxuICAgICAgICAvLyBOT1RFOiBBbmd1bGFyIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgd2Ugc2hvdWxkIG5vdCB0cmVhdCBldmVudCBlbWl0dGVycyBhcyBvYnNlcnZhYmxlcy5cclxuICAgICAgICAvLyBpbiB0aGUgZnV0dXJlIHRoaXMgY291bGQgYnJlYWsgaWYgYW5ndWxhciBjaGFuZ2VzIGl0cyBpbXBsZW1lbnRhdGlvbi5cclxuICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgYW5vdGhlciB3YXkgb2Ygc3VyZmFjaW5nIHRoaXMuXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZWRTdWJzY3JpcHRpb24gPSBtZXJnZSh0aGlzLmV4ZWN1dGVkLCB0aGlzLmVycm9yKS5zdWJzY3JpYmUobmV4dCA9PiB0aGlzLnVwZGF0ZUFjdGlvblN0YXRlcygpKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBtZXRob2QgcnVuIHdoZW4gQWN0aW9uQ29udGFpbmVyQ29tcG9uZW50IGlzIGRlc3Ryb3llZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuY29tcGxldGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgbWV0aG9kIHJ1biBpbW1lZGlhdGVseSBhZnRlciBBbmd1bGFyIGhhcyBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb24gb2YgYWxsIG9mIEFjdGlvbkNvbnRhaW5lckNvbXBvbmVudCdzIGNvbnRlbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZEFjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbmxpbmVBY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuaW5saW5lQWN0aW9ucy5wdXNoLmFwcGx5KHRoaXMuaW5saW5lQWN0aW9ucywgdGhpcy5jaGlsZEFjdGlvbnMubWFwKGl0ZW0gPT4gaXRlbS5hY3Rpb24pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlubGluZUFjdGlvbnMgPSB0aGlzLmNoaWxkQWN0aW9ucy5tYXAoaXRlbSA9PiBpdGVtLmFjdGlvbik7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLlxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmd1bGFyJ3MgZG9DaGVjayBsaWZlIGN5Y2xlIGhvb2suIE5vdGUgdGhlcmUgaXMgYW4gb2RkIGNvbmRpdGlvbiB3aGVuIHRyeWluZyB0byBjcmVhdGUgZHluYW1pYyB0b29sYmFyIGl0ZW1zIGlubGluZSB3aXRoIG5nIGZvci5cclxuICAgICAqIFNvbWVob3cgdGhpcyBtZXRob2QgaXMgbm90IGdldHRpbmcgY2FsbGVkIGluIHRpbWUgdG8gaW5pdGlhbGl6ZSB0aGUgYnV0dG9uIHRoYXQgaXMgY3JlYXRlZCBieSB0aGUgbmcgZm9yIHN0YXRlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hY3Rpb25zRGlmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmFjdGlvbnNEaWZmZXIuZGlmZih0aGlzLmFjdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPEFjdGlvbkl0ZW0+KSA9PiAocmVjb3JkLml0ZW0pLmFkZGVkVG9Db250YWluZXIodGhpcy50YXJnZXQsIHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6IEl0ZXJhYmxlQ2hhbmdlUmVjb3JkPEFjdGlvbkl0ZW0+KSA9PiAocmVjb3JkLml0ZW0pLnJlbW92ZWRGcm9tQ29udGFpbmVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53YXNCdXN5ICE9PSB0aGlzLmlzQnVzeSkge1xyXG4gICAgICAgICAgICB0aGlzLndhc0J1c3kgPSB0aGlzLmlzQnVzeTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3Rpb25TdGF0ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdG8gdXBkYXRlIGFsbCBjaGlsZCBBY3Rpb25JdGVtIG9iamVjdHMgc3RhdGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlQWN0aW9uU3RhdGVzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbnMgJiYgdGhpcy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbi5zZXRBY3Rpb25TdGF0ZSh0aGlzLnRhcmdldCwgdGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUFjdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25zRGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLmFjdGlvbnMpLmNyZWF0ZShudWxsKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGlvblN0YXRlcygpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==