UNPKG

tuain-ng-forms-lib

Version:

Componentes y Clases Angular para la gestión de formularios TUAIN

151 lines 22.4 kB
import { Subject } from 'rxjs'; import { FormPiecePropagate } from './piece-propagate'; import { RecordFormSubSection } from './subsection'; const ACTIVE = 'active'; export class RecordFormSection extends FormPiecePropagate { _activation = new Subject(); _inactivation = new Subject(); _active = false; _sectionId = null; _sectionCode = null; _sectionTitle = null; _subSections = []; _subSectionsObj; _exclusiveSubSectionsByAttr = {}; constructor(sectionReceived, formObject, formConfig) { super(sectionReceived, formConfig); this.propagationCustomAttributes = this._formConfig?.propagationCustomAttributes?.sections ?? []; if (!sectionReceived) { return; } this._sectionId = (sectionReceived.sectionId) ? sectionReceived.sectionId.toString() : ''; this._sectionCode = (sectionReceived.sectionCode) ? sectionReceived.sectionCode : ''; this._sectionTitle = (sectionReceived.sectionTitle) ? sectionReceived.sectionTitle : ''; this._subSections = []; this._subSectionsObj = {}; if (sectionReceived.subsections) { const subsections = sectionReceived.subsections.map(subSecDef => { const visibleStates = subSecDef.visibleStates ?? []; if (subSecDef.elements && Array.isArray(subSecDef.elements)) { subSecDef.elements = subSecDef.elements.map(elm => ({ code: elm.elementCode, type: elm.elementTypeName })); } return { ...subSecDef, visibleStates }; }); for (const subsectionReceived of subsections) { const subSectionToAdd = new RecordFormSubSection(subsectionReceived, formObject, formConfig); const subsectionCode = subSectionToAdd.subsectionCode; if (subsectionCode) { this._subSections.push(subSectionToAdd); this._subSectionsObj[subsectionCode] = subSectionToAdd; } } } } get code() { return this._sectionCode; } get activation() { return this._activation.asObservable(); } get inactivation() { return this._inactivation.asObservable(); } get active() { return this._active; } get sectionId() { return this._sectionId; } get sectionCode() { return this._sectionCode; } get sectionTitle() { return this._sectionTitle; } get subSections() { return this._subSections; } get subSectionsObj() { return this._subSectionsObj; } set active(active) { this._active = active; } set sectionId(sectionId) { this._sectionId = sectionId; } set sectionCode(sectionCode) { this._sectionCode = sectionCode; } set sectionTitle(sectionTitle) { this._sectionTitle = sectionTitle; } set subSections(subSections) { this._subSections = subSections; } set subSectionsObj(subSectionsObj) { this._subSectionsObj = subSectionsObj; } activate() { if (!this._active) { this._active = true; this._sectionCode && this._activation.next(this._sectionCode); } } inactivate() { if (this._active) { this._active = false; this._sectionCode && this._inactivation.next(this._sectionCode); } } get title() { return this._sectionTitle; } set title(title) { this._sectionTitle = title; } getVisibleSubsections(state) { return this._subSections.filter(subSection => subSection.visible); } getSubsection(subSectionCode) { return (this._subSectionsObj && this._subSectionsObj[subSectionCode]) ? this._subSectionsObj[subSectionCode] : null; } activateSubSection(subSectionCode) { if (subSectionCode === this._exclusiveSubSectionsByAttr[ACTIVE]) { return; } const subSection = (this._subSectionsObj && this._subSectionsObj[subSectionCode]) ? this._subSectionsObj[subSectionCode] : null; if (subSection) { subSection?.activate(); this._exclusiveSubSectionsByAttr[ACTIVE] = subSectionCode; } } getFields() { let fieldsArray = []; if (this._subSections && this._subSections.length > 0) { for (const subSection of this._subSections) { const subsectionFields = subSection.getFields() ?? []; if (subsectionFields?.length > 0) { fieldsArray = fieldsArray.concat(subsectionFields); } } } return fieldsArray; } getActions() { let actionArray = []; if (this._subSections && this._subSections.length > 0) { for (const subSection of this._subSections) { const subSectionActions = subSection.getActions() ?? []; if (subSectionActions?.length > 0) { actionArray = actionArray.concat(subSectionActions); } } } return actionArray; } getActionNames() { let actionArray = []; if (this._subSections && this._subSections.length > 0) { for (const subSection of this._subSections) { actionArray = actionArray.concat(subSection.getActionNames()); } } return actionArray; } getFieldNames() { let fieldsArray = []; if (this._subSections && this._subSections.length > 0) { for (const subSection of this._subSections) { fieldsArray = fieldsArray.concat(subSection.getFieldNames()); } } return fieldsArray; } getField(name) { let field = null; if (this._subSections && this._subSections.length > 0) { for (const subSection of this._subSections) { field = subSection.getField(name); if (field) { return field; } } } return null; } formStateChangeCustomSubscribe(form, formChangeSubject) { this._subSections?.forEach(subsection => { subsection?.connectWithParentForm(form, formChangeSubject); }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NsYXNzZXMvZm9ybXMvc2VjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFFeEIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUFrQjtJQUN0QyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUNwQyxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUMvQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFVBQVUsR0FBa0IsSUFBSSxDQUFDO0lBQ2pDLFlBQVksR0FBa0IsSUFBSSxDQUFDO0lBQ25DLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLFlBQVksR0FBMkIsRUFBRSxDQUFDO0lBQzFDLGVBQWUsQ0FBTTtJQUNyQiwyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFFekMsWUFBWSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVU7UUFDakQsS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2pHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENB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LENBQUM7Z0JBQzNDLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFJO1FBQ1gsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDM0MsS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRVEsOEJBQThCLENBQUMsSUFBSSxFQUFFLGlCQUFpQjtRQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0QyxVQUFVLEVBQUUscUJBQXFCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtUGllY2VQcm9wYWdhdGUgfSBmcm9tICcuL3BpZWNlLXByb3BhZ2F0ZSc7XG5pbXBvcnQgeyBGb3JtQWN0aW9uIH0gZnJvbSAnLi9hY3Rpb24nO1xuaW1wb3J0IHsgUmVjb3JkRm9ybVN1YlNlY3Rpb24gfSBmcm9tICcuL3N1YnNlY3Rpb24nO1xuXG5jb25zdCBBQ1RJVkUgPSAnYWN0aXZlJztcblxuZXhwb3J0IGNsYXNzIFJlY29yZEZvcm1TZWN0aW9uIGV4dGVuZHMgRm9ybVBpZWNlUHJvcGFnYXRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aXZhdGlvbiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5hY3RpdmF0aW9uID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIF9hY3RpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2VjdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc2VjdGlvbkNvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zZWN0aW9uVGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zdWJTZWN0aW9uczogUmVjb3JkRm9ybVN1YlNlY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF9zdWJTZWN0aW9uc09iajogYW55O1xuICBwcml2YXRlIF9leGNsdXNpdmVTdWJTZWN0aW9uc0J5QXR0ciA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHNlY3Rpb25SZWNlaXZlZCwgZm9ybU9iamVjdCwgZm9ybUNvbmZpZykge1xuICAgIHN1cGVyKHNlY3Rpb25SZWNlaXZlZCwgZm9ybUNvbmZpZyk7XG4gICAgdGhpcy5wcm9wYWdhdGlvbkN1c3RvbUF0dHJpYnV0ZXMgPSB0aGlzLl9mb3JtQ29uZmlnPy5wcm9wYWdhdGlvbkN1c3RvbUF0dHJpYnV0ZXM/LnNlY3Rpb25zID8/IFtdO1xuICAgIGlmICghc2VjdGlvblJlY2VpdmVkKSB7IHJldHVybjsgfVxuICAgIHRoaXMuX3NlY3Rpb25JZCA9IChzZWN0aW9uUmVjZWl2ZWQuc2VjdGlvbklkKSA/IHNlY3Rpb25SZWNlaXZlZC5zZWN0aW9uSWQudG9TdHJpbmcoKSA6ICcnO1xuICAgIHRoaXMuX3NlY3Rpb25Db2RlID0gKHNlY3Rpb25SZWNlaXZlZC5zZWN0aW9uQ29kZSkgPyBzZWN0aW9uUmVjZWl2ZWQuc2VjdGlvbkNvZGUgOiAnJztcbiAgICB0aGlzLl9zZWN0aW9uVGl0bGUgPSAoc2VjdGlvblJlY2VpdmVkLnNlY3Rpb25UaXRsZSkgPyBzZWN0aW9uUmVjZWl2ZWQuc2VjdGlvblRpdGxlIDogJyc7XG4gICAgdGhpcy5fc3ViU2VjdGlvbnMgPSBbXTtcbiAgICB0aGlzLl9zdWJTZWN0aW9uc09iaiA9IHt9O1xuICAgIGlmIChzZWN0aW9uUmVjZWl2ZWQuc3Vic2VjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHN1YnNlY3Rpb25zID0gc2VjdGlvblJlY2VpdmVkLnN1YnNlY3Rpb25zLm1hcChzdWJTZWNEZWYgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlU3RhdGVzID0gc3ViU2VjRGVmLnZpc2libGVTdGF0ZXMgPz8gW107XG4gICAgICAgIGlmIChzdWJTZWNEZWYuZWxlbWVudHMgJiYgQXJyYXkuaXNBcnJheShzdWJTZWNEZWYuZWxlbWVudHMpKSB7XG4gICAgICAgICAgc3ViU2VjRGVmLmVsZW1lbnRzID0gc3ViU2VjRGVmLmVsZW1lbnRzLm1hcChlbG0gPT4gKHsgY29kZTogZWxtLmVsZW1lbnRDb2RlLCB0eXBlOiBlbG0uZWxlbWVudFR5cGVOYW1lIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5zdWJTZWNEZWYsIHZpc2libGVTdGF0ZXMgfTtcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBzdWJzZWN0aW9uUmVjZWl2ZWQgb2Ygc3Vic2VjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc3ViU2VjdGlvblRvQWRkID0gbmV3IFJlY29yZEZvcm1TdWJTZWN0aW9uKHN1YnNlY3Rpb25SZWNlaXZlZCwgZm9ybU9iamVjdCwgZm9ybUNvbmZpZyk7XG4gICAgICAgIGNvbnN0IHN1YnNlY3Rpb25Db2RlID0gc3ViU2VjdGlvblRvQWRkLnN1YnNlY3Rpb25Db2RlO1xuICAgICAgICBpZiAoc3Vic2VjdGlvbkNvZGUpIHtcbiAgICAgICAgICB0aGlzLl9zdWJTZWN0aW9ucy5wdXNoKHN1YlNlY3Rpb25Ub0FkZCk7XG4gICAgICAgICAgdGhpcy5fc3ViU2VjdGlvbnNPYmpbc3Vic2VjdGlvbkNvZGVdID0gc3ViU2VjdGlvblRvQWRkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvZGUoKSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQ29kZTsgfVxuICBnZXQgYWN0aXZhdGlvbigpIHsgcmV0dXJuIHRoaXMuX2FjdGl2YXRpb24uYXNPYnNlcnZhYmxlKCk7IH1cbiAgZ2V0IGluYWN0aXZhdGlvbigpIHsgcmV0dXJuIHRoaXMuX2luYWN0aXZhdGlvbi5hc09ic2VydmFibGUoKTsgfVxuXG4gIGdldCBhY3RpdmUoKSB7IHJldHVybiB0aGlzLl9hY3RpdmU7IH1cbiAgZ2V0IHNlY3Rpb25JZCgpIHsgcmV0dXJuIHRoaXMuX3NlY3Rpb25JZDsgfVxuICBnZXQgc2VjdGlvbkNvZGUoKSB7IHJldHVybiB0aGlzLl9zZWN0aW9uQ29kZTsgfVxuICBnZXQgc2VjdGlvblRpdGxlKCkgeyByZXR1cm4gdGhpcy5fc2VjdGlvblRpdGxlOyB9XG4gIGdldCBzdWJTZWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuX3N1YlNlY3Rpb25zOyB9XG4gIGdldCBzdWJTZWN0aW9uc09iaigpIHsgcmV0dXJuIHRoaXMuX3N1YlNlY3Rpb25zT2JqOyB9XG5cbiAgc2V0IGFjdGl2ZShhY3RpdmUpIHsgdGhpcy5fYWN0aXZlID0gYWN0aXZlOyB9XG4gIHNldCBzZWN0aW9uSWQoc2VjdGlvbklkKSB7IHRoaXMuX3NlY3Rpb25JZCA9IHNlY3Rpb25JZDsgfVxuICBzZXQgc2VjdGlvbkNvZGUoc2VjdGlvbkNvZGUpIHsgdGhpcy5fc2VjdGlvbkNvZGUgPSBzZWN0aW9uQ29kZTsgfVxuICBzZXQgc2VjdGlvblRpdGxlKHNlY3Rpb25UaXRsZSkgeyB0aGlzLl9zZWN0aW9uVGl0bGUgPSBzZWN0aW9uVGl0bGU7IH1cbiAgc2V0IHN1YlNlY3Rpb25zKHN1YlNlY3Rpb25zKSB7IHRoaXMuX3N1YlNlY3Rpb25zID0gc3ViU2VjdGlvbnM7IH1cbiAgc2V0IHN1YlNlY3Rpb25zT2JqKHN1YlNlY3Rpb25zT2JqKSB7IHRoaXMuX3N1YlNlY3Rpb25zT2JqID0gc3ViU2VjdGlvbnNPYmo7IH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2FjdGl2ZSkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlY3Rpb25Db2RlICYmIHRoaXMuX2FjdGl2YXRpb24ubmV4dCh0aGlzLl9zZWN0aW9uQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgaW5hY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3NlY3Rpb25Db2RlICYmIHRoaXMuX2luYWN0aXZhdGlvbi5uZXh0KHRoaXMuX3NlY3Rpb25Db2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGl0bGUoKSB7IHJldHVybiB0aGlzLl9zZWN0aW9uVGl0bGU7IH1cbiAgc2V0IHRpdGxlKHRpdGxlKSB7IHRoaXMuX3NlY3Rpb25UaXRsZSA9IHRpdGxlOyB9XG5cbiAgZ2V0VmlzaWJsZVN1YnNlY3Rpb25zKHN0YXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YlNlY3Rpb25zLmZpbHRlcihzdWJTZWN0aW9uID0+IHN1YlNlY3Rpb24udmlzaWJsZSk7XG4gIH1cblxuICBnZXRTdWJzZWN0aW9uKHN1YlNlY3Rpb25Db2RlKSB7XG4gICAgcmV0dXJuICh0aGlzLl9zdWJTZWN0aW9uc09iaiAmJiB0aGlzLl9zdWJTZWN0aW9uc09ialtzdWJTZWN0aW9uQ29kZV0pXG4gICAgICA/IHRoaXMuX3N1YlNlY3Rpb25zT2JqW3N1YlNlY3Rpb25Db2RlXSA6IG51bGw7XG4gIH1cblxuICBhY3RpdmF0ZVN1YlNlY3Rpb24oc3ViU2VjdGlvbkNvZGUpIHtcbiAgICBpZiAoc3ViU2VjdGlvbkNvZGUgPT09IHRoaXMuX2V4Y2x1c2l2ZVN1YlNlY3Rpb25zQnlBdHRyW0FDVElWRV0pIHsgcmV0dXJuOyB9XG4gICAgY29uc3Qgc3ViU2VjdGlvbiA9ICh0aGlzLl9zdWJTZWN0aW9uc09iaiAmJiB0aGlzLl9zdWJTZWN0aW9uc09ialtzdWJTZWN0aW9uQ29kZV0pXG4gICAgICA/IHRoaXMuX3N1YlNlY3Rpb25zT2JqW3N1YlNlY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHN1YlNlY3Rpb24pIHtcbiAgICAgIHN1YlNlY3Rpb24/LmFjdGl2YXRlKCk7XG4gICAgICB0aGlzLl9leGNsdXNpdmVTdWJTZWN0aW9uc0J5QXR0cltBQ1RJVkVdID0gc3ViU2VjdGlvbkNvZGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRzKCkge1xuICAgIGxldCBmaWVsZHNBcnJheTogYW55W10gPSBbXTtcbiAgICBpZiAodGhpcy5fc3ViU2VjdGlvbnMgJiYgdGhpcy5fc3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHRoaXMuX3N1YlNlY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IHN1YnNlY3Rpb25GaWVsZHM6IGFueVtdID0gc3ViU2VjdGlvbi5nZXRGaWVsZHMoKSA/PyBbXTtcbiAgICAgICAgaWYgKHN1YnNlY3Rpb25GaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmaWVsZHNBcnJheSA9IGZpZWxkc0FycmF5LmNvbmNhdChzdWJzZWN0aW9uRmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmllbGRzQXJyYXk7XG4gIH1cblxuICBnZXRBY3Rpb25zKCk6IEZvcm1BY3Rpb25bXSB7XG4gICAgbGV0IGFjdGlvbkFycmF5OiBhbnlbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9zdWJTZWN0aW9ucyAmJiB0aGlzLl9zdWJTZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YlNlY3Rpb24gb2YgdGhpcy5fc3ViU2VjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc3ViU2VjdGlvbkFjdGlvbnMgPSBzdWJTZWN0aW9uLmdldEFjdGlvbnMoKSA/PyBbXTtcbiAgICAgICAgaWYgKHN1YlNlY3Rpb25BY3Rpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYWN0aW9uQXJyYXkgPSBhY3Rpb25BcnJheS5jb25jYXQoc3ViU2VjdGlvbkFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25BcnJheTtcbiAgfVxuXG4gIGdldEFjdGlvbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgYWN0aW9uQXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuX3N1YlNlY3Rpb25zICYmIHRoaXMuX3N1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiB0aGlzLl9zdWJTZWN0aW9ucykge1xuICAgICAgICBhY3Rpb25BcnJheSA9IGFjdGlvbkFycmF5LmNvbmNhdChzdWJTZWN0aW9uLmdldEFjdGlvbk5hbWVzKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWN0aW9uQXJyYXk7XG4gIH1cblxuICBnZXRGaWVsZE5hbWVzKCkge1xuICAgIGxldCBmaWVsZHNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5fc3ViU2VjdGlvbnMgJiYgdGhpcy5fc3ViU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIHRoaXMuX3N1YlNlY3Rpb25zKSB7XG4gICAgICAgIGZpZWxkc0FycmF5ID0gZmllbGRzQXJyYXkuY29uY2F0KHN1YlNlY3Rpb24uZ2V0RmllbGROYW1lcygpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkc0FycmF5O1xuICB9XG5cbiAgZ2V0RmllbGQobmFtZSkge1xuICAgIGxldCBmaWVsZCA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3N1YlNlY3Rpb25zICYmIHRoaXMuX3N1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiB0aGlzLl9zdWJTZWN0aW9ucykge1xuICAgICAgICBmaWVsZCA9IHN1YlNlY3Rpb24uZ2V0RmllbGQobmFtZSk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG92ZXJyaWRlIGZvcm1TdGF0ZUNoYW5nZUN1c3RvbVN1YnNjcmliZShmb3JtLCBmb3JtQ2hhbmdlU3ViamVjdCkge1xuICAgIHRoaXMuX3N1YlNlY3Rpb25zPy5mb3JFYWNoKHN1YnNlY3Rpb24gPT4ge1xuICAgICAgc3Vic2VjdGlvbj8uY29ubmVjdFdpdGhQYXJlbnRGb3JtKGZvcm0sIGZvcm1DaGFuZ2VTdWJqZWN0KTtcbiAgICB9KTtcbiAgfVxufVxuIl19