@nova-ui/dashboards
Version:
Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and
107 lines • 17.3 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { Inject, Injectable } from "@angular/core";
import difference from "lodash/difference";
import keyBy from "lodash/keyBy";
import omit from "lodash/omit";
import { takeUntil } from "rxjs/operators";
import { immutableSet } from "@nova-ui/bits";
import { EventBus } from "@nova-ui/bits";
import { PizzagnaService } from "../../../../pizzagna/services/pizzagna.service";
import { PizzagnaLayer, PIZZAGNA_EVENT_BUS, } from "../../../../types";
import { PreviewService } from "../../preview.service";
import { BaseConverter } from "../base-converter";
import * as i0 from "@angular/core";
import * as i1 from "../../preview.service";
import * as i2 from "../../../../pizzagna/services/pizzagna.service";
import * as i3 from "@nova-ui/bits";
export class KpiTilesConverterService extends BaseConverter {
constructor(eventBus, previewService, pizzagnaService) {
super(eventBus, previewService, pizzagnaService);
this.shouldReadForm = false;
}
ngAfterViewInit() {
super.ngAfterViewInit();
}
buildForm() {
const preview = this.getPreview();
const tiles = preview?.tiles?.properties?.nodes?.map((id) => ({
id,
componentType: preview[id].componentType,
})) || [];
const tileIds = tiles?.map((tile) => tile.id);
this.pizzagnaService.createComponentsFromTemplate("tiles", tileIds);
let updatedPizzagna = this.pizzagnaService.pizzagna;
updatedPizzagna = immutableSet(updatedPizzagna, `${PizzagnaLayer.Data}.tiles.properties.tiles`, tiles);
setTimeout(() => (this.shouldReadForm = true));
this.updateFormPizzagna(updatedPizzagna);
}
toPreview(form) {
form.get("tiles")
?.valueChanges.pipe(takeUntil(this.destroy$))
.subscribe((kpiTiles) => {
if (!this.shouldReadForm) {
return;
}
let preview = this.getPreview();
const tileIds = (kpiTiles || []).map((t) => t.id);
const idDifference = difference(preview?.tiles?.properties?.nodes, tileIds);
if (idDifference.length) {
preview = omit(preview, idDifference);
}
const tilesIndex = keyBy(kpiTiles, (t) => t.id); // this helps us to access the actual tile forms
preview = immutableSet(preview, "tiles.properties.nodes", tileIds);
for (const tileId of tileIds) {
const tile = tilesIndex[tileId];
if (!tile) {
// tile might not have been created yet
continue;
}
if (!preview[tile.id]) {
const value = this.getTileConfiguration(tile.id, tile.componentType);
preview = immutableSet(preview, tile.id, value);
}
}
this.updatePreview(preview);
});
}
getTileConfiguration(id, componentType) {
return {
id: id,
// componentType: componentType,
providers: {
dataSource: {
// @ts-ignore: The expected type comes from property 'providerId'
// which is declared here on type 'IProviderConfiguration'
providerId: undefined,
},
},
};
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiTilesConverterService, deps: [{ token: PIZZAGNA_EVENT_BUS }, { token: i1.PreviewService }, { token: i2.PizzagnaService }], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiTilesConverterService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KpiTilesConverterService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i3.EventBus, decorators: [{
type: Inject,
args: [PIZZAGNA_EVENT_BUS]
}] }, { type: i1.PreviewService }, { type: i2.PizzagnaService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpLXRpbGVzLWNvbnZlcnRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWd1cmF0b3Ivc2VydmljZXMvY29udmVydGVycy9rcGkva3BpLXRpbGVzLWNvbnZlcnRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQWlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxVQUFVLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNqRixPQUFPLEVBRUgsYUFBYSxFQUNiLGtCQUFrQixHQUNyQixNQUFNLG1CQUFtQixDQUFDO0FBRzNCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7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UCxJQUFJLENBQUMsb0JBQW9CLENBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FDckIsQ0FBQztvQkFDTixPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNuRDthQUNKO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFUyxvQkFBb0IsQ0FDMUIsRUFBVSxFQUNWLGFBQXFCO1FBRXJCLE9BQU87WUFDSCxFQUFFLEVBQUUsRUFBRTtZQUNOLGdDQUFnQztZQUNoQyxTQUFTLEVBQUU7Z0JBQ1AsVUFBVSxFQUFFO29CQUNSLGlFQUFpRTtvQkFDakUsMERBQTBEO29CQUMxRCxVQUFVLEVBQUUsU0FBUztpQkFDeEI7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDO2tJQXZHUSx3QkFBd0Isa0JBT3JCLGtCQUFrQjtzSUFQckIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOzswQkFRRixNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgZGlmZmVyZW5jZSBmcm9tIFwibG9kYXNoL2RpZmZlcmVuY2VcIjtcbmltcG9ydCBrZXlCeSBmcm9tIFwibG9kYXNoL2tleUJ5XCI7XG5pbXBvcnQgb21pdCBmcm9tIFwibG9kYXNoL29taXRcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBpbW11dGFibGVTZXQgfSBmcm9tIFwiQG5vdmEtdWkvYml0c1wiO1xuaW1wb3J0IHsgRXZlbnRCdXMsIElFdmVudCB9IGZyb20gXCJAbm92YS11aS9iaXRzXCI7XG5cbmltcG9ydCB7IFBpenphZ25hU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9waXp6YWduYS9zZXJ2aWNlcy9waXp6YWduYS5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIElDb21wb25lbnRDb25maWd1cmF0aW9uLFxuICAgIFBpenphZ25hTGF5ZXIsXG4gICAgUElaWkFHTkFfRVZFTlRfQlVTLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IElJdGVtQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3R5cGVzXCI7XG5pbXBvcnQgeyBJS3BpSXRlbUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy93aWRnZXRzL2twaS90eXBlc1wiO1xuaW1wb3J0IHsgUHJldmlld1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vcHJldmlldy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCYXNlQ29udmVydGVyIH0gZnJvbSBcIi4uL2Jhc2UtY29udmVydGVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBLcGlUaWxlc0NvbnZlcnRlclNlcnZpY2VcbiAgICBleHRlbmRzIEJhc2VDb252ZXJ0ZXJcbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXRcbntcbiAgICBwcml2YXRlIHNob3VsZFJlYWRGb3JtID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChQSVpaQUdOQV9FVkVOVF9CVVMpIGV2ZW50QnVzOiBFdmVudEJ1czxJRXZlbnQ+LFxuICAgICAgICBwcmV2aWV3U2VydmljZTogUHJldmlld1NlcnZpY2UsXG4gICAgICAgIHBpenphZ25hU2VydmljZTogUGl6emFnbmFTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGV2ZW50QnVzLCBwcmV2aWV3U2VydmljZSwgcGl6emFnbmFTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRGb3JtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5nZXRQcmV2aWV3KCk7XG4gICAgICAgIGNvbnN0IHRpbGVzOiBJS3BpSXRlbUNvbmZpZ3VyYXRpb25bXSA9XG4gICAgICAgICAgICBwcmV2aWV3Py50aWxlcz8ucHJvcGVydGllcz8ubm9kZXM/Lm1hcChcbiAgICAgICAgICAgICAgICAoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VHlwZTogcHJldmlld1tpZF0uY29tcG9uZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBJS3BpSXRlbUNvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgICApIHx8IFtdO1xuICAgICAgICBjb25zdCB0aWxlSWRzID0gdGlsZXM/Lm1hcCgodGlsZSkgPT4gdGlsZS5pZCk7XG5cbiAgICAgICAgdGhpcy5waXp6YWduYVNlcnZpY2UuY3JlYXRlQ29tcG9uZW50c0Zyb21UZW1wbGF0ZShcInRpbGVzXCIsIHRpbGVJZHMpO1xuICAgICAgICBsZXQgdXBkYXRlZFBpenphZ25hID0gdGhpcy5waXp6YWduYVNlcnZpY2UucGl6emFnbmE7XG5cbiAgICAgICAgdXBkYXRlZFBpenphZ25hID0gaW1tdXRhYmxlU2V0KFxuICAgICAgICAgICAgdXBkYXRlZFBpenphZ25hLFxuICAgICAgICAgICAgYCR7UGl6emFnbmFMYXllci5EYXRhfS50aWxlcy5wcm9wZXJ0aWVzLnRpbGVzYCxcbiAgICAgICAgICAgIHRpbGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5zaG91bGRSZWFkRm9ybSA9IHRydWUpKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtUGl6emFnbmEodXBkYXRlZFBpenphZ25hKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9QcmV2aWV3KGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgICBmb3JtLmdldChcInRpbGVzXCIpXG4gICAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGtwaVRpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJlYWRGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHByZXZpZXcgPSB0aGlzLmdldFByZXZpZXcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlSWRzID0gKGtwaVRpbGVzIHx8IFtdKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICh0OiBJSXRlbUNvbmZpZ3VyYXRpb24pID0+IHQuaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkRGlmZmVyZW5jZTogc3RyaW5nW10gPSBkaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Py50aWxlcz8ucHJvcGVydGllcz8ubm9kZXMsXG4gICAgICAgICAgICAgICAgICAgIHRpbGVJZHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChpZERpZmZlcmVuY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXcgPSBvbWl0KHByZXZpZXcsIGlkRGlmZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbGVzSW5kZXggPSBrZXlCeShrcGlUaWxlcywgKHQpID0+IHQuaWQpOyAvLyB0aGlzIGhlbHBzIHVzIHRvIGFjY2VzcyB0aGUgYWN0dWFsIHRpbGUgZm9ybXNcbiAgICAgICAgICAgICAgICBwcmV2aWV3ID0gaW1tdXRhYmxlU2V0KFxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICBcInRpbGVzLnByb3BlcnRpZXMubm9kZXNcIixcbiAgICAgICAgICAgICAgICAgICAgdGlsZUlkc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRpbGVJZCBvZiB0aWxlSWRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc0luZGV4W3RpbGVJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGlsZSBtaWdodCBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlld1t0aWxlLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IElDb21wb25lbnRDb25maWd1cmF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRpbGVDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmNvbXBvbmVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlldyA9IGltbXV0YWJsZVNldChwcmV2aWV3LCB0aWxlLmlkLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3KHByZXZpZXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFRpbGVDb25maWd1cmF0aW9uKFxuICAgICAgICBpZDogc3RyaW5nLFxuICAgICAgICBjb21wb25lbnRUeXBlOiBzdHJpbmdcbiAgICApOiBJQ29tcG9uZW50Q29uZmlndXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAvLyBjb21wb25lbnRUeXBlOiBjb21wb25lbnRUeXBlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBUaGUgZXhwZWN0ZWQgdHlwZSBjb21lcyBmcm9tIHByb3BlcnR5ICdwcm92aWRlcklkJ1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBkZWNsYXJlZCBoZXJlIG9uIHR5cGUgJ0lQcm92aWRlckNvbmZpZ3VyYXRpb24nXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVySWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=