@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
85 lines • 16.7 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 get from "lodash/get";
import { takeUntil } from "rxjs/operators";
import { EventBus, immutableSet, TimeframeService, } 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 TimeseriesMetadataConverterService extends BaseConverter {
constructor(eventBus, previewService, pizzagnaService, timeframeService) {
super(eventBus, previewService, pizzagnaService);
this.timeframeService = timeframeService;
}
ngAfterViewInit() {
super.ngAfterViewInit();
}
buildForm() {
let formPizzagna = this.pizzagnaService.pizzagna;
const preview = this.getPreview();
const timeSpans = Object.keys(this.timeframeService.currentPresets).map((k) => ({
id: k,
name: this.timeframeService.currentPresets[k].name,
}));
const propertyPrefix = `${PizzagnaLayer.Data}.timeseriesMetadata.properties`;
formPizzagna = immutableSet(formPizzagna, `${propertyPrefix}.timeSpans`, timeSpans);
const selectedPresetId = get(preview, `timeframeSelection.properties.timeframe.selectedPresetId`, "last7Days");
const selectedTimeSpan = timeSpans.find((timeSpan) => timeSpan.id === selectedPresetId);
if (selectedTimeSpan) {
formPizzagna = immutableSet(formPizzagna, `${propertyPrefix}.startingTimespan`, selectedTimeSpan);
}
const configuration = get(preview, `chart.properties.configuration`);
if (configuration) {
formPizzagna = immutableSet(formPizzagna, `${propertyPrefix}.legendPlacement`, configuration.legendPlacement);
formPizzagna = immutableSet(formPizzagna, `${propertyPrefix}.leftAxisLabel`, configuration.leftAxisLabel);
formPizzagna = immutableSet(formPizzagna, `${propertyPrefix}.preset`, configuration.preset);
}
this.updateFormPizzagna(formPizzagna);
}
toPreview(form) {
form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
let preview = this.getPreview();
const presetId = get(value, "startingTimespan.id");
if (presetId) {
preview = immutableSet(preview, "timeframeSelection.properties.timeframe.selectedPresetId", presetId);
}
const chartConfig = `chart.properties.configuration`;
preview = immutableSet(preview, `${chartConfig}.legendPlacement`, get(value, "legendPlacement", ""));
preview = immutableSet(preview, `${chartConfig}.leftAxisLabel`, get(value, "leftAxisLabel", ""));
preview = immutableSet(preview, `${chartConfig}.preset`, get(value, "preset", ""));
this.updatePreview(preview);
});
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeseriesMetadataConverterService, deps: [{ token: PIZZAGNA_EVENT_BUS }, { token: i1.PreviewService }, { token: i2.PizzagnaService }, { token: i3.TimeframeService }], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeseriesMetadataConverterService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeseriesMetadataConverterService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i3.EventBus, decorators: [{
type: Inject,
args: [PIZZAGNA_EVENT_BUS]
}] }, { type: i1.PreviewService }, { type: i2.PizzagnaService }, { type: i3.TimeframeService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXNlcmllcy1tZXRhZGF0YS1jb252ZXJ0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlndXJhdG9yL3NlcnZpY2VzL2NvbnZlcnRlcnMvdGltZXNlcmllcy90aW1lc2VyaWVzLW1ldGFkYXRhLWNvbnZlcnRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQWlCLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQ0gsUUFBUSxFQUVSLFlBQVksRUFDWixnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUdsRCxNQUFNLE9BQU8sa0NBQ1QsU0FBUSxhQUFhO0lBR3JCLFlBQ2dDLFFBQTBCLEVBQ3RE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LE9BQU8sRUFDUCxHQUFHLFdBQVcsZ0JBQWdCLEVBQzlCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUNsQyxDQUFDO1lBQ0YsT0FBTyxHQUFHLFlBQVksQ0FDbEIsT0FBTyxFQUNQLEdBQUcsV0FBVyxTQUFTLEVBQ3ZCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUMzQixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7a0lBM0dRLGtDQUFrQyxrQkFLL0Isa0JBQWtCO3NJQUxyQixrQ0FBa0M7OzRGQUFsQyxrQ0FBa0M7a0JBRDlDLFVBQVU7OzBCQU1GLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCBnZXQgZnJvbSBcImxvZGFzaC9nZXRcIjtcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQge1xuICAgIEV2ZW50QnVzLFxuICAgIElFdmVudCxcbiAgICBpbW11dGFibGVTZXQsXG4gICAgVGltZWZyYW1lU2VydmljZSxcbn0gZnJvbSBcIkBub3ZhLXVpL2JpdHNcIjtcblxuaW1wb3J0IHsgSVRpbWVzZXJpZXNXaWRnZXRDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tcG9uZW50cy90aW1lc2VyaWVzLXdpZGdldC90eXBlc1wiO1xuaW1wb3J0IHsgUGl6emFnbmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3BpenphZ25hL3NlcnZpY2VzL3BpenphZ25hLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBpenphZ25hTGF5ZXIsIFBJWlpBR05BX0VWRU5UX0JVUyB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgUHJldmlld1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vcHJldmlldy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBCYXNlQ29udmVydGVyIH0gZnJvbSBcIi4uL2Jhc2UtY29udmVydGVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaW1lc2VyaWVzTWV0YWRhdGFDb252ZXJ0ZXJTZXJ2aWNlXG4gICAgZXh0ZW5kcyBCYXNlQ29udmVydGVyXG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0XG57XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoUElaWkFHTkFfRVZFTlRfQlVTKSBldmVudEJ1czogRXZlbnRCdXM8SUV2ZW50PixcbiAgICAgICAgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLFxuICAgICAgICBwaXp6YWduYVNlcnZpY2U6IFBpenphZ25hU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aW1lZnJhbWVTZXJ2aWNlOiBUaW1lZnJhbWVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGV2ZW50QnVzLCBwcmV2aWV3U2VydmljZSwgcGl6emFnbmFTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRGb3JtKCk6IHZvaWQge1xuICAgICAgICBsZXQgZm9ybVBpenphZ25hID0gdGhpcy5waXp6YWduYVNlcnZpY2UucGl6emFnbmE7XG4gICAgICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLmdldFByZXZpZXcoKTtcbiAgICAgICAgY29uc3QgdGltZVNwYW5zID0gT2JqZWN0LmtleXModGhpcy50aW1lZnJhbWVTZXJ2aWNlLmN1cnJlbnRQcmVzZXRzKS5tYXAoXG4gICAgICAgICAgICAoaykgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogayxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLnRpbWVmcmFtZVNlcnZpY2UuY3VycmVudFByZXNldHNba10ubmFtZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydHlQcmVmaXggPSBgJHtQaXp6YWduYUxheWVyLkRhdGF9LnRpbWVzZXJpZXNNZXRhZGF0YS5wcm9wZXJ0aWVzYDtcbiAgICAgICAgZm9ybVBpenphZ25hID0gaW1tdXRhYmxlU2V0KFxuICAgICAgICAgICAgZm9ybVBpenphZ25hLFxuICAgICAgICAgICAgYCR7cHJvcGVydHlQcmVmaXh9LnRpbWVTcGFuc2AsXG4gICAgICAgICAgICB0aW1lU3BhbnNcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZFByZXNldElkID0gZ2V0KFxuICAgICAgICAgICAgcHJldmlldyxcbiAgICAgICAgICAgIGB0aW1lZnJhbWVTZWxlY3Rpb24ucHJvcGVydGllcy50aW1lZnJhbWUuc2VsZWN0ZWRQcmVzZXRJZGAsXG4gICAgICAgICAgICBcImxhc3Q3RGF5c1wiXG4gICAgICAgICkgYXMgdW5rbm93biBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVGltZVNwYW4gPSB0aW1lU3BhbnMuZmluZChcbiAgICAgICAgICAgICh0aW1lU3BhbikgPT4gdGltZVNwYW4uaWQgPT09IHNlbGVjdGVkUHJlc2V0SWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkVGltZVNwYW4pIHtcbiAgICAgICAgICAgIGZvcm1QaXp6YWduYSA9IGltbXV0YWJsZVNldChcbiAgICAgICAgICAgICAgICBmb3JtUGl6emFnbmEsXG4gICAgICAgICAgICAgICAgYCR7cHJvcGVydHlQcmVmaXh9LnN0YXJ0aW5nVGltZXNwYW5gLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGltZVNwYW5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZ2V0KFxuICAgICAgICAgICAgcHJldmlldyxcbiAgICAgICAgICAgIGBjaGFydC5wcm9wZXJ0aWVzLmNvbmZpZ3VyYXRpb25gXG4gICAgICAgICkgYXMgdW5rbm93biBhcyBJVGltZXNlcmllc1dpZGdldENvbmZpZztcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIGZvcm1QaXp6YWduYSA9IGltbXV0YWJsZVNldChcbiAgICAgICAgICAgICAgICBmb3JtUGl6emFnbmEsXG4gICAgICAgICAgICAgICAgYCR7cHJvcGVydHlQcmVmaXh9LmxlZ2VuZFBsYWNlbWVudGAsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5sZWdlbmRQbGFjZW1lbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3JtUGl6emFnbmEgPSBpbW11dGFibGVTZXQoXG4gICAgICAgICAgICAgICAgZm9ybVBpenphZ25hLFxuICAgICAgICAgICAgICAgIGAke3Byb3BlcnR5UHJlZml4fS5sZWZ0QXhpc0xhYmVsYCxcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmxlZnRBeGlzTGFiZWxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3JtUGl6emFnbmEgPSBpbW11dGFibGVTZXQoXG4gICAgICAgICAgICAgICAgZm9ybVBpenphZ25hLFxuICAgICAgICAgICAgICAgIGAke3Byb3BlcnR5UHJlZml4fS5wcmVzZXRgLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ucHJlc2V0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtUGl6emFnbmEoZm9ybVBpenphZ25hKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9QcmV2aWV3KGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgICAgICBmb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHByZXZpZXcgPSB0aGlzLmdldFByZXZpZXcoKTtcblxuICAgICAgICAgICAgY29uc3QgcHJlc2V0SWQgPSBnZXQodmFsdWUsIFwic3RhcnRpbmdUaW1lc3Bhbi5pZFwiKTtcbiAgICAgICAgICAgIGlmIChwcmVzZXRJZCkge1xuICAgICAgICAgICAgICAgIHByZXZpZXcgPSBpbW11dGFibGVTZXQoXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXcsXG4gICAgICAgICAgICAgICAgICAgIFwidGltZWZyYW1lU2VsZWN0aW9uLnByb3BlcnRpZXMudGltZWZyYW1lLnNlbGVjdGVkUHJlc2V0SWRcIixcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0SWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjaGFydENvbmZpZyA9IGBjaGFydC5wcm9wZXJ0aWVzLmNvbmZpZ3VyYXRpb25gO1xuICAgICAgICAgICAgcHJldmlldyA9IGltbXV0YWJsZVNldChcbiAgICAgICAgICAgICAgICBwcmV2aWV3LFxuICAgICAgICAgICAgICAgIGAke2NoYXJ0Q29uZmlnfS5sZWdlbmRQbGFjZW1lbnRgLFxuICAgICAgICAgICAgICAgIGdldCh2YWx1ZSwgXCJsZWdlbmRQbGFjZW1lbnRcIiwgXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcmV2aWV3ID0gaW1tdXRhYmxlU2V0KFxuICAgICAgICAgICAgICAgIHByZXZpZXcsXG4gICAgICAgICAgICAgICAgYCR7Y2hhcnRDb25maWd9LmxlZnRBeGlzTGFiZWxgLFxuICAgICAgICAgICAgICAgIGdldCh2YWx1ZSwgXCJsZWZ0QXhpc0xhYmVsXCIsIFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJldmlldyA9IGltbXV0YWJsZVNldChcbiAgICAgICAgICAgICAgICBwcmV2aWV3LFxuICAgICAgICAgICAgICAgIGAke2NoYXJ0Q29uZmlnfS5wcmVzZXRgLFxuICAgICAgICAgICAgICAgIGdldCh2YWx1ZSwgXCJwcmVzZXRcIiwgXCJcIilcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlldyhwcmV2aWV3KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19