kwikui
Version:
KwikID's UI Component Library in Angular
195 lines • 24.4 kB
JavaScript
import { __decorate } from "tslib";
import { Component, EventEmitter, Input, Output } from "@angular/core";
import { isNotEmptyValue, logMethod } from "kwikid-toolkit";
import { getTimerMessage } from "./button-api-call.helper";
import * as i0 from "@angular/core";
import * as i1 from "./button-api-call.timer.service";
import * as i2 from "@taiga-ui/core";
import * as i3 from "../messages/messages.component";
import * as i4 from "@angular/common";
export class KwikUIButtonApiCallComponent {
constructor(timerService) {
this.timerService = timerService;
this.apiTimer = undefined;
this.apiStatus = "default";
this.class = "tui-space_right-3 tui-space_bottom-3";
this.disabled = false;
this.id = "";
this.label = "Button";
this.shape = null;
this.showLoader = false;
this.size = "m";
this.styles = "";
this.onClick = new EventEmitter();
this.onApiTimerStop = new EventEmitter();
this.isShowApiTimerMessage = false;
this.icon = "";
this.iconRight = "";
this.apiTimerMessages = [];
}
ngOnInit() {
this.handleApiStatus(this.apiStatus);
this.handleApiTimer(this.apiTimer);
this.timerStopSubscription = this.timerService.stopTimer$.subscribe((reset) => {
if (reset) {
this.handleStopTimer();
}
});
this.timerValueSubscription = this.timerService.timer$.subscribe((value) => {
if (isNotEmptyValue(value)) {
const message = getTimerMessage(this.apiTimer.messageWithTimerPlaceholder, this.apiTimer.timeFormat, value);
this.apiTimerMessages = [
{
message,
type: "info"
}
];
this.isShowApiTimerMessage = true;
}
});
}
ngOnChanges(changes) {
const hasKey = (object, key) => {
return object.hasOwnProperty(key);
};
const verifyChange = (key) => {
return hasKey(changes, key) && !changes[key].firstChange;
};
if (verifyChange("apiStatus")) {
this.handleApiStatus(changes.apiStatus.currentValue);
}
if (verifyChange("disabled")) {
if (this.apiStatus === "default") {
this.disabled = changes.disabled.currentValue;
}
else if (this.apiStatus === "loading") {
this.disabled = true;
}
else {
this.disabled = false;
}
}
if (verifyChange("apiTimer")) {
this.apiTimer = changes.apiTimer.currentValue;
this.handleApiTimer(this.apiTimer, true);
}
}
ngOnDestroy() {
this.handleStopTimer();
this.timerService.stopTimer();
if (this.timerStopSubscription) {
this.timerStopSubscription.unsubscribe();
}
if (this.timerValueSubscription) {
this.timerValueSubscription.unsubscribe();
}
}
handleApiStatus(apiStatus) {
switch (apiStatus) {
case "default":
this.apiStatus = "default";
this.icon = "";
this.iconRight = "";
this.disabled = this.disabled;
this.showLoader = false;
break;
case "loading":
this.apiStatus = "loading";
this.icon = "";
this.iconRight = "";
this.disabled = true;
this.showLoader = true;
break;
case "retry":
this.apiStatus = "retry";
this.icon = "tuiIconRotateCw";
this.iconRight = "";
this.disabled = !!isNotEmptyValue(this.apiTimer);
this.showLoader = false;
break;
case "success":
this.apiStatus = "success";
this.icon = "";
this.iconRight = "tuiIconCheck";
this.disabled = false;
this.showLoader = false;
break;
case "failed":
this.apiStatus = "failed";
this.icon = "";
this.iconRight = "tuiIconClose";
this.disabled = false;
this.showLoader = false;
break;
default:
break;
}
}
handleOnClick(e) {
if (this.apiStatus === "default" || this.apiStatus === "retry") {
this.onClick.emit({ event: e, key: this.id });
}
}
handleApiTimer(apiTimer, onChange = false) {
if (isNotEmptyValue(apiTimer)) {
this.disabled = true;
this.timerService.startTimer(apiTimer);
}
else if (onChange) {
this.resetApiTimer();
}
}
handleStopTimer() {
this.resetApiTimer();
this.onApiTimerStop.emit({ key: this.id });
}
resetApiTimer() {
this.apiTimerMessages = [];
this.isShowApiTimerMessage = false;
this.disabled = false;
}
}
/** @nocollapse */ KwikUIButtonApiCallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIButtonApiCallComponent, deps: [{ token: i1.KwikUIButtonApiCallTimerService }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ KwikUIButtonApiCallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: { apiTimer: "apiTimer", apiStatus: "apiStatus", class: "class", disabled: "disabled", id: "id", label: "label", shape: "shape", showLoader: "showLoader", size: "size", styles: "styles" }, outputs: { onClick: "onClick", onApiTimerStop: "onApiTimerStop" }, usesOnChanges: true, ngImport: i0, template: "<div>\n <button\n tuiButton\n [appearance]=\"'primary'\"\n [class.default]=\"apiStatus === 'default'\"\n [class.failed]=\"apiStatus === 'failed'\"\n [class.loading]=\"apiStatus === 'loading'\"\n [class.success]=\"apiStatus === 'success'\"\n [class]=\"class\"\n [disabled]=\"disabled\"\n [icon]=\"icon\"\n [iconRight]=\"iconRight\"\n [nativeId]=\"id\"\n [shape]=\"shape\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n [style]=\"styles\"\n [type]=\"'button'\"\n (click)=\"handleOnClick($event)\"\n >\n {{ label }}\n </button>\n\n <kwikui-messages\n *ngIf=\"isShowApiTimerMessage\"\n [id]=\"id\"\n [messages]=\"apiTimerMessages\"\n ></kwikui-messages>\n</div>\n", styles: [".w-100{width:100%}button{margin:0}:host .loading{pointer-events:none;cursor:not-allowed}:host .success{--tui-primary: var(--tui-support-04);--tui-primary-hover: var(--tui-support-04);--tui-primary-active: var(--tui-support-04);--tui-primary-text: #fff;pointer-events:none;cursor:not-allowed}:host .failed{--tui-primary: var(--tui-negative);--tui-primary-hover: var(--tui-negative-hover);--tui-primary-active: var(--tui-negative);--tui-primary-text: #fff;pointer-events:none;cursor:not-allowed}\n"], components: [{ type: i2.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { type: i3.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["id", "messages"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
__decorate([
logMethod
], KwikUIButtonApiCallComponent.prototype, "handleOnClick", null);
__decorate([
logMethod
], KwikUIButtonApiCallComponent.prototype, "handleApiTimer", null);
__decorate([
logMethod
], KwikUIButtonApiCallComponent.prototype, "handleStopTimer", null);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIButtonApiCallComponent, decorators: [{
type: Component,
args: [{
selector: "kwikui-button-api-call",
templateUrl: "./button-api-call.component.html",
styleUrls: ["./button-api-call.component.scss"]
}]
}], ctorParameters: function () { return [{ type: i1.KwikUIButtonApiCallTimerService }]; }, propDecorators: { apiTimer: [{
type: Input
}], apiStatus: [{
type: Input
}], class: [{
type: Input
}], disabled: [{
type: Input
}], id: [{
type: Input
}], label: [{
type: Input
}], shape: [{
type: Input
}], showLoader: [{
type: Input
}], size: [{
type: Input
}], styles: [{
type: Input
}], onClick: [{
type: Output
}], onApiTimerStop: [{
type: Output
}], handleOnClick: [], handleApiTimer: [], handleStopTimer: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWFwaS1jYWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWt1aS9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tL2J1dHRvbi1hcGktY2FsbC9idXR0b24tYXBpLWNhbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa3VpL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20vYnV0dG9uLWFwaS1jYWxsL2J1dHRvbi1hcGktY2FsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBTzNELE1BQU0sT0FBTyw0QkFBNEI7SUFzQ3ZDLFlBQW1CLFlBQTZDO1FBQTdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQztRQXJDdkQsYUFBUSxHQUE4QixTQUFTLENBQUM7UUFFaEQsY0FBUyxHQUNoQixTQUFTLENBQUM7UUFFSCxVQUFLLEdBQUcsc0NBQXNDLENBQUM7UUFFL0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixPQUFFLEdBQUcsRUFBRSxDQUFDO1FBRVIsVUFBSyxHQUFHLFFBQVEsQ0FBQztRQUVqQixVQUFLLEdBQWdDLElBQUksQ0FBQztRQUUxQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLFNBQUksR0FBa0MsR0FBRyxDQUFDO1FBRTFDLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFFWCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVsQyxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxD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Q0FBQztJQUM3QyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDOzs2SUFsTFUsNEJBQTRCO2lJQUE1Qiw0QkFBNEIsMFZDbkJ6Qyw0dEJBNkJBO0FEOElFO0lBREMsU0FBUztpRUFLVDtBQUdEO0lBREMsU0FBUztrRUFRVDtBQUdEO0lBREMsU0FBUzttRUFJVDs0RkE1S1UsNEJBQTRCO2tCQUx4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSxrQ0FBa0M7b0JBQy9DLFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO2lCQUNoRDtzSEFFVSxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsRUFBRTtzQkFBVixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTTtnQkFnSVAsYUFBYSxNQU9iLGNBQWMsTUFVZCxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgaXNOb3RFbXB0eVZhbHVlLCBsb2dNZXRob2QgfSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBLd2lrVUlCdXR0b25BcGlDYWxsVGltZXJTZXJ2aWNlIH0gZnJvbSBcIi4vYnV0dG9uLWFwaS1jYWxsLnRpbWVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRLd2lrVUlCdXR0b25BcGlDYWxsVGltZXIgfSBmcm9tIFwiLi9idXR0b24tYXBpLWNhbGwuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IGdldFRpbWVyTWVzc2FnZSB9IGZyb20gXCIuL2J1dHRvbi1hcGktY2FsbC5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWt1aS1idXR0b24tYXBpLWNhbGxcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9idXR0b24tYXBpLWNhbGwuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2J1dHRvbi1hcGktY2FsbC5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBLd2lrVUlCdXR0b25BcGlDYWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgYXBpVGltZXI6IFRLd2lrVUlCdXR0b25BcGlDYWxsVGltZXIgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgYXBpU3RhdHVzOiBcImRlZmF1bHRcIiB8IFwibG9hZGluZ1wiIHwgXCJyZXRyeVwiIHwgXCJzdWNjZXNzXCIgfCBcImZhaWxlZFwiID1cbiAgICBcImRlZmF1bHRcIjtcblxuICBASW5wdXQoKSBjbGFzcyA9IFwidHVpLXNwYWNlX3JpZ2h0LTMgdHVpLXNwYWNlX2JvdHRvbS0zXCI7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBpZCA9IFwiXCI7XG5cbiAgQElucHV0KCkgbGFiZWwgPSBcIkJ1dHRvblwiO1xuXG4gIEBJbnB1dCgpIHNoYXBlOiBudWxsIHwgXCJzcXVhcmVcIiB8IFwicm91bmRlZFwiID0gbnVsbDtcblxuICBASW5wdXQoKSBzaG93TG9hZGVyID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2l6ZTogXCJ4c1wiIHwgXCJzXCIgfCBcIm1cIiB8IFwibFwiIHwgXCJ4bFwiID0gXCJtXCI7XG5cbiAgQElucHV0KCkgc3R5bGVzID0gXCJcIjtcblxuICBAT3V0cHV0KCkgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBvbkFwaVRpbWVyU3RvcDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBpc1Nob3dBcGlUaW1lck1lc3NhZ2UgPSBmYWxzZTtcblxuICBpY29uID0gXCJcIjtcblxuICBpY29uUmlnaHQgPSBcIlwiO1xuXG4gIGFwaVRpbWVyTWVzc2FnZXM6IEFycmF5PGFueT4gPSBbXTtcblxuICBwcml2YXRlIHRpbWVyU3RvcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgdGltZXJWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0aW1lclNlcnZpY2U6IEt3aWtVSUJ1dHRvbkFwaUNhbGxUaW1lclNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVBcGlTdGF0dXModGhpcy5hcGlTdGF0dXMpO1xuICAgIHRoaXMuaGFuZGxlQXBpVGltZXIodGhpcy5hcGlUaW1lcik7XG5cbiAgICB0aGlzLnRpbWVyU3RvcFN1YnNjcmlwdGlvbiA9IHRoaXMudGltZXJTZXJ2aWNlLnN0b3BUaW1lciQuc3Vic2NyaWJlKFxuICAgICAgKHJlc2V0KSA9PiB7XG4gICAgICAgIGlmIChyZXNldCkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3RvcFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy50aW1lclZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy50aW1lclNlcnZpY2UudGltZXIkLnN1YnNjcmliZShcbiAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRUaW1lck1lc3NhZ2UoXG4gICAgICAgICAgICB0aGlzLmFwaVRpbWVyLm1lc3NhZ2VXaXRoVGltZXJQbGFjZWhvbGRlcixcbiAgICAgICAgICAgIHRoaXMuYXBpVGltZXIudGltZUZvcm1hdCxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmFwaVRpbWVyTWVzc2FnZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLmlzU2hvd0FwaVRpbWVyTWVzc2FnZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0tleSA9IChvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICB9O1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGhhc0tleShjaGFuZ2VzLCBrZXkpICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2U7XG4gICAgfTtcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpU3RhdHVzXCIpKSB7XG4gICAgICB0aGlzLmhhbmRsZUFwaVN0YXR1cyhjaGFuZ2VzLmFwaVN0YXR1cy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZGlzYWJsZWRcIikpIHtcbiAgICAgIGlmICh0aGlzLmFwaVN0YXR1cyA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGNoYW5nZXMuZGlzYWJsZWQuY3VycmVudFZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwaVN0YXR1cyA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhcGlUaW1lclwiKSkge1xuICAgICAgdGhpcy5hcGlUaW1lciA9IGNoYW5nZXMuYXBpVGltZXIuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5oYW5kbGVBcGlUaW1lcih0aGlzLmFwaVRpbWVyLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVN0b3BUaW1lcigpO1xuICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0b3BUaW1lcigpO1xuXG4gICAgaWYgKHRoaXMudGltZXJTdG9wU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyU3RvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50aW1lclZhbHVlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyVmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBcGlTdGF0dXMoYXBpU3RhdHVzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGFwaVN0YXR1cykge1xuICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgdGhpcy5hcGlTdGF0dXMgPSBcImRlZmF1bHRcIjtcbiAgICAgICAgdGhpcy5pY29uID0gXCJcIjtcbiAgICAgICAgdGhpcy5pY29uUmlnaHQgPSBcIlwiO1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxvYWRpbmdcIjpcbiAgICAgICAgdGhpcy5hcGlTdGF0dXMgPSBcImxvYWRpbmdcIjtcbiAgICAgICAgdGhpcy5pY29uID0gXCJcIjtcbiAgICAgICAgdGhpcy5pY29uUmlnaHQgPSBcIlwiO1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicmV0cnlcIjpcbiAgICAgICAgdGhpcy5hcGlTdGF0dXMgPSBcInJldHJ5XCI7XG4gICAgICAgIHRoaXMuaWNvbiA9IFwidHVpSWNvblJvdGF0ZUN3XCI7XG4gICAgICAgIHRoaXMuaWNvblJpZ2h0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9ICEhaXNOb3RFbXB0eVZhbHVlKHRoaXMuYXBpVGltZXIpO1xuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic3VjY2Vzc1wiOlxuICAgICAgICB0aGlzLmFwaVN0YXR1cyA9IFwic3VjY2Vzc1wiO1xuICAgICAgICB0aGlzLmljb24gPSBcIlwiO1xuICAgICAgICB0aGlzLmljb25SaWdodCA9IFwidHVpSWNvbkNoZWNrXCI7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgICB0aGlzLmFwaVN0YXR1cyA9IFwiZmFpbGVkXCI7XG4gICAgICAgIHRoaXMuaWNvbiA9IFwiXCI7XG4gICAgICAgIHRoaXMuaWNvblJpZ2h0ID0gXCJ0dWlJY29uQ2xvc2VcIjtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2soZTogYW55KSB7XG4gICAgaWYgKHRoaXMuYXBpU3RhdHVzID09PSBcImRlZmF1bHRcIiB8fCB0aGlzLmFwaVN0YXR1cyA9PT0gXCJyZXRyeVwiKSB7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IGV2ZW50OiBlLCBrZXk6IHRoaXMuaWQgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVBcGlUaW1lcihhcGlUaW1lciwgb25DaGFuZ2UgPSBmYWxzZSkge1xuICAgIGlmIChpc05vdEVtcHR5VmFsdWUoYXBpVGltZXIpKSB7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0YXJ0VGltZXIoYXBpVGltZXIpO1xuICAgIH0gZWxzZSBpZiAob25DaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVzZXRBcGlUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlU3RvcFRpbWVyKCkge1xuICAgIHRoaXMucmVzZXRBcGlUaW1lcigpO1xuICAgIHRoaXMub25BcGlUaW1lclN0b3AuZW1pdCh7IGtleTogdGhpcy5pZCB9KTtcbiAgfVxuXG4gIHJlc2V0QXBpVGltZXIoKSB7XG4gICAgdGhpcy5hcGlUaW1lck1lc3NhZ2VzID0gW107XG4gICAgdGhpcy5pc1Nob3dBcGlUaW1lck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxidXR0b25cbiAgICB0dWlCdXR0b25cbiAgICBbYXBwZWFyYW5jZV09XCIncHJpbWFyeSdcIlxuICAgIFtjbGFzcy5kZWZhdWx0XT1cImFwaVN0YXR1cyA9PT0gJ2RlZmF1bHQnXCJcbiAgICBbY2xhc3MuZmFpbGVkXT1cImFwaVN0YXR1cyA9PT0gJ2ZhaWxlZCdcIlxuICAgIFtjbGFzcy5sb2FkaW5nXT1cImFwaVN0YXR1cyA9PT0gJ2xvYWRpbmcnXCJcbiAgICBbY2xhc3Muc3VjY2Vzc109XCJhcGlTdGF0dXMgPT09ICdzdWNjZXNzJ1wiXG4gICAgW2NsYXNzXT1cImNsYXNzXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtpY29uXT1cImljb25cIlxuICAgIFtpY29uUmlnaHRdPVwiaWNvblJpZ2h0XCJcbiAgICBbbmF0aXZlSWRdPVwiaWRcIlxuICAgIFtzaGFwZV09XCJzaGFwZVwiXG4gICAgW3Nob3dMb2FkZXJdPVwic2hvd0xvYWRlclwiXG4gICAgW3NpemVdPVwic2l6ZVwiXG4gICAgW3N0eWxlXT1cInN0eWxlc1wiXG4gICAgW3R5cGVdPVwiJ2J1dHRvbidcIlxuICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrKCRldmVudClcIlxuICA+XG4gICAge3sgbGFiZWwgfX1cbiAgPC9idXR0b24+XG5cbiAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICpuZ0lmPVwiaXNTaG93QXBpVGltZXJNZXNzYWdlXCJcbiAgICBbaWRdPVwiaWRcIlxuICAgIFttZXNzYWdlc109XCJhcGlUaW1lck1lc3NhZ2VzXCJcbiAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuPC9kaXY+XG4iXX0=