tuain-ng-forms-lib
Version:
Componentes y Clases Angular para la gestión de formularios TUAIN
126 lines • 20.3 kB
JavaScript
export class FormPiece {
_formState = '';
_visibleForced;
_isForced;
_absoluteVisible = true;
_absoluteDisabled = false;
_widget = null;
visibleStates = [];
enabledStates = [];
_form = null;
_formConfig;
_visible = true;
_disabled = false;
customAttributes = {};
constructor(pieceDefinition, formConfig) {
this._formConfig = formConfig;
this._isForced = false;
this._visibleForced = false;
this.setVisibleStates(pieceDefinition.visibleStates);
this.setEnabledStates(pieceDefinition.enabledStates);
this.enabled = !pieceDefinition?.disabled ?? false;
this.setVisibility(pieceDefinition?.visible ?? true);
this.customAttributes = pieceDefinition?.customAttributes ?? {};
if (pieceDefinition?.customAttributes) {
Object.keys(pieceDefinition?.customAttributes)
?.forEach(attr => this.customAttributes[attr] = pieceDefinition?.customAttributes[attr]);
}
}
getCustomAttribute(name) { return this.customAttributes?.[name] ?? null; }
setCustomAttribute(name, value) { if (name) {
this.customAttributes[name] = value;
} }
setCustomAttributes(attributes) {
Object.entries(attributes).forEach(([name, value]) => {
this.setCustomAttribute(name, value);
});
return this;
}
matchAttribute(name, value) { return this.customAttributes?.[name] === value; }
setVisibleStates(newStates) {
const visibleStates = (!Array.isArray(newStates) && typeof newStates === 'string')
? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)
: newStates;
this.visibleStates = (Array.isArray(visibleStates)) ? [...(new Set(visibleStates))] : [];
}
addVisibleState(state) {
if (!this.visibleStates.includes(state)) {
this.visibleStates.push(state);
}
}
removeVisibleState(state) {
const existStateIdx = this.visibleStates.findIndex(st => st === state);
if (existStateIdx >= 0) {
this.visibleStates.splice(existStateIdx, 1);
}
}
setEnabledStates(newStates) {
const enabledStates = (!Array.isArray(newStates) && typeof newStates === 'string')
? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)
: newStates;
this.enabledStates = (Array.isArray(enabledStates)) ? [...(new Set(enabledStates))] : [];
}
addEnabledState(state) {
if (!this.enabledStates.includes(state)) {
this.enabledStates.push(state);
}
}
removeEnabledState(state) {
const existStateIdx = this.enabledStates.findIndex(st => st === state);
if (existStateIdx >= 0) {
this.enabledStates.splice(existStateIdx, 1);
}
}
viewOnState(state) { return (this.visibleStates && state) ? this.visibleStates.includes(state) : false; }
enabledOnState(state) { return (this.enabledStates && state) ? this.enabledStates.includes(state) : false; }
get absoluteVisible() { return this._absoluteVisible; }
get absoluteDisabled() { return this._absoluteDisabled; }
get visible() { return this._visible; }
set visible(visible) { this.setVisibility(visible); }
visibleOn(state) {
return this._absoluteVisible && this.viewOnState(state);
}
enabledOn(state) {
return !this._absoluteDisabled && this.enabledOnState(state);
}
setVisibility(visible, forced = null) {
this._absoluteVisible = !!visible;
if (forced !== null) {
this._isForced = forced;
this._visibleForced = visible;
}
this._visible = this._absoluteVisible && this.viewOnState(this._formState);
}
show(forced = null) {
this.setVisibility(true, forced);
}
hide(forced = null) {
this.setVisibility(false, forced);
}
get enabled() { return !this._disabled; }
set enabled(enabled) {
this._absoluteDisabled = !enabled;
this._disabled = this._absoluteDisabled || !this.enabledOnState(this._formState);
}
get editable() { return !this._disabled; }
get disabled() { return this._disabled; }
set disabled(disabled) { this.enabled = !disabled; }
enable() { this.enabled = true; }
disable() { this.enabled = false; }
formStateChangeCustomSubscribe(form, formChangeSubject) { }
formStateChange(state) {
if (state) {
this._formState = state;
this._visible = this._absoluteVisible && this.viewOnState(state);
this._disabled = this._absoluteDisabled || !this.enabledOnState(state);
}
}
connectWithParentForm(form, formChangeSubject) {
this._form = form;
this.formStateChangeCustomSubscribe(form, formChangeSubject);
formChangeSubject.subscribe(event => this.formStateChange(event?.state));
}
set widget(widget) { this._widget = widget; }
get widget() { return this._widget; }
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL3BpZWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxTQUFTO0lBQ1YsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixjQUFjLENBQVU7SUFDeEIsU0FBUyxDQUFVO0lBQ25CLGdCQUFnQixHQUFZLElBQUksQ0FBQztJQUNqQyxpQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFDbkMsT0FBTyxHQUFRLElBQUksQ0FBQztJQUVwQixhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQzdCLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFFaEMsS0FBSyxHQUFRLElBQUksQ0FBQztJQUNsQixXQUFXLENBQU07SUFDakIsUUFBUSxHQUFZLElBQUksQ0FBQztJQUN6QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUVsQyxZQUFZLGVBQW9CLEVBQUUsVUFBZTtRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLGVBQWUsRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxFQUFFLGdCQUFn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LENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQUksRUFBRSxpQkFBaUI7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0MsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztDQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBGb3JtUGllY2Uge1xuICBwcm90ZWN0ZWQgX2Zvcm1TdGF0ZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCBfdmlzaWJsZUZvcmNlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9pc0ZvcmNlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9hYnNvbHV0ZVZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcm90ZWN0ZWQgX2Fic29sdXRlRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF93aWRnZXQ6IGFueSA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIHZpc2libGVTdGF0ZXM6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBlbmFibGVkU3RhdGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHB1YmxpYyBfZm9ybTogYW55ID0gbnVsbDtcbiAgcHVibGljIF9mb3JtQ29uZmlnOiBhbnk7XG4gIHB1YmxpYyBfdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGN1c3RvbUF0dHJpYnV0ZXM6IGFueSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBpZWNlRGVmaW5pdGlvbjogYW55LCBmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLl9mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgICB0aGlzLl9pc0ZvcmNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3Zpc2libGVGb3JjZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNldFZpc2libGVTdGF0ZXMocGllY2VEZWZpbml0aW9uLnZpc2libGVTdGF0ZXMpO1xuICAgIHRoaXMuc2V0RW5hYmxlZFN0YXRlcyhwaWVjZURlZmluaXRpb24uZW5hYmxlZFN0YXRlcyk7XG5cbiAgICB0aGlzLmVuYWJsZWQgPSAhcGllY2VEZWZpbml0aW9uPy5kaXNhYmxlZCA/PyBmYWxzZTtcbiAgICB0aGlzLnNldFZpc2liaWxpdHkocGllY2VEZWZpbml0aW9uPy52aXNpYmxlID8/IHRydWUpO1xuICAgIHRoaXMuY3VzdG9tQXR0cmlidXRlcyA9IHBpZWNlRGVmaW5pdGlvbj8uY3VzdG9tQXR0cmlidXRlcyA/PyB7fTtcbiAgICBpZiAocGllY2VEZWZpbml0aW9uPy5jdXN0b21BdHRyaWJ1dGVzKSB7XG4gICAgICBPYmplY3Qua2V5cyhwaWVjZURlZmluaXRpb24/LmN1c3RvbUF0dHJpYnV0ZXMpXG4gICAgICAgID8uZm9yRWFjaChhdHRyID0+IHRoaXMuY3VzdG9tQXR0cmlidXRlc1thdHRyXSA9IHBpZWNlRGVmaW5pdGlvbj8uY3VzdG9tQXR0cmlidXRlc1thdHRyXSlcbiAgICB9XG4gIH1cblxuICBnZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHRoaXMuY3VzdG9tQXR0cmlidXRlcz8uW25hbWVdID8/IG51bGw7IH1cbiAgc2V0Q3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQgeyBpZiAobmFtZSkgeyB0aGlzLmN1c3RvbUF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTsgfSB9XG5cbiAgc2V0Q3VzdG9tQXR0cmlidXRlcyhhdHRyaWJ1dGVzOiBhbnkpOiBGb3JtUGllY2Uge1xuICAgIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG1hdGNoQXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jdXN0b21BdHRyaWJ1dGVzPy5bbmFtZV0gPT09IHZhbHVlOyB9XG5cbiAgc2V0VmlzaWJsZVN0YXRlcyhuZXdTdGF0ZXM6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGVTdGF0ZXMgPSAoIUFycmF5LmlzQXJyYXkobmV3U3RhdGVzKSAmJiB0eXBlb2YgbmV3U3RhdGVzID09PSAnc3RyaW5nJylcbiAgICAgID8gbmV3U3RhdGVzLnNwbGl0KCcsJykubWFwKHN0YXRlID0+IHN0YXRlLnRyaW0oKSkuZmlsdGVyKHN0YXRlID0+IHN0YXRlLmxlbmd0aCA+IDApXG4gICAgICA6IG5ld1N0YXRlcztcbiAgICB0aGlzLnZpc2libGVTdGF0ZXMgPSAoQXJyYXkuaXNBcnJheSh2aXNpYmxlU3RhdGVzKSkgPyBbLi4uKG5ldyBTZXQodmlzaWJsZVN0YXRlcykpXSA6IFtdO1xuICB9XG5cbiAgYWRkVmlzaWJsZVN0YXRlKHN0YXRlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZVN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkpIHtcbiAgICAgIHRoaXMudmlzaWJsZVN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVWaXNpYmxlU3RhdGUoc3RhdGU6IHN0cmluZykge1xuICAgIGNvbnN0IGV4aXN0U3RhdGVJZHggPSB0aGlzLnZpc2libGVTdGF0ZXMuZmluZEluZGV4KHN0ID0+IHN0ID09PSBzdGF0ZSk7XG4gICAgaWYgKGV4aXN0U3RhdGVJZHggPj0gMCkge1xuICAgICAgdGhpcy52aXNpYmxlU3RhdGVzLnNwbGljZShleGlzdFN0YXRlSWR4LCAxKTtcbiAgICB9XG4gIH1cblxuICBzZXRFbmFibGVkU3RhdGVzKG5ld1N0YXRlczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZW5hYmxlZFN0YXRlcyA9ICghQXJyYXkuaXNBcnJheShuZXdTdGF0ZXMpICYmIHR5cGVvZiBuZXdTdGF0ZXMgPT09ICdzdHJpbmcnKVxuICAgICAgPyBuZXdTdGF0ZXMuc3BsaXQoJywnKS5tYXAoc3RhdGUgPT4gc3RhdGUudHJpbSgpKS5maWx0ZXIoc3RhdGUgPT4gc3RhdGUubGVuZ3RoID4gMClcbiAgICAgIDogbmV3U3RhdGVzO1xuICAgIHRoaXMuZW5hYmxlZFN0YXRlcyA9IChBcnJheS5pc0FycmF5KGVuYWJsZWRTdGF0ZXMpKSA/IFsuLi4obmV3IFNldChlbmFibGVkU3RhdGVzKSldIDogW107XG4gIH1cblxuICBhZGRFbmFibGVkU3RhdGUoc3RhdGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5lbmFibGVkU3RhdGVzLmluY2x1ZGVzKHN0YXRlKSkge1xuICAgICAgdGhpcy5lbmFibGVkU3RhdGVzLnB1c2goc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUVuYWJsZWRTdGF0ZShzdGF0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZXhpc3RTdGF0ZUlkeCA9IHRoaXMuZW5hYmxlZFN0YXRlcy5maW5kSW5kZXgoc3QgPT4gc3QgPT09IHN0YXRlKTtcbiAgICBpZiAoZXhpc3RTdGF0ZUlkeCA+PSAwKSB7XG4gICAgICB0aGlzLmVuYWJsZWRTdGF0ZXMuc3BsaWNlKGV4aXN0U3RhdGVJZHgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHZpZXdPblN0YXRlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuICh0aGlzLnZpc2libGVTdGF0ZXMgJiYgc3RhdGUpID8gdGhpcy52aXNpYmxlU3RhdGVzLmluY2x1ZGVzKHN0YXRlKSA6IGZhbHNlOyB9XG4gIGVuYWJsZWRPblN0YXRlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuICh0aGlzLmVuYWJsZWRTdGF0ZXMgJiYgc3RhdGUpID8gdGhpcy5lbmFibGVkU3RhdGVzLmluY2x1ZGVzKHN0YXRlKSA6IGZhbHNlOyB9XG5cbiAgZ2V0IGFic29sdXRlVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Fic29sdXRlVmlzaWJsZTsgfVxuICBnZXQgYWJzb2x1dGVEaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Fic29sdXRlRGlzYWJsZWQ7IH1cblxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Zpc2libGU7IH1cbiAgc2V0IHZpc2libGUodmlzaWJsZTogYm9vbGVhbikgeyB0aGlzLnNldFZpc2liaWxpdHkodmlzaWJsZSk7IH1cblxuICB2aXNpYmxlT24oc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVZpc2libGUgJiYgdGhpcy52aWV3T25TdGF0ZShzdGF0ZSk7XG4gIH1cblxuICBlbmFibGVkT24oc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fYWJzb2x1dGVEaXNhYmxlZCAmJiB0aGlzLmVuYWJsZWRPblN0YXRlKHN0YXRlKTtcbiAgfVxuXG4gIHNldFZpc2liaWxpdHkodmlzaWJsZTogYm9vbGVhbiwgZm9yY2VkOiBib29sZWFuIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9hYnNvbHV0ZVZpc2libGUgPSAhIXZpc2libGU7XG4gICAgaWYgKGZvcmNlZCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5faXNGb3JjZWQgPSBmb3JjZWQ7XG4gICAgICB0aGlzLl92aXNpYmxlRm9yY2VkID0gdmlzaWJsZTtcbiAgICB9XG4gICAgdGhpcy5fdmlzaWJsZSA9IHRoaXMuX2Fic29sdXRlVmlzaWJsZSAmJiB0aGlzLnZpZXdPblN0YXRlKHRoaXMuX2Zvcm1TdGF0ZSk7XG4gIH1cblxuICBzaG93KGZvcmNlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWaXNpYmlsaXR5KHRydWUsIGZvcmNlZCk7XG4gIH1cblxuICBoaWRlKGZvcmNlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWaXNpYmlsaXR5KGZhbHNlLCBmb3JjZWQpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5fZGlzYWJsZWQ7IH1cbiAgc2V0IGVuYWJsZWQoZW5hYmxlZCkge1xuICAgIHRoaXMuX2Fic29sdXRlRGlzYWJsZWQgPSAhZW5hYmxlZDtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHRoaXMuX2Fic29sdXRlRGlzYWJsZWQgfHwgIXRoaXMuZW5hYmxlZE9uU3RhdGUodGhpcy5fZm9ybVN0YXRlKTtcbiAgfVxuXG4gIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLl9kaXNhYmxlZDsgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XG5cbiAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7IHRoaXMuZW5hYmxlZCA9ICFkaXNhYmxlZDsgfVxuXG4gIGVuYWJsZSgpOiB2b2lkIHsgdGhpcy5lbmFibGVkID0gdHJ1ZTsgfVxuICBkaXNhYmxlKCk6IHZvaWQgeyB0aGlzLmVuYWJsZWQgPSBmYWxzZTsgfVxuXG4gIGZvcm1TdGF0ZUNoYW5nZUN1c3RvbVN1YnNjcmliZShmb3JtLCBmb3JtQ2hhbmdlU3ViamVjdCkgeyB9XG5cbiAgZm9ybVN0YXRlQ2hhbmdlKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlKSB7XG4gICAgICB0aGlzLl9mb3JtU3RhdGUgPSBzdGF0ZTtcbiAgICAgIHRoaXMuX3Zpc2libGUgPSB0aGlzLl9hYnNvbHV0ZVZpc2libGUgJiYgdGhpcy52aWV3T25TdGF0ZShzdGF0ZSk7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHRoaXMuX2Fic29sdXRlRGlzYWJsZWQgfHwgIXRoaXMuZW5hYmxlZE9uU3RhdGUoc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3RXaXRoUGFyZW50Rm9ybShmb3JtLCBmb3JtQ2hhbmdlU3ViamVjdCkge1xuICAgIHRoaXMuX2Zvcm0gPSBmb3JtO1xuICAgIHRoaXMuZm9ybVN0YXRlQ2hhbmdlQ3VzdG9tU3Vic2NyaWJlKGZvcm0sIGZvcm1DaGFuZ2VTdWJqZWN0KTtcbiAgICBmb3JtQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5mb3JtU3RhdGVDaGFuZ2UoZXZlbnQ/LnN0YXRlKSk7XG4gIH1cblxuICBzZXQgd2lkZ2V0KHdpZGdldCkgeyB0aGlzLl93aWRnZXQgPSB3aWRnZXQ7IH1cbiAgZ2V0IHdpZGdldCgpIHsgcmV0dXJuIHRoaXMuX3dpZGdldDsgfVxufVxuIl19