UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

175 lines 24.2 kB
import { Directive, Injector, Input } from '@angular/core'; import { DateTime } from '@microsoft/windows-admin-center-sdk/core/base/date/date-time'; import { DateType } from '@microsoft/windows-admin-center-sdk/core/base/date/date-type'; import { Globalization } from '@microsoft/windows-admin-center-sdk/core/data/globalization'; import { SmeInternalFormFieldComponent } from '../form-field.component'; import * as i0 from "@angular/core"; // eslint-disable-next-line @angular-eslint/directive-class-suffix export class DateLikeFormFieldComponent extends SmeInternalFormFieldComponent { /** * Initializes a new instance of the @see CalendarFormFieldComponent class. * @param injector The angular injection service. required by @see SmeInjectableBase decorator in the @see BaseComponent class */ constructor(injector) { super(injector); this.now = new Date(); this.detectedDateType = DateType.Date; } /** * Gets the year of now */ get nowYear() { return this.now.getFullYear(); } /** * Gets the month of now */ get nowMonth() { return this.now.getMonth(); } /** * Gets the day of the month of now */ get nowDay() { return this.now.getDate(); } /** * Gets the Hour of now */ get nowHour() { return this.now.getHours(); } /** * Gets the minutes of now */ get nowMinute() { return this.now.getMinutes(); } /** * Angular OnChanges implementation */ ngOnChanges(changes) { super.ngOnChanges(changes); if (this.ngModel) { // ignore first change of min and max, but subsequent changes should cause validation changes const minChangedNotFirst = changes.min && !changes.min.isFirstChange(); const maxChangedNotFirst = changes.max && !changes.max.isFirstChange(); if (minChangedNotFirst || maxChangedNotFirst) { this.ngModel.control.updateValueAndValidity(); } } } /** * Occurs every time the value of the control changes, in the UI or programmatically. * @param value the value of the form control */ onValueChanged(value) { this.detectedDateType = DateType.of(value); super.onValueChanged(value); } /** * Validates the control as a date (time is not considered) */ validateAsDate(c) { const valueAsDate = DateType.convert(this.value, DateType.Date); if (this.min) { const minDate = DateType.convert(this.min, DateType.Date); if (DateTime.compareDates(valueAsDate, minDate) < 0) { const message = this.strings.MsftSmeShell.Angular.Form.Date.MinDateErrorFormat; const minString = minDate.toLocaleDateString(Globalization.localeId); return { minDate: { message: message.format(minString) } }; } } if (this.max) { const maxDate = DateType.convert(this.max, DateType.Date); if (DateTime.compareDates(valueAsDate, maxDate) > 0) { const message = this.strings.MsftSmeShell.Angular.Form.Date.MaxDateErrorFormat; const maxString = maxDate.toLocaleDateString(Globalization.localeId); return { maxDate: { message: message.format(maxString) } }; } } return null; } /** * Validates the control as a time (date is not considered) */ validateAsTime(c) { const valueAsDate = DateType.convert(this.value, DateType.Date); if (this.min) { const minDate = DateType.convert(this.min, DateType.Date); if (DateTime.compareTimes(valueAsDate, minDate) < 0) { const message = this.strings.MsftSmeShell.Angular.Form.Time.MinTimeErrorFormat; const minString = minDate.toLocaleTimeString(Globalization.localeId); return { minDate: { message: message.format(minString) } }; } } if (this.max) { const maxDate = DateType.convert(this.max, DateType.Date); if (DateTime.compareTimes(valueAsDate, maxDate) > 0) { const message = this.strings.MsftSmeShell.Angular.Form.Time.MaxTimeErrorFormat; const maxString = maxDate.toLocaleTimeString(Globalization.localeId); return { maxDate: { message: message.format(maxString) } }; } } return null; } /** * Validates the control as a datetime (date and time are both considered) */ validateAsDateTime(c) { const valueAsDate = DateType.convert(this.value, DateType.Date); if (this.min) { const minDate = DateType.convert(this.min, DateType.Date); if (DateTime.compareDateTimes(valueAsDate, minDate) < 0) { const message = this.strings.MsftSmeShell.Angular.Form.Date.MinDateErrorFormat; const minString = minDate.toLocaleString(Globalization.localeId); return { minDate: { message: message.format(minString) } }; } } if (this.max) { const maxDate = DateType.convert(this.max, DateType.Date); if (DateTime.compareDateTimes(valueAsDate, maxDate) > 0) { const message = this.strings.MsftSmeShell.Angular.Form.Date.MaxDateErrorFormat; const maxString = maxDate.toLocaleString(Globalization.localeId); return { maxDate: { message: message.format(maxString) } }; } } return null; } } /** @nocollapse */ DateLikeFormFieldComponent.ɵfac = function DateLikeFormFieldComponent_Factory(t) { return new (t || DateLikeFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ DateLikeFormFieldComponent.ɵdir = /** @pureOrBreakMyCode */ i0.ɵɵdefineDirective({ type: DateLikeFormFieldComponent, inputs: { dateType: "dateType", max: "max", min: "min" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DateLikeFormFieldComponent, [{ type: Directive }], function () { return [{ type: i0.Injector }]; }, { dateType: [{ type: Input }], max: [{ type: Input }], min: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1saWtlLWZvcm0tZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL2RhdGUtbGlrZS9kYXRlLWxpa2UtZm9ybS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUdyRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDeEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUU1RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHeEUsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBZ0IsMEJBQTJCLFNBQVEsNkJBQXVDO0lBa0U1Rjs7O09BR0c7SUFDSCxZQUFZLFFBQWtCO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQWhERDs7T0FFRztJQUNILElBQWMsT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYyxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFjLE1BQU07UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8s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WUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUMvRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakUsT0FBTztvQkFDSCxPQUFPLEVBQUU7d0JBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO3FCQUNyQztpQkFDSixDQUFDO2FBQ0w7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7O3VIQWxNaUIsMEJBQTBCOzRHQUExQiwwQkFBMEI7dUZBQTFCLDBCQUEwQjtjQUYvQyxTQUFTOzJEQVNDLFFBQVE7a0JBRGQsS0FBSztZQU9DLEdBQUc7a0JBRFQsS0FBSztZQU9DLEdBQUc7a0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVMaWtlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RhdGUvZGF0ZS1saWtlJztcclxuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGF0ZS9kYXRlLXRpbWUnO1xyXG5pbXBvcnQgeyBEYXRlVHlwZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9kYXRlL2RhdGUtdHlwZSc7XHJcbmltcG9ydCB7IEdsb2JhbGl6YXRpb24gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RhdGEvZ2xvYmFsaXphdGlvbic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGVMaWtlRm9ybUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQ8RGF0ZUxpa2U+IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZXhwZWN0ZWQgb3V0cHV0IHR5cGUgb2YgdGhlIGRhdGUgbGlrZSB2YWx1ZS5cclxuICAgICAqIGlmIG5vdCBwcm92aWRlZCwgdGhpcyBjb250cm9sIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGRhdGUgdHlwZSB3aGVuICd2YWx1ZScgaXMgc2V0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGF0ZVR5cGU6IERhdGVUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoZSBtYXhpbXVtIGRhdGUgdmFsdWUgYWxsb3dlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heDogRGF0ZUxpa2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIG1pbmltdW0gZGF0ZSB2YWx1ZSBhbGxvd2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWluOiBEYXRlTGlrZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdywgYXMgYSBkYXRlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbm93OiBEYXRlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgeWVhciBvZiBub3dcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBub3dZZWFyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm93LmdldEZ1bGxZZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBtb250aCBvZiBub3dcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBub3dNb250aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdy5nZXRNb250aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGF5IG9mIHRoZSBtb250aCBvZiBub3dcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBub3dEYXkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub3cuZ2V0RGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgSG91ciBvZiBub3dcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBub3dIb3VyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm93LmdldEhvdXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBtaW51dGVzIG9mIG5vd1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IG5vd01pbnV0ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdy5nZXRNaW51dGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYXV0by1kZXRlY3RlZCB0eXBlIG9mIHRoaXMgZmllbGRzIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZGV0ZWN0ZWREYXRlVHlwZTogRGF0ZVR5cGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQHNlZSBDYWxlbmRhckZvcm1GaWVsZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBpbmplY3RvciBUaGUgYW5ndWxhciBpbmplY3Rpb24gc2VydmljZS4gcmVxdWlyZWQgYnkgQHNlZSBTbWVJbmplY3RhYmxlQmFzZSBkZWNvcmF0b3IgaW4gdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBjbGFzc1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5ub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0ZWREYXRlVHlwZSA9IERhdGVUeXBlLkRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmd1bGFyIE9uQ2hhbmdlcyBpbXBsZW1lbnRhdGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLm5nTW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGZpcnN0IGNoYW5nZSBvZiBtaW4gYW5kIG1heCwgYnV0IHN1YnNlcXVlbnQgY2hhbmdlcyBzaG91bGQgY2F1c2UgdmFsaWRhdGlvbiBjaGFuZ2VzXHJcbiAgICAgICAgICAgIGNvbnN0IG1pbkNoYW5nZWROb3RGaXJzdCA9IGNoYW5nZXMubWluICYmICFjaGFuZ2VzLm1pbi5pc0ZpcnN0Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heENoYW5nZWROb3RGaXJzdCA9IGNoYW5nZXMubWF4ICYmICFjaGFuZ2VzLm1heC5pc0ZpcnN0Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIGlmIChtaW5DaGFuZ2VkTm90Rmlyc3QgfHwgbWF4Q2hhbmdlZE5vdEZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nTW9kZWwuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgZXZlcnkgdGltZSB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgY2hhbmdlcywgaW4gdGhlIFVJIG9yIHByb2dyYW1tYXRpY2FsbHkuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKHZhbHVlOiBEYXRlTGlrZSkge1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0ZWREYXRlVHlwZSA9IERhdGVUeXBlLm9mKHZhbHVlKTtcclxuICAgICAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRyb2wgYXMgYSBkYXRlICh0aW1lIGlzIG5vdCBjb25zaWRlcmVkKVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVBc0RhdGUoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uQWxlcnRzIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVBc0RhdGUgPSBEYXRlVHlwZS5jb252ZXJ0KHRoaXMudmFsdWUsIERhdGVUeXBlLkRhdGUpO1xyXG4gICAgICAgIGlmICh0aGlzLm1pbikge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5EYXRlID0gRGF0ZVR5cGUuY29udmVydCh0aGlzLm1pbiwgRGF0ZVR5cGUuRGF0ZSk7XHJcbiAgICAgICAgICAgIGlmIChEYXRlVGltZS5jb21wYXJlRGF0ZXModmFsdWVBc0RhdGUsIG1pbkRhdGUpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGUuTWluRGF0ZUVycm9yRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWluU3RyaW5nID0gbWluRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoR2xvYmFsaXphdGlvbi5sb2NhbGVJZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbkRhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZS5mb3JtYXQobWluU3RyaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heERhdGUgPSBEYXRlVHlwZS5jb252ZXJ0KHRoaXMubWF4LCBEYXRlVHlwZS5EYXRlKTtcclxuICAgICAgICAgICAgaWYgKERhdGVUaW1lLmNvbXBhcmVEYXRlcyh2YWx1ZUFzRGF0ZSwgbWF4RGF0ZSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRGF0ZS5NYXhEYXRlRXJyb3JGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTdHJpbmcgPSBtYXhEYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhHbG9iYWxpemF0aW9uLmxvY2FsZUlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4RGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLmZvcm1hdChtYXhTdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRlcyB0aGUgY29udHJvbCBhcyBhIHRpbWUgKGRhdGUgaXMgbm90IGNvbnNpZGVyZWQpXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0ZUFzVGltZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMgfCBudWxsIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUFzRGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodGhpcy52YWx1ZSwgRGF0ZVR5cGUuRGF0ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubWluKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBEYXRlVHlwZS5jb252ZXJ0KHRoaXMubWluLCBEYXRlVHlwZS5EYXRlKTtcclxuICAgICAgICAgICAgaWYgKERhdGVUaW1lLmNvbXBhcmVUaW1lcyh2YWx1ZUFzRGF0ZSwgbWluRGF0ZSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uVGltZS5NaW5UaW1lRXJyb3JGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5TdHJpbmcgPSBtaW5EYXRlLnRvTG9jYWxlVGltZVN0cmluZyhHbG9iYWxpemF0aW9uLmxvY2FsZUlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluRGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLmZvcm1hdChtaW5TdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF4RGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodGhpcy5tYXgsIERhdGVUeXBlLkRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoRGF0ZVRpbWUuY29tcGFyZVRpbWVzKHZhbHVlQXNEYXRlLCBtYXhEYXRlKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuRm9ybS5UaW1lLk1heFRpbWVFcnJvckZvcm1hdDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1heFN0cmluZyA9IG1heERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKEdsb2JhbGl6YXRpb24ubG9jYWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXhEYXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UuZm9ybWF0KG1heFN0cmluZylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGVzIHRoZSBjb250cm9sIGFzIGEgZGF0ZXRpbWUgKGRhdGUgYW5kIHRpbWUgYXJlIGJvdGggY29uc2lkZXJlZClcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlQXNEYXRlVGltZShjOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25BbGVydHMgfCBudWxsIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUFzRGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodGhpcy52YWx1ZSwgRGF0ZVR5cGUuRGF0ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubWluKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBEYXRlVHlwZS5jb252ZXJ0KHRoaXMubWluLCBEYXRlVHlwZS5EYXRlKTtcclxuICAgICAgICAgICAgaWYgKERhdGVUaW1lLmNvbXBhcmVEYXRlVGltZXModmFsdWVBc0RhdGUsIG1pbkRhdGUpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Gb3JtLkRhdGUuTWluRGF0ZUVycm9yRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWluU3RyaW5nID0gbWluRGF0ZS50b0xvY2FsZVN0cmluZyhHbG9iYWxpemF0aW9uLmxvY2FsZUlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluRGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLmZvcm1hdChtaW5TdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF4RGF0ZSA9IERhdGVUeXBlLmNvbnZlcnQodGhpcy5tYXgsIERhdGVUeXBlLkRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoRGF0ZVRpbWUuY29tcGFyZURhdGVUaW1lcyh2YWx1ZUFzRGF0ZSwgbWF4RGF0ZSkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkZvcm0uRGF0ZS5NYXhEYXRlRXJyb3JGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhTdHJpbmcgPSBtYXhEYXRlLnRvTG9jYWxlU3RyaW5nKEdsb2JhbGl6YXRpb24ubG9jYWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXhEYXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UuZm9ybWF0KG1heFN0cmluZylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==