UNPKG

@kre-form/ant

Version:

276 lines 29.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, forwardRef, Input } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import * as differenceInCalendarDays_ from "date-fns/difference_in_calendar_days"; import * as moment_ from "moment"; /** @type {?} */ const moment = moment_; /** @type {?} */ const differenceInCalendarDays = differenceInCalendarDays_; /** @type {?} */ const FORM_POSITION_PICKER_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => DatetimeComponent)), multi: true, }; export class DatetimeComponent { constructor() { this._value = ""; this._index = 0; this.disabled = false; this.type = "datetime"; this.maxDate = ""; this.minDate = ""; this._onTouched = (/** * @return {?} */ () => { }); this._valueChange = (/** * @return {?} */ () => { }); this.disabledDate = (/** * @param {?} current * @return {?} */ (current) => { if (!!this.maxDate && !!this.minDate) { return (differenceInCalendarDays(current, new Date(this.maxDate)) > 0 || differenceInCalendarDays(current, new Date((/** @type {?} */ (this.minDate)))) < 0); } else if (!!this.maxDate && !this.minDate) { return differenceInCalendarDays(current, new Date(this.maxDate)) > 0; } else if (!this.maxDate && !!this.minDate) { return differenceInCalendarDays(current, new Date(this.minDate)) < 0; } else { return false; } }); this.disabledDateTime = (/** * @param {?} e * @return {?} */ (e) => { /** @type {?} */ let nzDisabledHours = []; /** @type {?} */ let nzDisabledMinutes = []; if (!!this.maxDate && !!this.minDate) { if (differenceInCalendarDays(e, new Date(this.minDate)) === 0) { nzDisabledHours = this.range(-1, new Date(this.minDate).getHours()); if (!!e && new Date(this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(-1, new Date(this.minDate).getMinutes()); } } if (differenceInCalendarDays(e, new Date(this.maxDate)) === 0) { nzDisabledHours = [ ...nzDisabledHours, ...this.range(new Date(this.maxDate).getHours() + 1, 24), ]; if (!!e && new Date(this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = [ ...nzDisabledMinutes, ...this.range(new Date(this.maxDate).getMinutes(), 60), ]; } } } else if (!!this.maxDate && !this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(this.maxDate)) === 0) { nzDisabledHours = this.range(new Date(this.maxDate).getHours() + 1, 24); if (!!e && new Date(this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(new Date(this.maxDate).getMinutes(), 60); } } } else if (!this.maxDate && !!this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(this.minDate)) === 0) { nzDisabledHours = this.range(0, new Date(this.minDate).getHours()); if (!!e && new Date(this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(-1, new Date(this.minDate).getMinutes()); } } } return { nzDisabledHours: (/** * @return {?} */ () => nzDisabledHours), nzDisabledMinutes: (/** * @return {?} */ () => nzDisabledMinutes), nzDisabledSeconds: (/** * @return {?} */ () => []), }; }); this.disabledHours = (/** * @return {?} */ () => { /** @type {?} */ let nzDisabledHours = []; if (!!this.maxDate && !!this.minDate) { nzDisabledHours = this.range(-1, new Date(this.minDate).getHours()); nzDisabledHours = nzDisabledHours.concat(this.range(new Date(this.maxDate).getHours() + 1, 24)); } else if (!!this.maxDate && !this.minDate) { nzDisabledHours = this.range(new Date(this.maxDate).getHours() + 1, 24); } else if (!this.maxDate && !!this.minDate) { nzDisabledHours = this.range(0, new Date(this.minDate).getHours()); } return nzDisabledHours; }); this.disabledMinutes = (/** * @param {?} e * @return {?} */ (e) => { /** @type {?} */ let nzDisabledMinutes = []; if (!!this.maxDate && !!this.minDate) { if (differenceInCalendarDays(e, new Date(this.minDate)) === 0) { if (!!e && new Date(this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(-1, new Date(this.minDate).getMinutes()); } } if (differenceInCalendarDays(e, new Date(this.maxDate)) === 0) { if (!!e && new Date(this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(new Date(this.maxDate).getMinutes(), 60); } } } else if (!!this.maxDate && !this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(this.maxDate)) === 0) { if (!!e && new Date(this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(new Date(this.maxDate).getMinutes(), 60); } } } else if (!this.maxDate && !!this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(this.minDate)) === 0) { if (!!e && new Date(this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = this.range(-1, new Date(this.minDate).getMinutes()); } } } return nzDisabledMinutes; }); } /** * @param {?} value * @return {?} */ writeValue(value) { this._value = value; } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this._valueChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this._onTouched = fn; } /** * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { this.disabled = isDisabled; } /** * @param {?} color * @return {?} */ select(color) { if (this.disabled) { return; } this._value = color; this._valueChange(color); } /** * @return {?} */ ngOnInit() { } // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } /** * @param {?} start * @param {?} end * @return {?} */ range(start, end) { /** @type {?} */ const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; } } DatetimeComponent.decorators = [ { type: Component, args: [{ selector: "demo-datetime", template: "<ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'date'\">\n <nz-date-picker\n nzFormat=\"yyyy/MM/dd\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <nz-year-picker\n nzFormat=\"yyyy\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-year-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'month'\">\n <nz-month-picker\n nzFormat=\"yyyy/MM\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'time'\">\n <nz-time-picker\n nzFormat=\"HH:mm\"\n [(ngModel)]=\"_value\"\n nzClearText=\"\"\n [nzDisabledHours]=\"disabledHours\"\n [nzDisabledMinutes]=\"disabledMinutes\"\n ></nz-time-picker>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <nz-date-picker\n nzShowTime\n [nzShowTime]=\"{ nzFormat: 'HH:mm' }\"\n nzFormat=\"yyyy/MM/dd HH:mm\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n [nzDisabledTime]=\"disabledDateTime\"\n ></nz-date-picker>\n </ng-container>\n</ng-container>\n", providers: [FORM_POSITION_PICKER_VALUE_ACCESSOR], styles: [""] }] } ]; /** @nocollapse */ DatetimeComponent.ctorParameters = () => []; DatetimeComponent.propDecorators = { type: [{ type: Input }], maxDate: [{ type: Input }], minDate: [{ type: Input }] }; if (false) { /** @type {?} */ DatetimeComponent.prototype._value; /** @type {?} */ DatetimeComponent.prototype._index; /** @type {?} */ DatetimeComponent.prototype.disabled; /** @type {?} */ DatetimeComponent.prototype.type; /** @type {?} */ DatetimeComponent.prototype.maxDate; /** @type {?} */ DatetimeComponent.prototype.minDate; /** @type {?} */ DatetimeComponent.prototype._onTouched; /** @type {?} */ DatetimeComponent.prototype._valueChange; /** @type {?} */ DatetimeComponent.prototype.disabledDate; /** @type {?} */ DatetimeComponent.prototype.disabledDateTime; /** @type {?} */ DatetimeComponent.prototype.disabledHours; /** @type {?} */ DatetimeComponent.prototype.disabledMinutes; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9kZXNpZ24vZXZlbnQvZGF0ZXRpbWUvZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyx5QkFBeUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUVsRixPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7TUFDNUIsTUFBTSxHQUFHLE9BQU87O01BQ2hCLHdCQUF3QixHQUFHLHlCQUF5Qjs7TUFFcEQsbUNBQW1DLEdBQVE7SUFDL0MsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDWjtBQU9ELE1BQU0sT0FBTyxpQkFBaUI7SUFTNUI7UUFSQSxXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFFbkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNqQixTQUFJLEdBQVcsVUFBVSxDQUFDO1FBQzFCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQU85QixlQUFVOzs7UUFBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUM7UUFDM0IsaUJBQVk7OztRQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBQztRQW1CN0IsaUJBQVk7Ozs7UUFBRyxDQUFDLE9BQWEsRUFBVyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVB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LG1DQUFtQjs7SUFFbkIscUNBQTBCOztJQUMxQixpQ0FBbUM7O0lBQ25DLG9DQUE4Qjs7SUFDOUIsb0NBQThCOztJQU85Qix1Q0FBMkI7O0lBQzNCLHlDQUE2Qjs7SUFtQjdCLHlDQWFFOztJQUVGLDZDQXNERTs7SUFFRiwwQ0FjRTs7SUFFRiw0Q0F3Q0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgKiBhcyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfIGZyb20gXCJkYXRlLWZucy9kaWZmZXJlbmNlX2luX2NhbGVuZGFyX2RheXNcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgS3JlRm9ybUNvbW1vblNlcnZpY2UgfSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSBcIm1vbWVudFwiO1xuY29uc3QgbW9tZW50ID0gbW9tZW50XztcbmNvbnN0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c187XG5cbmNvbnN0IEZPUk1fUE9TSVRJT05fUElDS0VSX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZUNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkZW1vLWRhdGV0aW1lXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RhdGV0aW1lLmNvbXBvbmVudC5zY3NzXCJdLFxuICBwcm92aWRlcnM6IFtGT1JNX1BPU0lUSU9OX1BJQ0tFUl9WQUxVRV9BQ0NFU1NPUl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIF92YWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgX2luZGV4OiBudW1iZXIgPSAwO1xuXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IFwiZGF0ZXRpbWVcIjtcbiAgQElucHV0KCkgbWF4RGF0ZTogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgbWluRGF0ZTogc3RyaW5nID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBfb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcbiAgX3ZhbHVlQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5fdmFsdWVDaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbiAgc2VsZWN0KGNvbG9yOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IGNvbG9yO1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlKGNvbG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge31cbiAgZGlzYWJsZWREYXRlID0gKGN1cnJlbnQ6IERhdGUpOiBib29sZWFuID0+IHtcbiAgICBpZiAoISF0aGlzLm1heERhdGUgJiYgISF0aGlzLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhjdXJyZW50LCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA+IDAgfHxcbiAgICAgICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSEpKSA8IDBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhdGhpcy5taW5EYXRlKSB7XG4gICAgICByZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkpID4gMDtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm1heERhdGUgJiYgISF0aGlzLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoY3VycmVudCwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGRpc2FibGVkRGF0ZVRpbWUgPSAoZTogRGF0ZSkgPT4ge1xuICAgIGxldCBuekRpc2FibGVkSG91cnM6IG51bWJlcltdID0gW107XG4gICAgbGV0IG56RGlzYWJsZWRNaW51dGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKCEhdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpID09PSAwKSB7XG4gICAgICAgIG56RGlzYWJsZWRIb3VycyA9IHRoaXMucmFuZ2UoLTEsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG5cbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0TWludXRlcygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSBbXG4gICAgICAgICAgLi4ubnpEaXNhYmxlZEhvdXJzLFxuICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpICsgMSwgMjQpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSBbXG4gICAgICAgICAgICAuLi5uekRpc2FibGVkTWludXRlcyxcbiAgICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRNaW51dGVzKCksIDYwKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoISFlICYmIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkuZ2V0SG91cnMoKSArIDEsIDI0KTtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgwLCBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkpO1xuICAgICAgICBpZiAoISFlICYmIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSAtIGUuZ2V0SG91cnMoKSA9PT0gMCkge1xuICAgICAgICAgIG56RGlzYWJsZWRNaW51dGVzID0gdGhpcy5yYW5nZShcbiAgICAgICAgICAgIC0xLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRNaW51dGVzKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuekRpc2FibGVkSG91cnM6ICgpID0+IG56RGlzYWJsZWRIb3VycyxcbiAgICAgIG56RGlzYWJsZWRNaW51dGVzOiAoKSA9PiBuekRpc2FibGVkTWludXRlcyxcbiAgICAgIG56RGlzYWJsZWRTZWNvbmRzOiAoKSA9PiBbXSxcbiAgICB9O1xuICB9O1xuXG4gIGRpc2FibGVkSG91cnMgPSAoKSA9PiB7XG4gICAgbGV0IG56RGlzYWJsZWRIb3VyczogbnVtYmVyW10gPSBbXTtcblxuICAgIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgtMSwgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRIb3VycygpKTtcbiAgICAgIG56RGlzYWJsZWRIb3VycyA9IG56RGlzYWJsZWRIb3Vycy5jb25jYXQoXG4gICAgICAgIHRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpICsgMSwgMjQpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoISF0aGlzLm1heERhdGUgJiYgIXRoaXMubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZShuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgKyAxLCAyNCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKDAsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG4gICAgfVxuICAgIHJldHVybiBuekRpc2FibGVkSG91cnM7XG4gIH07XG5cbiAgZGlzYWJsZWRNaW51dGVzID0gKGU6IERhdGUpID0+IHtcbiAgICBsZXQgbnpEaXNhYmxlZE1pbnV0ZXM6IG51bWJlcltdID0gW107XG4gICAgaWYgKCEhdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpID09PSAwKSB7XG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5tYXhEYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoISF0aGlzLm1heERhdGUgJiYgIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5tYXhEYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0TWludXRlcygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuekRpc2FibGVkTWludXRlcztcbiAgfTtcbiAgLy8gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGU6IERhdGUgfCBudWxsLCBkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgLy8gICBpZiAoISFlKSB7XG4gIC8vICAgICByZXR1cm4gZS5nZXREYXRlKCkgLSBkYXRlLmdldERhdGUoKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIDA7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19