tuain-ng-forms-lib 12.0.21 → 12.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tuain-ng-forms-lib.umd.js +1 -0
- package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
- package/esm2015/lib/components/elements/layout/element.component.js +2 -1
- package/fesm2015/tuain-ng-forms-lib.js +1 -0
- package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
- package/lib/components/elements/layout/element.component.d.ts +1 -0
- package/package.json +1 -1
- package/tuain-ng-forms-lib.metadata.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuain-ng-forms-lib.js","sources":["../../../projects/tuain-ng-forms-lib/src/lib/components/elements/action.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/field.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/element.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/form-error.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/form-header.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/section.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/sub-section.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/filter.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/form.constants.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/element.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/column.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/action.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/utilities.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/row-data.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/table.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table-filter.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table-record-action.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table-record-field.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/subsection.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/section.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/action.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/field.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/form.ts","../../../projects/tuain-ng-forms-lib/src/lib/services/form-manager.service.ts","../../../projects/tuain-ng-forms-lib/src/lib/services/event-manager.service.ts","../../../projects/tuain-ng-forms-lib/src/lib/services/file-manager.service.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/forms/basic-form.ts","../../../projects/tuain-ng-forms-lib/src/lib/tuain-ng-forms-lib.module.ts","../../../projects/tuain-ng-forms-lib/src/tuain-ng-forms-lib.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { FormAction } from '../../classes/forms/action';\n\n@Component({\n selector: 'lib-action',\n template: `<ng-content></ng-content>`\n})\n\nexport class ActionComponent implements OnInit {\n formConfig: any;\n inProgress: boolean;\n @Input() action: FormAction;\n @Input() busy: any;\n @Input() relatedField: any;\n @Input() currentState: any;\n\n @Input() style = 'primary';\n @Input() showLabel = true;\n\n ngOnInit() {\n this.formConfig = this.action?._formConfig;\n this.start();\n }\n\n start() { }\n\n activate() {\n if (this.action?.notifyActivation) {\n this.action.notifyActivation();\n }\n }\n\n visibleOnRestriction() {\n if (!this.action?.restrictedOnField) {\n return true;\n }\n if ((this.action?.restrictedOnOperator === '=='\n && this.relatedField === this.action?.restrictedOnValue)\n || (this.action?.restrictedOnOperator === '!='\n && this.relatedField !== this.action?.restrictedOnValue)) {\n return true;\n }\n }\n\n get visible() {\n return this.action?.visibleOn(this.currentState) && this.visibleOnRestriction();\n }\n\n get disabled() {\n return !(this.action?.enabledOn(this.currentState));\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { FieldDescriptor } from '../../classes/forms/field';\n\nconst VALUE = ''\n@Component({\n selector: 'lib-field',\n template: `<ng-content></ng-content>`\n})\nexport class FieldComponent implements OnInit {\n formConfig: any;\n // Atributos obtenidos estáticamente\n code: string;\n value: any;\n fieldInfo: string;\n fieldAlignment: string;\n tooltipText: string;\n\n // Atributos actualizados por subscripción\n maxLength: any;\n onValidation: any;\n captureType: any;\n title: any;\n type: any;\n visibleLabel: any;\n required: any;\n options: any;\n\n errorType: any;\n errorCode: any;\n errorMessage: any;\n\n @Input() field: FieldDescriptor;\n @Input() currentState: any;\n\n ngOnInit() {\n if (this.field) {\n this.formConfig = this.field?._formConfig;\n // Inicialización\n const mapping = Object.entries(this.formConfig.componentFieldAttrMap);\n for (let index = 0; index < mapping.length; index++) {\n const [fieldAttr, compAttr1] = mapping[index];\n const compAttr = compAttr1.toString();\n if (compAttr === VALUE) {\n this.updateValue();\n } else {\n this[compAttr] = this.field?.[fieldAttr.toString()];\n }\n }\n // Subscripción a cambios en atributos\n this.field.attributeChange.subscribe(event => {\n const { name: fieldAttr, value } = event;\n const compAttr = this.formConfig.componentFieldAttrMap[fieldAttr];\n if (compAttr === VALUE) {\n this.updateValue();\n } else {\n this[compAttr] = value\n }\n });\n }\n this.start();\n }\n\n start() { }\n\n focus() { }\n\n updateObject() {\n this.field._fieldValue = this.value;\n }\n\n inputChanged() {\n this.field._fieldValue = this.value;\n this.onChangeContent();\n }\n\n inputTyped() {\n this.field._fieldValue = this.value;\n this.onInputChange();\n }\n\n updateValue() {\n this.value = this.field._fieldValue;\n }\n\n onInputChange() {\n setTimeout(() => this.field.notifyEditionPartial(), 50);\n }\n\n onChangeContent() {\n setTimeout(() => this.field.notifyEditionFinish(), 50);\n }\n\n onShowInfo() {\n setTimeout(() => this.field.notifyEditionDetailRequest(), 50);\n }\n\n numberInputValidation(event) {\n const k = event.charCode;\n return (k > 47 && k < 58);\n }\n\n get visible() {\n return this.field?.visibleOn(this.currentState);\n }\n\n get disabled() {\n return !this.field?.enabledOn(this.currentState);\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-element',\n template: `<ng-content></ng-content>`\n})\nexport class ElementComponent implements OnInit {\n formConfig: any;\n\n @Input() element: any;\n @Input() currentState: any;\n\n ngOnInit() {\n this.formConfig = this.element?._formConfig;\n this.start();\n }\n\n start() { }\n\n get visible() {\n return this.element?.visibleOn(this.currentState);\n }\n\n get disabled() {\n return !this.element?.enabledOn(this.currentState);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-form-error',\n template: `<ng-content></ng-content>`\n})\nexport class FormErrorComponent {\n @Input() errorTitle: any;\n @Input() errorMessage: any;\n @Input() errorType: any;\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'lib-form-header',\n template: `<ng-content></ng-content>`\n})\nexport class FormHeaderComponent {\n @Input() formManager: any;\n @Input() goBackAction: boolean;\n @Input() showTitle: any;\n @Input() headerActions: any;\n @Output() goBackEvent: EventEmitter<object> = new EventEmitter<object>();\n\n goBackForm() {\n this.goBackEvent.emit();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-section',\n template: `<ng-content></ng-content>`\n})\nexport class SectionComponent implements OnInit {\n @Input() sectionObject: any;\n @Input() formManager: any;\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-subsection',\n template: `<ng-content></ng-content>`\n})\nexport class SubSectionComponent implements OnInit {\n @Input() subSection: any;\n @Input() showHeader: any;\n @Input() formManager: any;\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n}\n","export class FieldSearch {\n fieldCode: string;\n fieldAlias: string;\n fieldTitle: string;\n fieldTypeCode: string;\n operators: string[];\n alignment: string;\n format: string;\n constructor(filterDefinition) {\n this.fieldCode = filterDefinition.fieldCode;\n this.fieldAlias = filterDefinition.fieldAlias || filterDefinition.fieldCode;\n this.fieldTitle = filterDefinition.fieldTitle;\n this.fieldTypeCode = filterDefinition.fieldTypeCode;\n this.operators = filterDefinition.operators;\n this.alignment = filterDefinition.alignment;\n this.format = filterDefinition.format;\n }\n}\n\nexport interface AdvancedFilterItem {\n fieldSearch: FieldSearch;\n operator: string;\n fieldValue1: string;\n fieldValue2: string;\n}\n\nexport class Filter {\n filterModeSimple: boolean;\n advancedFilter: AdvancedFilterItem[];\n simpleFilterWords: string[];\n constructor() {\n this.filterModeSimple = true;\n this.advancedFilter = [];\n this.simpleFilterWords = [];\n }\n}\n","export const NO_ERROR = '00';\nexport const HEADER = 'HEADER';\n\nexport const elementTypes = {\n action: 'ACTION',\n field: 'FIELD',\n table: 'TABLE',\n};\n\nexport const formActions = {\n tableAction: 'TABLEACTION',\n getData: 'GETDATA',\n getTableData: 'GETTABLEDATA',\n validate: 'VALIDATE',\n};\n\nexport const operators = {\n G: '>',\n L: '<',\n GE: '>=',\n LE: '<=',\n EQ: '==',\n NOT_EQ: '!=',\n CONTENT: 'Contiene',\n NOT_CONTENT: 'No Contiene',\n BETWEEN: 'Entre',\n};\n","import { elementTypes } from './form.constants';\nexport class FormElement {\n protected _visible: boolean;\n protected _visibleForced: boolean;\n protected _isForced: boolean;\n _formConfig: any;\n disabled: boolean;\n visibleStates: string[];\n enabledStates: string[];\n widget: any;\n elementType: string;\n\n constructor(elementDefinition, formConfig) {\n this._formConfig = formConfig;\n this._isForced = false;\n this.setVisibleStates(elementDefinition.visibleStates);\n this.setEnabledStates(elementDefinition.enabledStates);\n this._visibleForced = false;\n this.disabled = elementDefinition?.disabled ?? false;\n this.setVisibility(elementDefinition?.visible ?? true);\n this.widget = null;\n }\n\n isField() { return this.elementType === elementTypes.field; }\n isAction() { return this.elementType === elementTypes.action; }\n isTable() { return this.elementType === elementTypes.table; }\n\n setVisibleStates(newStates: any) {\n const visibleStates = (!Array.isArray(newStates) && typeof newStates === 'string')\n ? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)\n : newStates;\n this.visibleStates = (Array.isArray(visibleStates)) ? visibleStates : [];\n }\n\n setEnabledStates(newStates: any) {\n const enabledStates = (!Array.isArray(newStates) && typeof newStates === 'string')\n ? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)\n : newStates;\n this.enabledStates = (Array.isArray(enabledStates)) ? enabledStates : [];\n }\n\n viewOnState(state) { return (this.visibleStates && state) ? this.visibleStates.includes(state) : false; }\n enabledOnState(state) { return (this.enabledStates && state) ? this.enabledStates.includes(state) : false; }\n\n supportState(state) { return this.viewOnState(state); }\n supportMode(state) { return this.viewOnState(state); }\n\n get visible() { return (this._isForced) ? this._visibleForced : this._visible; }\n set visible(visible: boolean) { this.setVisibility(visible); }\n\n visibleOn(state) {\n return this.visible && this.viewOnState(state);\n }\n\n enabledOn(state) {\n return !this.disabled && this.enabledOnState(state);\n }\n\n setVisibility(visible: boolean, forced: boolean = null) {\n this._visible = visible && true;\n if (forced != null) {\n this._isForced = forced;\n }\n }\n\n show(forced?: boolean) {\n this._visible = true;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = true;\n }\n }\n\n hide(forced?: boolean) {\n this._visible = false;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = false;\n }\n }\n\n enable() { this.disabled = false; }\n disable() { this.disabled = true; }\n\n get enabled() { return !this.disabled; }\n get editable() { return !this.disabled; }\n}\n","export class RecordTableColumn {\n _formConfig: any;\n fieldCode: string;\n fieldTitle: string;\n fieldType: string;\n fieldAlignment: string;\n fieldFormat: string;\n visible: boolean;\n sortable: boolean;\n customAttributes: any;\n\n constructor(recTableColReceived, formConfig) {\n this._formConfig = formConfig;\n if (recTableColReceived) {\n this.fieldCode = recTableColReceived.fieldCode;\n this.fieldTitle = recTableColReceived.fieldTitle;\n this.fieldType = recTableColReceived.fieldTypeCode || this._formConfig.fieldTypes.text;\n const defaultTypeAlignment = (this._formConfig.tableFieldStyles[this.fieldType] != null) ? this._formConfig.tableFieldStyles[this.fieldType]['text-align'] : 'left';\n this.fieldAlignment = (recTableColReceived.alignment != null) ? recTableColReceived.alignment.toLowerCase() : defaultTypeAlignment;\n this.visible = recTableColReceived?.visible ?? true;\n this.sortable = recTableColReceived?.sortable ?? false;\n this.fieldFormat = recTableColReceived.format || '';\n this.customAttributes = recTableColReceived?.customAttributes ?? {};\n }\n }\n}\n","export class TableAction {\n visibleStates: string[];\n enabledStates: string[];\n newState: string;\n\n actionCode: string;\n actionTitle: string;\n iconName: string;\n actionType: string;\n actionClass: string;\n stateField: string;\n\n backend: boolean;\n restrictedOnField: string;\n restrictedOnValue: string;\n restrictedOnOperator: string;\n customAttributes: any;\n\n constructor(actionDefinition) {\n this.actionCode = actionDefinition.actionCode;\n this.actionTitle = actionDefinition.actionTitle;\n this.iconName = actionDefinition.iconName || this.actionCode;\n this.actionType = actionDefinition.actionType || 'STANDARD';\n this.actionClass = actionDefinition.actionClass || 'INLINE';\n this.newState = actionDefinition.newState;\n this.stateField = actionDefinition.stateField || '';\n\n this.visibleStates = actionDefinition.visibleStates || [];\n this.enabledStates = actionDefinition.enabledStates || [];\n this.backend = actionDefinition?.serverAction ?? false;\n this.restrictedOnField = actionDefinition.fieldRestrictedCode || '';\n this.restrictedOnValue = actionDefinition.valueRestricted || '';\n this.restrictedOnOperator = actionDefinition.operatorRestricted || '';\n this.customAttributes = actionDefinition?.customAttributes ?? {};\n }\n\n supportMode(state) { return this.viewOnState(state); }\n\n viewOnState(state) { return this.visibleStates.includes(state); }\n enabledOnState(state) { return this.enabledStates.includes(state); }\n}\n","export function formatCurrency(inputValue) {\n if (!inputValue) { return null; }\n const numeralDecimalMark = '.';\n const numeralPositiveOnly = false;\n const stripLeadingZeroes = true;\n const numeralIntegerScale = 12;\n const numeralDecimalScale = 2;\n const delimiter = ',';\n let parts;\n let partInteger;\n let partDecimal = '';\n\n // Se eliminan los caracteres alfabéticos\n let outputValue = inputValue.toString();\n if (!outputValue) {\n return;\n }\n /**\n * Se remplaza el primer caracter de marca decimal con el marcador reservado\n * Se eliminan los caractertes no numéricos excepto el signo menos y 'M'\n * utilizado como separador decimal en este punto, eliminando los prefijos\n * Se remplaza el caracter menos por un marcador resertvado\n * Se eliminan todos los demás caracteres menos en caso de estar presentes\n * Se remplaza el marcador de caracter menos (si está presente)\n * Se remplaza el marcador de separación decimal\n */\n let value = outputValue.replace(/[A-Za-z]/g, '')\n .replace(numeralDecimalMark, 'M')\n .replace(/[^\\dM-]/g, '')\n .replace(/^\\-/, 'N')\n .replace(/\\-/g, '')\n .replace('N', numeralPositiveOnly ? '' : '-')\n .replace('M', numeralDecimalMark);\n // Se eliminan los ceros a la izquierda\n if (stripLeadingZeroes) {\n value = value.replace(/^(-)?0+(?=\\d)/, '$1');\n }\n // Se separa la parte entera de la parte decimal\n partInteger = value;\n if (value.indexOf(numeralDecimalMark) >= 0) {\n parts = value.split(numeralDecimalMark);\n partInteger = parts[0];\n partDecimal = numeralDecimalMark + parts[1].slice(0, numeralDecimalScale);\n }\n if (numeralIntegerScale > 0) {\n partInteger = partInteger.slice(0, numeralIntegerScale + (value.slice(0, 1) === '-' ? 1 : 0));\n }\n // Se separan los digitos de acuerdo a la configuraciñon de agrupación\n partInteger = partInteger.replace(/(\\d)(?=(\\d{3})+$)/g, '$1' + delimiter);\n outputValue = partInteger.toString() + (numeralDecimalScale > 0 ? partDecimal.toString() : '');\n return outputValue;\n}\n","import { formatCurrency } from '../../utilities';\nimport { RecordTableColumn } from './column';\nimport { operators } from '../form.constants';\n\nconst DATE_TYPE = 'DATE';\nconst CURRENCY_TYPE = 'CURRENCY';\n\nexport class TableRecordData {\n recordId: string;\n selected: boolean;\n recordData: any = {};\n\n constructor(recordReceived, recordDefinition: RecordTableColumn[], selectionFieldName = null) {\n const { tableRecordId, recordData } = recordReceived;\n this.recordId = tableRecordId;\n this.selected = false;\n this.recordData = {};\n if (!recordDefinition || recordDefinition.length === 0 || !recordData || recordData.length === 0) {\n return;\n }\n const fieldNames = recordDefinition.map(column => column.fieldCode);\n if (Array.isArray(recordData)) {\n const rawRecordData = recordData.filter(fieldData => fieldData.fieldCode && fieldNames.includes(fieldData.fieldCode));\n rawRecordData.forEach(fieldData => {\n const { fieldCode, fieldValue } = fieldData;\n const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);\n const formattedFieldValue = this.formatFieldValue(fieldDef.fieldType, fieldValue);\n this.recordData[fieldCode] = formattedFieldValue;\n if (fieldCode === selectionFieldName) {\n this.selected = fieldValue;\n }\n });\n } else {\n const fields = Object.keys(recordData);\n fields.forEach(fieldCode => {\n const fieldValue = recordData[fieldCode];\n const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);\n const formattedFieldValue = this.formatFieldValue(fieldDef.fieldType, fieldValue);\n this.recordData[fieldCode] = formattedFieldValue;\n });\n }\n }\n\n formatFieldValue(fieldType, fieldValue) {\n if (fieldType === CURRENCY_TYPE) {\n return formatCurrency(fieldValue);\n } else if (fieldType === DATE_TYPE && fieldValue) {\n return new Date(fieldValue).toISOString().split('T')[0];\n }\n return fieldValue || '';\n }\n\n toggleSelect() {\n this.selected = !this.selected;\n }\n\n select() {\n this.selected = true;\n }\n\n unselect() {\n this.selected = false;\n }\n\n get recordIdKey() {\n return (typeof this.recordId === 'object')\n ? JSON.stringify(this.recordId) : this.recordId;\n }\n\n getFieldValue(fieldCode) {\n return (fieldCode && this.recordData[fieldCode])\n ? this.recordData[fieldCode] : null;\n }\n\n hasPattern(words) {\n if (!words || words.length === 0) {\n return true;\n }\n for (const fieldCode in this.recordData) {\n if (this.recordData.hasOwnProperty(fieldCode)) {\n for (const word of words) {\n const term = word.toUpperCase();\n const fieldValue = this.recordData[fieldCode];\n if (fieldValue.toString().toUpperCase().includes(term)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n hasCondition(advancedFilter) {\n if (!advancedFilter || advancedFilter.length === 0) {\n return true;\n }\n for (const condition of advancedFilter) {\n const fieldCode = condition.fieldSearch.fieldCode;\n if (this.recordData.hasOwnProperty(fieldCode)) {\n const fieldValue = this.recordData[fieldCode].toString().toUpperCase();\n const conditionField1Value = condition?.fieldValue1?.toString().toUpperCase();\n const conditionField2Value = condition.fieldValue2.toString().toUpperCase();\n if (condition.operator === operators.G && fieldValue <= conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.L && fieldValue >= conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.GE && fieldValue < conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.LE && fieldValue > conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.EQ) {\n return fieldValue === conditionField1Value;\n }\n if (condition.operator === operators.NOT_EQ && fieldValue === conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.CONTENT && !fieldValue.includes(conditionField1Value)) {\n return false;\n }\n if (condition.operator === operators.NOT_CONTENT && fieldValue.includes(conditionField1Value)) {\n return false;\n }\n if (condition.operator === operators.BETWEEN && (fieldValue < conditionField1Value\n || fieldValue > conditionField2Value)) {\n return false;\n }\n }\n }\n return true;\n }\n}\n","import { Subject } from 'rxjs';\nimport { elementTypes } from '../form.constants';\nimport { FormElement } from '../element';\nimport { FieldSearch, Filter, AdvancedFilterItem } from './filter';\nimport { RecordTableColumn } from './column';\nimport { TableAction } from './action';\nimport { TableRecordData } from './row-data';\n\nconst TABLE_SORT_ASCENDING = 'asc';\nconst TABLE_SORT_DESCENDING = 'desc';\n\nexport const TABLE_FILTER_TYPES = {\n simpleFilterChange: 'SIMPLE_CHANGE',\n simpleFilterFinish: 'SIMPLE_FINISH',\n complexFilterAdd: 'COMPLEX_ADD',\n complexFilterRemove: 'COMPLEX_REMOVE',\n};\n\nexport interface TableFilterEvent {\n eventType: string;\n simpleFilterString: string;\n complexFilterItem: AdvancedFilterItem;\n itemName: string;\n}\n\nexport interface TableActionEvent {\n actionCode: string;\n recordId: any;\n recordData: any;\n}\n\nexport interface TableEvent {\n tableCode: string;\n actionCode: string;\n actionDetail: any;\n}\n\nexport class RecordTable extends FormElement {\n private readonly _inlineActionTrigger = new Subject<TableEvent>();\n private readonly _globalActionTrigger = new Subject<TableEvent>();\n private readonly _recordSelectionTrigger = new Subject<TableEvent>();\n private readonly _selectionActionTrigger = new Subject<TableEvent>();\n private readonly _getDataTrigger = new Subject<TableEvent>();\n private readonly _attributeChange = new Subject<any>();\n\n tableRecords: TableRecordData[];\n tableRecordObj = {};\n visibleRecords: TableRecordData[];\n columns: RecordTableColumn[];\n private _tableColumnObj = {};\n private _appendPages: boolean;\n selectable: boolean;\n selectionBackend: boolean;\n selectionField: RecordTableColumn;\n private _actions: TableAction[];\n private _actionsObj = {};\n allSelected = false;\n\n tableCode: string;\n tableTitle: string;\n currentPage: number;\n totalPages: number;\n requestedPage: number;\n recordsPerPage: number;\n totalRecordsNumber: number;\n recordsNumber: number;\n sorting: any;\n\n waiting: boolean;\n clientPaging: boolean;\n\n simpleFilter: boolean;\n complexFilter: boolean;\n sortable: boolean;\n filterConfig: FieldSearch[];\n filterObject: Filter;\n customAttributes: any;\n\n constructor(tableReceived, formConfig) {\n super(tableReceived, formConfig);\n this.elementType = elementTypes.table;\n this.waiting = false;\n this.currentPage = 1;\n this.totalPages = 1;\n this.requestedPage = 1;\n\n this.columns = [];\n this._tableColumnObj = {};\n this._actions = [];\n this._actionsObj = {};\n this.tableRecords = [];\n\n this.setAttr('allSelected', false);\n this.setAttr('filterObject', new Filter());\n this.setAttr('filterConfig', []);\n this.setAttr('tableCode', tableReceived.tableCode);\n this.tableTitle = tableReceived.tableTitle;\n this.setAttr('clientPaging', tableReceived?.clientPaging ?? true);\n this.setAttr('simpleFilter', tableReceived?.simpleFilter ?? false);\n this.setAttr('complexFilter', false);\n\n this._appendPages = tableReceived?.append ?? false;\n this.selectable = tableReceived?.selectable ?? false;\n this.setAttr('selectionBackend', tableReceived?.selectionBackend ?? false);\n this.customAttributes = tableReceived?.customAttributes ?? {};\n this.setAttr('sortable', tableReceived?.sortable ?? false);\n this.setAttr('sorting', { columnName: '', direction: '' });\n\n this.setAttr('recordsPerPage', formConfig.defaultRecordsPerPage);\n if (tableReceived.fields) {\n const columns = [];\n for (const columnReceived of tableReceived.fields) {\n const columnDefinition = new RecordTableColumn(columnReceived, this._formConfig);\n columns.push(columnDefinition);\n this._tableColumnObj[columnDefinition.fieldCode] = columnDefinition;\n }\n this.setAttr('columns', columns);\n }\n if (tableReceived.actions) {\n const tableActions = tableReceived.actions.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates;\n if (!visibleStates) {\n visibleStates = (objDef.actionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0);\n enabledStates = (objDef.actionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0);\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const actionReceived of tableActions) {\n const inlineAction = new TableAction(actionReceived);\n this._actions.push(inlineAction);\n this._actionsObj[inlineAction.actionCode] = inlineAction;\n }\n }\n if (tableReceived.filters && tableReceived.filters.length > 0) {\n this.setAttr('complexFilter', true);\n const filterConfig = this.filterConfig;\n for (const filterReceived of tableReceived.filters) {\n const filterItem = new FieldSearch(filterReceived);\n filterConfig.push(filterItem);\n }\n this.setAttr('filterConfig', filterConfig);\n\n }\n if (this.selectable) {\n this.selectionField = this.columns\n .find(column => column.fieldCode === tableReceived?.selectionField);\n }\n }\n\n get inlineActionTrigger() { return this._inlineActionTrigger; }\n get globalActionTrigger() { return this._globalActionTrigger; }\n get selectionActionTrigger() { return this._selectionActionTrigger; }\n get recordSelectionTrigger() { return this._recordSelectionTrigger; }\n get getDataTrigger() { return this._getDataTrigger; }\n get attributeChange() { return this._attributeChange; }\n\n get hasActions() { return (this._actions.length > 0); }\n get selectionFieldName() { return this.selectionField?.fieldCode ?? null; }\n get columnNames() { return Object.keys(this._tableColumnObj); }\n\n get records() { return this.visibleRecords; }\n set records(records) { this.replaceRecords(records); }\n get selectedRecords() {\n return this.tableRecords.filter(rec => rec.selected)\n .map(rec => rec.recordId);\n }\n\n setAttr(name: string, value: any) {\n this[name] = value;\n if (this._formConfig.monitoredTableAttributes.includes(name)) {\n this._attributeChange.next({ name, value });\n }\n }\n\n appendRecords(records) { this.setTableRecords(records, true); }\n replaceRecords(records) { this.setTableRecords(records, false); }\n columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }\n putOnWait() { this.waiting = true; }\n freeWaiting() { this.waiting = false; }\n getActionObject(actionCode) { return this.getAction(actionCode); }\n\n notifyGlobalAction(actionCode) {\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode,\n actionDetail: null\n };\n this._globalActionTrigger.next(tableEvent);\n }\n\n notifyInlineAction(tableActionEvent: TableActionEvent) {\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode: tableActionEvent.actionCode,\n actionDetail: {\n recordId: tableActionEvent.recordId,\n recordData: tableActionEvent.recordData\n }\n };\n this._inlineActionTrigger.next(tableEvent);\n }\n\n notifyRecordSelection(recordId) {\n const record = this.getTableRecord(recordId);\n if (!record) { return; }\n record.toggleSelect();\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode: null,\n actionDetail: {\n recordId: record.recordId,\n recordData: record.recordData\n }\n };\n this.recordSelectionTrigger.next(tableEvent);\n }\n\n notifySelectionAction(actionCode) {\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode,\n actionDetail: {\n selectedRecords: this.selectedRecords\n }\n };\n this._selectionActionTrigger.next(tableEvent);\n }\n\n notifyGetDataAction(requestedPage = null) {\n this.updateVisibleRecords();\n this.requestedPage = requestedPage || this.currentPage;\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode: null,\n actionDetail: null,\n };\n this._getDataTrigger.next(tableEvent);\n }\n\n clean() {\n this.tableRecords = [];\n this.tableRecordObj = {};\n }\n\n selectAll() {\n this.setAttr('allSelected', true);\n this.tableRecords.forEach(record => record.select());\n }\n\n unSelectAll() {\n this.setAttr('allSelected', false);\n this.tableRecords.forEach(record => record.unselect());\n }\n\n setTableRecords(tableRecords, append) {\n if (!append) { this.clean(); }\n const newRecordsObj = { ...this.tableRecordObj };\n const newRecords = [...this.tableRecords];\n for (const tableRecord of tableRecords) {\n const recordReceived: TableRecordData = new TableRecordData(tableRecord, this.columns,\n this.selectionField?.fieldCode);\n const recordIdKey = recordReceived.recordIdKey;\n newRecords.push(recordReceived);\n newRecordsObj[recordIdKey] = recordReceived;\n }\n this.tableRecords = newRecords;\n this.tableRecordObj = newRecordsObj;\n this.updateVisibleRecords();\n }\n\n updateVisibleRecords() {\n if (!this.clientPaging || !this.tableRecords || this.tableRecords.length === 0) {\n this.setAttr('visibleRecords', this.tableRecords);\n }\n const recordsVisible = (this.filterObject.filterModeSimple)\n ? this.tableRecords.filter(record => record.hasPattern(this.filterObject.simpleFilterWords))\n : this.tableRecords.filter(record => record.hasCondition(this.filterObject.advancedFilter));\n this.setAttr('visibleRecords', recordsVisible);\n }\n\n updateFromServer(tableReceived) {\n this.visible = tableReceived?.visible || true;\n this.setAttr('currentPage', parseInt(tableReceived.currentPage, 10) || 1);\n this.totalPages = tableReceived.totalPages || 1;\n this.setAttr('recordsPerPage', tableReceived.recordsPerPage);\n this.recordsNumber = tableReceived.recordsNumber;\n this.setAttr('totalRecordsNumber', tableReceived.totalRecordsNumber);\n this.setAttr('sorting', {\n columnName: tableReceived.sortingColumn || '',\n direction: tableReceived.sortingDirection || ''\n });\n\n this.requestedPage = 1;\n this.waiting = false;\n\n this.clean();\n if (this._appendPages) {\n this.replaceRecords(tableReceived.tableRecords);\n } else {\n this.appendRecords(tableReceived.tableRecords);\n }\n }\n\n getTableRecord(recordId) {\n const recordIdKey = (typeof recordId === 'object') ? JSON.stringify(recordId) : recordId;\n return (this.tableRecordObj && recordId && this.tableRecordObj[recordId])\n ? this.tableRecordObj[recordId] : null;\n }\n\n getAction(actionCode) {\n return (this._actionsObj && actionCode && this._actionsObj[actionCode])\n ? this._actionsObj[actionCode] : null;\n }\n\n getActions(actionClass: string = this._formConfig.tableActions.inline, actionTypes: string[] = null) {\n return this._actions.filter(actionDef => {\n const typeIncluded = (actionTypes) ? actionTypes.includes(actionDef.actionType) : true;\n return actionDef.actionClass === actionClass && typeIncluded;\n });\n }\n\n // Filtros\n\n set simpleFilterText(filterText) {\n let terms = (filterText) ? filterText.split(' ') : null;\n if (terms && terms.length > 0) {\n terms = terms.filter((term) => term !== '');\n }\n this.filterObject.filterModeSimple = true;\n this.filterObject.simpleFilterWords = terms || [];\n }\n\n changeFilterMode(toSimple) {\n this.filterObject.filterModeSimple = toSimple;\n }\n\n addFilterRestriction(filterTerm: AdvancedFilterItem) {\n this.filterObject.advancedFilter.push(filterTerm);\n }\n\n removeFilterRestriction(fieldCode) {\n const filterIndex = this.filterObject.advancedFilter.findIndex((filterDef) => {\n return filterDef.fieldSearch.fieldCode === fieldCode;\n });\n const filterToRemove = this.filterObject.advancedFilter[filterIndex];\n this.filterObject.advancedFilter.splice(filterIndex, 1);\n return filterToRemove;\n }\n\n get availableFilters() {\n return this.filterConfig.filter((fieldSearch) => {\n const currentFilter = this.filterObject.advancedFilter.find((filterItem) => {\n return filterItem.fieldSearch.fieldCode === fieldSearch.fieldCode;\n });\n return !currentFilter;\n });\n }\n\n get currentFilter() {\n const compactFilter: any = {};\n if (this.filterObject.filterModeSimple) {\n compactFilter.simpleFilterWords = this.filterObject.simpleFilterWords;\n } else {\n compactFilter.advancedFilter = [];\n this.filterObject.advancedFilter.forEach((condition) => {\n const simplifiedCondition = {\n fieldCode: condition.fieldSearch.fieldCode,\n fieldAlias: condition.fieldSearch.fieldAlias,\n operator: condition.operator,\n fieldValue1: condition.fieldValue1,\n fieldValue2: condition.fieldValue2,\n };\n compactFilter.advancedFilter.push(simplifiedCondition);\n });\n }\n return compactFilter;\n }\n\n // Ordenamiento\n\n setRequiredOrder(columnField) {\n if (columnField !== this.sorting.columnName) {\n this.setAttr('sorting', {\n columnName: columnField,\n direction: TABLE_SORT_ASCENDING\n });\n } else {\n const tableSort = this.sorting;\n tableSort.direction = (tableSort.direction === TABLE_SORT_ASCENDING) ? TABLE_SORT_DESCENDING : TABLE_SORT_ASCENDING;\n this.setAttr('sorting', tableSort);\n }\n }\n\n localSortData() {\n if (!this.sorting.columnName || !this.sorting.direction) { return; }\n this.tableRecords.sort((a, b) => this.recordCompare(a, b, this.sorting.columnName, this.sorting.direction));\n this.updateVisibleRecords();\n }\n\n recordCompare(recordA: TableRecordData, recordB: TableRecordData, columnCompare, direction) {\n const recordAColumn = recordA.getFieldValue(columnCompare);\n const recordBColumn = recordB.getFieldValue(columnCompare);\n let result = 0;\n if (recordAColumn < recordBColumn) {\n result = -1;\n } else if (recordAColumn > recordBColumn) {\n result = 1;\n }\n return direction === TABLE_SORT_ASCENDING ? result : -result;\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { FieldSearch, Filter, AdvancedFilterItem } from '../../../classes/forms/table/filter';\nimport { TABLE_FILTER_TYPES, TableFilterEvent } from '../../../classes/forms/table/table';\n\n@Component({\n selector: 'lib-table-filter',\n template: `<ng-content></ng-content>`\n})\n\nexport class LibTableFilterComponent implements OnInit {\n simpleSearchString = '';\n selectedField: string;\n filterFieldConfig: FieldSearch;\n selectedOperator: string;\n filterValue1: string;\n filterValue2: string;\n possibleOperators: string[];\n filterObject: Filter = new Filter();\n complexIsCollapsed = true;\n\n @Input() simpleFilter: boolean;\n @Input() complexFilter: boolean;\n @Input() complexFilterConfig: FieldSearch[];\n\n @Output() filterChanged: EventEmitter<object> = new EventEmitter<object>();\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n\n filterHasChanged(changeType) {\n this.complexIsCollapsed = true;\n const eventType = (changeType === 'change')\n ? TABLE_FILTER_TYPES.simpleFilterFinish\n : TABLE_FILTER_TYPES.simpleFilterChange;\n const tableFilterEvent: TableFilterEvent = {\n eventType,\n simpleFilterString: this.simpleSearchString,\n complexFilterItem: null,\n itemName: null,\n };\n this.filterChanged.emit(tableFilterEvent);\n }\n\n selectField() {\n this.selectedOperator = '';\n this.filterValue1 = '';\n this.filterValue2 = '';\n this.filterFieldConfig = this.complexFilterConfig.find((filterConfig) =>\n filterConfig.fieldCode === this.selectedField);\n this.possibleOperators = [];\n if (this.filterFieldConfig && this.filterFieldConfig.operators) {\n this.possibleOperators = this.filterFieldConfig.operators;\n }\n }\n\n addFilterField() {\n const filterCondition: AdvancedFilterItem = {\n fieldSearch: this.filterFieldConfig,\n operator: this.selectedOperator,\n fieldValue1: this.filterValue1,\n fieldValue2: this.filterValue2,\n };\n const tableFilterEvent: TableFilterEvent = {\n eventType: TABLE_FILTER_TYPES.complexFilterAdd,\n simpleFilterString: null,\n complexFilterItem: filterCondition,\n itemName: null,\n\n };\n this.filterChanged.emit(tableFilterEvent);\n this.clearFilterField();\n }\n\n clearFilterField() {\n this.selectedField = '';\n this.selectedOperator = '';\n this.selectedOperator = '';\n this.filterValue1 = '';\n this.filterValue2 = '';\n this.possibleOperators = [];\n }\n\n removeFilterField(fieldCode) {\n const tableFilterEvent: TableFilterEvent = {\n eventType: TABLE_FILTER_TYPES.complexFilterRemove,\n simpleFilterString: null,\n complexFilterItem: null,\n itemName: fieldCode,\n };\n this.filterChanged.emit(tableFilterEvent);\n // Se elimina de la configuración de filtro local\n const idx = this.filterObject.advancedFilter.findIndex(def => def.fieldSearch.fieldCode === fieldCode);\n if (idx >= 0) {\n const filterToRemove = this.filterObject.advancedFilter[idx];\n this.selectedField = filterToRemove.fieldSearch.fieldCode;\n this.selectField();\n this.selectedOperator = filterToRemove.operator;\n this.filterValue1 = filterToRemove.fieldValue1;\n this.filterValue2 = filterToRemove.fieldValue2;\n this.filterObject.advancedFilter.splice(idx, 1);\n }\n }\n}\n","import { Component, Input, Output, OnInit, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { TableEvent, TableActionEvent } from '../../../classes/forms/table/table';\n\nconst INLINE_ACTION = 'INLINE';\n\n@Component({\n selector: 'lib-table-record-action',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibTableRecordActionComponent implements OnInit {\n @Input() recordId: any;\n @Input() recordData: any;\n @Input() action: any;\n\n @Output() actionSelected: EventEmitter<object> = new EventEmitter<object>();\n\n constructor() { }\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n\n onActivate() {\n const tableEvent: TableActionEvent = {\n actionCode: this.action.actionCode,\n recordId: this.recordId,\n recordData: this.recordData,\n };\n this.actionSelected.emit(tableEvent);\n }\n\n class() { }\n}\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'lib-table-record-field',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibTableRecordFieldComponent implements OnInit {\n @Input() fieldCode: any;\n @Input() fieldType: any;\n @Input() fieldValue: any;\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n}\n","import { Component, OnInit, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { TableRecordData } from '../../../classes/forms/table/row-data';\nimport { TableActionEvent } from '../../../classes/forms/table/table';\n\nimport { RecordTable, TableEvent, TableFilterEvent, TABLE_FILTER_TYPES } from '../../../classes/forms/table/table';\n\n@Component({\n selector: 'lib-table',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibTableComponent implements OnInit {\n formConfig: any;\n\n // Atributos sincronizados del objeto\n code: any;\n selectionBackend: any;\n simpleFilter: any;\n complexFilter: any;\n allSelected: any;\n currentPage: any;\n visibleRecords: any;\n recordsPerPage: any;\n clientPaging: any;\n columns: any;\n sortable: any;\n sorting: any;\n totalRecordsNumber: any;\n filterConfig: any;\n filterObject: any;\n\n tableFieldStyles: any;\n loaded = false;\n selectable = false;\n hasActions = false;\n inlineActions: any;\n globalActions: any;\n selectionActions: any;\n\n @Input() tableObject: RecordTable;\n @Input() tableRecords: TableRecordData[];\n @Input() disabled: boolean;\n @Input() currentState: string;\n @Input() waiting: boolean;\n\n ngOnInit() {\n if (this.tableObject) {\n this.formConfig = this.tableObject?._formConfig;\n this.tableFieldStyles = this.formConfig.tableFieldStyles;\n this.selectable = this.tableObject.selectable;\n this.hasActions = this.tableObject.hasActions;\n this.tableObject.widget = this;\n this.inlineActions = this.tableObject.getActions(this.formConfig.tableActions.inline);\n this.globalActions = this.tableObject.getActions(this.formConfig.tableActions.global);\n this.selectionActions = this.tableObject.getActions(this.formConfig.tableActions.selection);\n // Inicialización de campos mapeados del objeto\n const mapping = Object.entries(this.formConfig.componentTableAttrMap);\n for (let index = 0; index < mapping.length; index++) {\n const [tableAttr, compAttr] = mapping[index];\n this[compAttr.toString()] = this.tableObject?.[tableAttr.toString()];\n }\n // Subscripción a cambios en atributos\n this.tableObject.attributeChange.subscribe(event => {\n const { name: tableAttr, value } = event;\n const compAttr = this.formConfig.componentTableAttrMap[tableAttr];\n this.hasOwnProperty(compAttr) && (this[compAttr] = value);\n });\n }\n this.start();\n }\n\n start() { }\n\n tableGlobalAction(actionCode: string) {\n this.tableObject.notifyGlobalAction(actionCode);\n }\n\n tableSelectionAction(actionCode: string) {\n this.tableObject.notifySelectionAction(actionCode);\n }\n\n tableActionSelected(actionEvent: TableActionEvent) {\n this.tableObject.notifyInlineAction(actionEvent);\n }\n\n tableColumnSort(columnFieldCode) {\n this.tableObject.setRequiredOrder(columnFieldCode);\n if (this.clientPaging) {\n return this.tableObject.localSortData();\n }\n this.tableObject.notifyGetDataAction();\n }\n\n changePage(requestedPage) {\n if (!this.clientPaging) {\n this.tableObject.notifyGetDataAction(requestedPage);\n }\n }\n\n get records() {\n const currentPageRecords = this.visibleRecords;\n if (this.clientPaging && currentPageRecords && currentPageRecords.length > 0) {\n this.totalRecordsNumber = currentPageRecords.length;\n return currentPageRecords.map((record, i) => ({ id: i + 1, ...record }))\n .slice((this.currentPage - 1) * this.recordsPerPage,\n (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage);\n }\n return currentPageRecords;\n }\n\n applyCurrentFilter(tableFilterEvent: TableFilterEvent) {\n const { eventType } = tableFilterEvent;\n let triggerDataUpdate = false;\n if (eventType === TABLE_FILTER_TYPES.simpleFilterChange || eventType === TABLE_FILTER_TYPES.simpleFilterFinish) {\n this.tableObject.simpleFilterText = tableFilterEvent.simpleFilterString.trim();\n if (this.clientPaging) {\n this.tableObject.setAttr('currentPage', 1);\n this.tableObject.updateVisibleRecords();\n } else if (eventType === TABLE_FILTER_TYPES.simpleFilterFinish) {\n triggerDataUpdate = true;\n }\n }\n if (eventType === TABLE_FILTER_TYPES.complexFilterAdd) {\n this.tableObject.addFilterRestriction(tableFilterEvent.complexFilterItem);\n }\n if (eventType === TABLE_FILTER_TYPES.complexFilterRemove) {\n this.tableObject.removeFilterRestriction(tableFilterEvent.itemName);\n }\n if (triggerDataUpdate) {\n const tableGetDataEvent = {\n tableCode: this.tableObject.tableCode,\n requestedPage: 1,\n };\n this.tableObject.notifyGetDataAction(tableGetDataEvent);\n }\n }\n\n tableSelectionToggle(recordId) {\n this.tableObject.notifyRecordSelection(recordId);\n }\n\n toggleSelectAll() {\n if (this.allSelected) {\n this.tableObject.unSelectAll();\n } else {\n this.tableObject.selectAll();\n }\n }\n\n get availableFilters() {\n return this.tableObject.availableFilters;\n }\n\n get selectedRecords() {\n return this.tableObject.selectedRecords;\n }\n}\n","import { elementTypes } from './form.constants';\n\nexport class RecordFormSubSection {\n visible: boolean;\n _customRender: string;\n subsectionId: string;\n subsectionCode: string;\n subsectionTitle: string;\n visibleStates: string[];\n\n subSectionElements: any[];\n subSectionFields: any[];\n subSectionTables: any[];\n subSectionActions: any[];\n elementsArray: any;\n\n constructor(subsectionReceived, formObject) {\n if (!subsectionReceived) { return; }\n this._customRender = null;\n this.visible = true;\n this.subSectionElements = [];\n this.subSectionFields = [];\n this.subSectionTables = [];\n this.subSectionActions = [];\n this.elementsArray = {};\n this.subsectionId = (subsectionReceived.subsectionId) ? subsectionReceived.subsectionId.toString() : '';\n this.subsectionCode = (subsectionReceived.subsectionCode) ? subsectionReceived.subsectionCode : '';\n this.subsectionTitle = (subsectionReceived.subsectionTitle) ? subsectionReceived.subsectionTitle : '';\n this.visibleStates = subsectionReceived.visibleStates || [];\n if (subsectionReceived.elements) {\n for (const receivedElement of subsectionReceived.elements) {\n let elementObject = null;\n let arrayToAdd = null;\n const { type, code } = receivedElement;\n switch (type) {\n case elementTypes.field:\n elementObject = formObject.getFieldObject(code);\n arrayToAdd = this.subSectionFields;\n break;\n case elementTypes.table:\n elementObject = formObject.getTableObject(code);\n arrayToAdd = this.subSectionTables;\n break;\n case elementTypes.action:\n elementObject = formObject.getActionObject(code);\n arrayToAdd = this.subSectionActions;\n break;\n }\n if (elementObject) {\n elementObject.elementType = type;\n arrayToAdd.push(elementObject);\n this.subSectionElements.push(elementObject);\n this.elementsArray[code] = elementObject;\n }\n }\n }\n }\n\n show() { this.visible = true; }\n hide() { this.visible = false; }\n\n get customRender() { return this._customRender; }\n set customRender(customRenderName) { this._customRender = customRenderName; }\n\n getField(name) {\n return this.subSectionFields.find(fld => fld.name === name);\n }\n\n getFields() {\n return this.subSectionFields;\n }\n\n getFieldNames() {\n return this.subSectionFields.map(field => field.fieldCode);\n }\n\n viewOnState(state) {\n return this.visibleStates.includes(state);\n }\n\n supportMode(state) { return this.viewOnState(state); }\n}\n","import { Subject } from 'rxjs';\nimport { RecordFormSubSection } from './subsection';\n\nexport class RecordFormSection {\n private readonly _activation = new Subject<string>();\n private readonly _inactivation = new Subject<string>();\n visible: boolean;\n visibleStates: string[];\n\n active = false;\n sectionId: string;\n sectionCode: string;\n sectionTitle: string;\n\n subSections: RecordFormSubSection[];\n subSectionsObj: any;\n\n constructor(sectionReceived, formObject) {\n if (!sectionReceived) { return; }\n this.visible = true;\n this.sectionId = (sectionReceived.sectionId) ? sectionReceived.sectionId.toString() : '';\n this.sectionCode = (sectionReceived.sectionCode) ? sectionReceived.sectionCode : '';\n this.sectionTitle = (sectionReceived.sectionTitle) ? sectionReceived.sectionTitle : '';\n this.visibleStates = sectionReceived.visibleStates || [];\n this.subSections = [];\n this.subSectionsObj = {};\n if (sectionReceived.subsections) {\n const subsections = sectionReceived.subsections.map(objDef => {\n let visibleStates = objDef.visibleStates;\n if (!visibleStates) {\n visibleStates = (objDef.subsectionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0);\n }\n if (!visibleStates || visibleStates.length === 0) {\n visibleStates = this.visibleStates;\n }\n if (objDef.elements && Array.isArray(objDef.elements)) {\n objDef.elements = objDef.elements.map(elm => ({ code: elm.elementCode, type: elm.elementTypeName }));\n }\n return { ...objDef, visibleStates };\n });\n for (const subsectionReceived of subsections) {\n const subSectionToAdd = new RecordFormSubSection(subsectionReceived, formObject);\n const subsectionCode = subSectionToAdd.subsectionCode;\n if (subsectionCode) {\n this.subSections.push(subSectionToAdd);\n this.subSectionsObj[subsectionCode] = subSectionToAdd;\n }\n }\n }\n }\n\n get activation() { return this._activation; }\n get inactivation() { return this._inactivation; }\n\n activate() {\n if (!this.active) {\n this.active = true;\n this._activation.next(this.sectionCode);\n }\n }\n\n inactivate() {\n if (this.active) {\n this.active = false;\n this._inactivation.next(this.sectionCode);\n }\n }\n\n show() { this.visible = true; }\n hide() { this.visible = false; }\n get title() { return this.sectionTitle; }\n set title(title) { this.sectionTitle = title; }\n\n getVisibleSubsections(state) {\n return this.subSections.filter(subSection => {\n return subSection.visible && subSection.viewOnState(state);\n });\n }\n\n getSubsection(subSectionCode) {\n return (this.subSectionsObj && this.subSectionsObj[subSectionCode])\n ? this.subSectionsObj[subSectionCode] : null;\n }\n\n getFields() {\n let fieldsArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n fieldsArray = fieldsArray.concat(subSection.getFields());\n }\n }\n return fieldsArray;\n }\n\n getFieldNames() {\n let fieldsArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n fieldsArray = fieldsArray.concat(subSection.getFieldNames());\n }\n }\n return fieldsArray;\n }\n\n getField(name) {\n let field = null;\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n field = subSection.getField(name);\n if (field) {\n return field;\n }\n }\n }\n return null;\n }\n\n supportState(state) { return this.viewOnState(state); }\n viewOnState(state) { return this.visibleStates.includes(state); }\n supportMode(state) { return this.viewOnState(state); }\n}\n","import { Subject } from 'rxjs';\nimport { elementTypes } from './form.constants';\nimport { FormElement } from './element';\n\nconst HEADER = 'HEADER';\n\nexport class FormAction extends FormElement {\n private readonly _actionActivated = new Subject<string>();\n\n inProgress = false;\n newState: string;\n backend: boolean;\n\n actionCode: string;\n actionName: string;\n iconName: string;\n location: string;\n\n restrictedOnField: string;\n restrictedOnOperator: string;\n restrictedOnValue: string;\n customValidation: any;\n customAttributes: any;\n\n constructor(actionDefinition, formConfig) {\n super(actionDefinition, formConfig);\n this.elementType = elementTypes.action;\n this.actionCode = actionDefinition.actionCode ? actionDefinition.actionCode.toString() : '';\n this.actionName = actionDefinition.actionTitle;\n this.iconName = actionDefinition.iconName || this.actionCode;\n this.location = actionDefinition.position || HEADER;\n this.backend = actionDefinition?.serverAction ?? false;\n this.newState = actionDefinition?.newState;\n this.customAttributes = actionDefinition?.customAttributes ?? null;\n\n this.restrictedOnField = actionDefinition.fieldRestrictedCode ? actionDefinition.fieldRestrictedCode.toString() : '';\n this.restrictedOnOperator = actionDefinition.operatorRestricted || '';\n this.restrictedOnValue = actionDefinition.valueRestricted || '';\n this.customValidation = () => true;\n }\n\n get actionActivated() { return this._actionActivated; }\n\n start() { this.inProgress = true; }\n stop() { this.inProgress = false; }\n\n notifyActivation() { this._actionActivated.next(this.actionCode); }\n\n updateFromServer(receivedAction) {\n for (const propertyName in receivedAction) {\n if (propertyName !== 'actionCode' && propertyName !== 'actionId') {\n this[propertyName] = receivedAction[propertyName];\n }\n }\n }\n\n setCustomValidation(callback) { this.customValidation = () => callback(); }\n}\n","import { Subject } from 'rxjs';\nimport { elementTypes, NO_ERROR } from './form.constants';\nimport { FormElement } from './element';\nimport { formatCurrency } from '../utilities';\n\nconst UNDEFINED = 'undefined';\n\nconst DEFAULT_ERROR_TYPE = 'error';\nconst DEFAULT_CAPTURE_TYPE = 'INPUT';\nconst DEFAULT_ALIGNMENT = 'left';\n\nconst STD_MAX_LENGTH = 50;\nconst BIG_MAX_LENGTH = 500;\n\nconst fldAttr = {\n validateOnServer: 'validateOnServer',\n value: '_fieldValue',\n minValue: '_minValue',\n maxValue: '_maxValue',\n maxLength: '_maxLength',\n onValidation: '_onValidation',\n intrinsicErrorMessage: '_intrinsicErrorMessage',\n code: 'fieldCode',\n info: 'fieldInfo',\n defaultValue: 'defaultValue',\n defaultEditable: 'defaultEditable',\n customAttributes: 'customAttributes',\n visibleLabel: 'visibleLabel',\n required: 'fieldRequired',\n hasChanged: 'hasChanged',\n outputOnly: 'outputOnly',\n captureType: 'captureType',\n title: 'fieldTitle',\n type: 'fieldType',\n alignment: 'fieldAlignment',\n format: 'fieldFormat',\n externalValue: 'externalValue',\n tooltipText: 'tooltipText',\n errorType: 'errorType',\n errorCode: 'errorCode',\n errorMessage: 'errorMessage',\n options: 'fieldOptions',\n};\n\nexport class FieldDescriptor extends FormElement {\n private readonly _editionFinish = new Subject<any>();\n private readonly _editionPartial = new Subject<any>();\n private readonly _detailRequest = new Subject<string>();\n private readonly _attributeChange = new Subject<any>();\n\n private validateOnServer: boolean;\n\n _fieldValue: any;\n _minValue: any;\n _maxValue: any;\n _maxLength: number;\n _onValidation: boolean;\n _intrinsicErrorMessage: string;\n\n fieldCode: string;\n fieldInfo: string;\n defaultValue: string;\n defaultEditable: boolean;\n customAttributes: any;\n\n visibleLabel: boolean;\n fieldRequired: boolean;\n hasChanged: boolean;\n outputOnly: boolean;\n captureType: string;\n fieldTitle: string;\n fieldType: string;\n fieldAlignment: string;\n fieldFormat: RegExp;\n externalValue: any;\n tooltipText: string;\n\n errorType: string;\n errorCode: string;\n errorMessage: string;\n\n fieldOptions: {\n fieldOptionValue: string;\n fieldOptionId: string;\n }[];\n\n constructor(inputFieldReceived, formConfig) {\n super(inputFieldReceived, formConfig);\n this.elementType = elementTypes.field;\n const fld = (inputFieldReceived) ? inputFieldReceived : {};\n\n this.setAttr(fldAttr.code, fld.fieldCode);\n this.setAttr(fldAttr.title, fld.fieldTitle ?? this.fieldCode);\n this.setAttr(fldAttr.captureType, fld.captureType ?? DEFAULT_CAPTURE_TYPE);\n this.setAttr(fldAttr.defaultValue, fld.defaultValue ?? null);\n const defaultTypeAlignment = (this._formConfig.tableFieldStyles[this.fieldType] != null)\n ? this._formConfig.tableFieldStyles[this.fieldType]['text-align'] : DEFAULT_ALIGNMENT;\n const fieldAlignment = (fld.alignment != null) ? fld.alignment.toLowerCase() : defaultTypeAlignment;\n this.setAttr(fldAttr.alignment, fieldAlignment);\n this.setAttr(fldAttr.info, fld.info || '');\n let fieldFormat;\n try {\n fieldFormat = (fld.format) ? new RegExp(fld.format) : null;\n } catch (e) {\n fieldFormat = null;\n }\n this.setAttr(fldAttr.format, fieldFormat);\n\n this.setAttr(fldAttr.validateOnServer, fld.serverAction ?? false);\n this.setAttr(fldAttr.customAttributes, fld.customAttributes ?? {});\n\n this.setAttr(fldAttr.tooltipText, fld.tooltip || '');\n this.setAttr(fldAttr.defaultEditable, this.enabled);\n this.setAttr(fldAttr.required, fld.required ?? false);\n this.setError(fld.errorCode, fld.errorMessage, fld.errorType ?? DEFAULT_ERROR_TYPE);\n this.setAttr(fldAttr.outputOnly, fld.outputOnly ?? false);\n const maxLength = fld.maxLength ?? (this.captureType === 'TEXTAREA' ? BIG_MAX_LENGTH : STD_MAX_LENGTH);\n this.setAttr(fldAttr.maxLength, maxLength);\n this.setAttr(fldAttr.intrinsicErrorMessage, this._formConfig.fieldTypeErrMsg[this.fieldType] ?? this._formConfig.fieldTypeErrMsg.DEFAULT);\n\n this.setFieldType(fld.fieldTypeCode);\n this.setEditable(fld.editable ?? true);\n this.setVisibleLabel(fld.visibleLabel ?? true);\n this.setVisibility(fld.visible);\n this.setFieldOptions(fld.fieldOptions);\n this.setValue(fld.fieldValue || this.defaultValue || '');\n }\n\n get name() { return this.fieldCode; }\n get editionFinish() { return this._editionFinish; }\n get attributeChange() { return this._attributeChange; }\n\n get editionPartial() { return this._editionPartial; }\n get detailRequest() { return this._detailRequest; }\n\n get validating() { return this._onValidation; }\n set validating(isValidating: boolean) { this.setAttr(fldAttr.onValidation, isValidating); }\n\n setIntrinsicErrorMessage(message: string) { this.setAttr(fldAttr.intrinsicErrorMessage, message); }\n set intrinsicErrorMessage(message: string) { this.setIntrinsicErrorMessage(message); }\n\n get fieldValue() { return this.getValue(); }\n get required() { return this.fieldRequired; }\n set required(required: boolean) { this.setAttr(fldAttr.required, required ?? false); }\n get maxLength() { return (this._maxLength > 0) ? this._maxLength.toString() : ''; }\n set maxLength(requiredMaxLength: any) {\n if (typeof requiredMaxLength === 'string') {\n this.setAttr(fldAttr.maxLength, parseInt(requiredMaxLength, 10));\n } else if (typeof requiredMaxLength === 'number') {\n this.setAttr(fldAttr.maxLength, requiredMaxLength);\n }\n }\n get value() { return this.getValue(); }\n set value(newValue) { this.setValue(newValue); }\n\n notifyEditionPartial() {\n const intrinsicValidation = true;\n this._editionPartial.next({ code: this.fieldCode, intrinsicValidation });\n }\n\n notifyEditionFinish() {\n let intrinsicValidation = true;\n const fieldDefaultFormat = this._formConfig.fieldTypesPatterns?.[this.fieldType] ?? null;\n const fieldValue = this.getValue();\n if (fieldValue && (fieldDefaultFormat || this.fieldFormat)) {\n intrinsicValidation = (fieldDefaultFormat?.test(fieldValue) ?? true)\n && (this.fieldFormat?.test(fieldValue) ?? true);\n if (!intrinsicValidation) {\n this.setError('99', this._intrinsicErrorMessage);\n }\n }\n this._editionFinish.next({ code: this.fieldCode, intrinsicValidation });\n }\n\n setAttr(name: string, value: any) {\n this[name] = value;\n if (this._formConfig.monitoredFieldAttributes.includes(name)) {\n this._attributeChange.next({ name, value });\n }\n }\n\n notifyEditionDetailRequest() {\n this._detailRequest.next(this.fieldCode);\n }\n\n getCustomAttribute(name) { return this.customAttributes?.[name] ?? null; }\n\n setVisibleLabel(visibleLabel: boolean) { this.setAttr(fldAttr.visibleLabel, visibleLabel); }\n showLabel() { this.setVisibleLabel(true); }\n hideLabel() { this.setVisibleLabel(false); }\n\n setChanged(hasChanged: boolean) { this.setAttr(fldAttr.hasChanged, hasChanged); }\n changed() { this.setChanged(true); }\n\n getRawValue() { return this._fieldValue; }\n setLabel(label) { this.setAttr(fldAttr.title, label); }\n clean() { this.setValue(this.defaultValue || ''); }\n get backend() { return this.validateOnServer; }\n\n setEditable(editable: boolean = true) { (editable) ? this.enable() : this.disable(); }\n\n hasError() { return this.errorCode !== NO_ERROR; }\n resetError() { (this.errorCode !== NO_ERROR) && this.setError(NO_ERROR, null); }\n setError(code, message, type = DEFAULT_ERROR_TYPE) {\n this.setAttr(fldAttr.errorCode, code ?? NO_ERROR);\n this.setAttr(fldAttr.errorType, (this.errorCode === NO_ERROR) ? '' : type);\n this.setAttr(fldAttr.errorMessage, message ?? '');\n }\n\n getError() { return { type: this.errorType, code: this.errorCode, message: this.errorMessage }; }\n get error() { return this.getError(); }\n set error(errorObj) { this.setError(errorObj.code, errorObj.message, errorObj.type ?? DEFAULT_ERROR_TYPE) }\n\n getErrorCode() { return this.getError().code; }\n setErrorCode(code) { this.setError(code, this.errorMessage); }\n getErrorMessage() { return this.getError().message; }\n setErrorMessage(msg) { this.setError(this.errorCode, msg); }\n\n isEmpty() {\n const fieldCurrentValue = this.getValue();\n if (fieldCurrentValue === undefined || fieldCurrentValue === null) {\n return true;\n }\n if ((this.fieldType === this._formConfig.fieldTypes.array || this.fieldType === this._formConfig.fieldTypes.phone)\n && Array.isArray(fieldCurrentValue) && fieldCurrentValue.length === 0) {\n return true;\n };\n return fieldCurrentValue === '';\n }\n\n getValue() {\n switch (this.fieldType) {\n case this._formConfig.fieldTypes.boolean:\n return this._fieldValue ?? false;\n break;\n case this._formConfig.fieldTypes.check:\n return this._fieldValue ?? false;\n break;\n case this._formConfig.fieldTypes.currency:\n return (typeof this._fieldValue === 'string')\n ? this._fieldValue.replace(',', '') : this._fieldValue;\n break;\n default:\n return this._fieldValue;\n break;\n }\n }\n\n updateFromServer(fld) {\n const fieldKeys = Object.keys(fld);\n for (let index = 0; index < fieldKeys.length; index++) {\n const attrName = fieldKeys[index];\n const attrValue = fld[attrName];\n (attrName === this._formConfig.apiFieldAttrs.visible) && this.setVisibility(attrValue);\n (attrName === this._formConfig.apiFieldAttrs.labelVisible) && this.setVisibleLabel(fld.visibleLabel);\n (attrName === this._formConfig.apiFieldAttrs.required) && this.setAttr(fldAttr.required, fld.required ?? false);\n (attrName === this._formConfig.apiFieldAttrs.errorCode) && this.setAttr(fldAttr.errorCode, fld.errorCode);\n (attrName === this._formConfig.apiFieldAttrs.errorMessage) && this.setAttr(fldAttr.errorMessage, fld.errorMessage);\n (attrName === this._formConfig.apiFieldAttrs.tooltip) && this.setAttr(fldAttr.tooltipText, fld.tooltip);\n (attrName === this._formConfig.apiFieldAttrs.info) && this.setAttr(fldAttr.info, fld.info);\n (attrName === this._formConfig.apiFieldAttrs.editable) && this.setEditable(fld.editable);\n (attrName === this._formConfig.apiFieldAttrs.title) && this.setLabel(fld.fieldTitle.toString());\n (attrName === this._formConfig.apiFieldAttrs.value) && (this.setValue(fld.fieldValue) && this.setChanged(false));\n (attrName === this._formConfig.apiFieldAttrs.options) && this.setFieldOptions(fld.fieldOptions);\n (attrName === this._formConfig.apiFieldAttrs.captureType) && this.setAttr(fldAttr.captureType, fld.captureType || 'INPUT');\n (attrName === this._formConfig.apiFieldAttrs.type) && this.setFieldType(fld.fieldTypeCode);\n (attrName === this._formConfig.apiFieldAttrs.maxLength) && this.setAttr(fldAttr.maxLength, fld.maxLength);\n }\n }\n\n setFieldType(inputFieldType) {\n this.setAttr(fldAttr.type, inputFieldType);\n }\n\n format() {\n if (this.fieldType === this._formConfig.fieldTypes.currency) {\n this.setAttr(fldAttr.value, formatCurrency(this._fieldValue));\n }\n }\n\n setMinValue(minValue) {\n if (this.fieldType === this._formConfig.fieldTypes.date\n && this.widget?.setMinValue) {\n this.setAttr(fldAttr.minValue, minValue);\n if (!minValue) {\n this.widget?.setMinValue(false);\n } else {\n const minDate = new Date(minValue);\n this.widget?.setMinValue(minDate);\n }\n }\n }\n\n setMaxValue(maxValue) {\n if (this.fieldType === this._formConfig.fieldTypes.date\n && this.widget?.setMaxValue) {\n this.setAttr(fldAttr.maxValue, maxValue);\n if (!maxValue) {\n this.widget?.setMaxValue(false);\n } else {\n const maxDate = new Date(maxValue);\n this.widget?.setMaxValue(maxDate);\n }\n }\n }\n\n getFieldOptions() {\n return JSON.parse(JSON.stringify(this.fieldOptions));\n }\n\n setFieldOptions(newOptions) {\n if ((this.captureType !== 'LIST' && this.captureType !== 'RADIO')\n || typeof newOptions === UNDEFINED || !newOptions\n || !Array.isArray(newOptions)) {\n return;\n }\n let fieldOptions = newOptions.map(option => {\n if (option.text !== undefined && option.text !== null\n && option.value !== undefined && option.value !== null) {\n return { fieldOptionValue: option.text, fieldOptionId: option.value };\n }\n return { ...option };\n });\n fieldOptions = (fieldOptions && Array.isArray(fieldOptions)\n && fieldOptions.length > 0) ? fieldOptions : [];\n this.setAttr(fldAttr.options, fieldOptions);\n if (this.fieldType === this._formConfig.fieldTypes.array && this.widget) {\n return this.widget?.refereshContent();\n }\n if (this._fieldValue) {\n if (this.fieldType === this._formConfig.fieldTypes.array && Array.isArray(this._fieldValue)) {\n const fieldValue = this._fieldValue?.filter(item =>\n this.fieldOptions.find(opt => opt.fieldOptionId === item)\n );\n this.setAttr(fldAttr.value, fieldValue);\n } else {\n const valInOptions = this.fieldOptions\n .find(item => item.fieldOptionId === this._fieldValue);\n if (!valInOptions) {\n this.setValue('');\n }\n }\n }\n if (this.fieldRequired && this.fieldOptions.length === 1) {\n this.setValue(this.fieldOptions[0].fieldOptionId);\n if (this.widget?.onChangeContent) {\n this.widget?.onChangeContent();\n }\n }\n }\n\n setValue(newValue, widgetUpdate = true) {\n if (typeof newValue === UNDEFINED || newValue === null) {\n return true;\n }\n let newFinalValue;\n switch (this.fieldType) {\n case 'BOOLEAN':\n newFinalValue = !!newValue;\n break;\n case this._formConfig.fieldTypes.boolean:\n newFinalValue = !!newValue;\n break;\n case this._formConfig.fieldTypes.check:\n newFinalValue = !!newValue;\n break;\n case this._formConfig.fieldTypes.array:\n if (newValue === null || newValue === '') {\n newFinalValue = [];\n } else if (!Array.isArray(newValue)) {\n if (typeof (newValue) !== 'string') {\n newValue = newValue.toString();\n }\n newFinalValue = newValue.split(',');\n } else {\n newFinalValue = newValue;\n }\n break;\n case this._formConfig.fieldTypes.map:\n newFinalValue = newValue;\n if (newFinalValue && this.widget && widgetUpdate) {\n const latitude = parseFloat(newFinalValue[0]);\n const longitude = parseFloat(newFinalValue[1]);\n this.widget?.setLocation(latitude, longitude);\n }\n break;\n case this._formConfig.fieldTypes.currency:\n newFinalValue = formatCurrency(newValue);\n break;\n default:\n newFinalValue = newValue;\n break;\n }\n if (this._fieldValue !== newFinalValue) {\n this.setChanged(true);\n this.setAttr(fldAttr.value, newFinalValue);\n }\n return true;\n }\n}\n","import { RecordFormSection } from './section';\nimport { FormAction } from './action';\nimport { FieldDescriptor } from './field';\nimport { RecordTable } from './table/table';\nimport { NO_ERROR, HEADER } from './form.constants';\n\ninterface Transition {\n name: string;\n source: string;\n destination: string;\n}\n\ninterface StateFlow {\n defaultState: string;\n states: string[];\n transitions: Transition[];\n}\n\nexport class FormStructureAndData {\n state: string;\n _name: string;\n _formConfig: any;\n private _title: string;\n private _stateFlow: StateFlow;\n private _fields: FieldDescriptor[];\n private _fieldsObj = {};\n private _actions: FormAction[];\n private _actionsObj = {};\n private _tables: RecordTable[];\n private _tableObj = {};\n private _sections: RecordFormSection[];\n private _sectionsObj = {};\n private _immutableData = {};\n private _extraInfo = {};\n\n constructor(definitionReceived, formConfig) {\n this._formConfig = formConfig;\n this.state = '';\n this._actions = [];\n this._fields = [];\n this._tables = [];\n this._sections = [];\n this._stateFlow = {\n defaultState: '',\n states: [],\n transitions: [],\n };\n if (!definitionReceived) { return; }\n this._name = (definitionReceived.form && definitionReceived.form.formCode)\n ? definitionReceived.form.formCode : this._name;\n this._title = (definitionReceived.form && definitionReceived.form.formTitle)\n ? definitionReceived.form.formTitle : '';\n this.setStateFlow(definitionReceived?.states, definitionReceived?.transitions,\n definitionReceived?.defaultState);\n this.immutableData = definitionReceived.immutableData;\n this.extraInfo = definitionReceived.extraInfo;\n\n if (definitionReceived.actions) {\n const formActions = definitionReceived.actions.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates;\n if (!visibleStates) {\n visibleStates = (objDef.actionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n enabledStates = [...visibleStates];\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const actionReceived of formActions) {\n const globalAction = new FormAction(actionReceived, this._formConfig);\n const globalActionCode = globalAction.actionCode;\n if (globalActionCode) {\n this._actions.push(globalAction);\n this._actionsObj[globalActionCode] = globalAction;\n }\n }\n }\n\n if (definitionReceived.fields) {\n const formFields = definitionReceived.fields.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates || objDef.editableStates;\n if (!visibleStates) {\n visibleStates = (objDef.fieldModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n enabledStates = [...visibleStates];\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const fieldReceived of formFields) {\n const fieldToAdd = new FieldDescriptor(fieldReceived, this._formConfig);\n const fieldCode = fieldToAdd.fieldCode;\n if (fieldCode) {\n this._fields.push(fieldToAdd);\n this._fieldsObj[fieldCode] = fieldToAdd;\n }\n }\n }\n\n if (definitionReceived.tables) {\n const tables = definitionReceived.tables.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates || objDef.editableStates;\n if (!visibleStates) {\n visibleStates = (objDef.tableModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n enabledStates = [...visibleStates];\n }\n if (!visibleStates || visibleStates.length === 0) {\n visibleStates = this._formConfig.defaultStateFlow.states;\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const tableReceived of tables) {\n const tableToAdd = new RecordTable(tableReceived, this._formConfig);\n const tableCode = tableToAdd.tableCode;\n if (tableCode) {\n this._tables.push(tableToAdd);\n this._tableObj[tableCode] = tableToAdd;\n }\n }\n }\n\n if (definitionReceived.sections) {\n const formSections = definitionReceived.sections.map(objDef => {\n let visibleStates = objDef.visibleStates;\n if (!visibleStates) {\n visibleStates = (objDef.sectionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n }\n return { ...objDef, visibleStates };\n });\n for (const sectionReceived of formSections) {\n const sectionToAdd = new RecordFormSection(sectionReceived, this);\n const sectionCode = sectionToAdd.sectionCode;\n if (sectionCode) {\n this._sections.push(sectionToAdd);\n this._sectionsObj[sectionCode] = sectionToAdd;\n }\n }\n }\n }\n\n set immutableData(immutableData) { Object.assign(this._immutableData, immutableData); }\n set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }\n\n get defaultState() { return this._stateFlow.defaultState; }\n get title() { return this._title; }\n set title(title) { this._title = title; }\n get name() { return this._name; }\n set name(name) { this._name = name; }\n\n changeState(newState) {\n if (!newState || !this.supportState(newState)) {\n return false;\n }\n if (!this.state) {\n this.state = newState;\n } else {\n const transitionToChange = this._stateFlow.transitions.find(trns =>\n trns.source === this.state && trns.destination === newState);\n if (transitionToChange) {\n this.state = newState;\n }\n }\n return (this.state === newState);\n }\n\n setStateFlow(states?, transitions?, defaultState?) {\n if (!states || !transitions) {\n this._stateFlow = JSON.parse(JSON.stringify(this._formConfig.defaultStateFlow));\n return;\n }\n this._stateFlow.states = states;\n this._stateFlow.defaultState = defaultState || this._stateFlow.states[0];\n this._stateFlow.transitions = transitions.map(transition => {\n const name = transition.name;\n const source = (this._stateFlow.states.includes(transition.source)) ? transition.source : '';\n const destination = (this._stateFlow.states.includes(transition.destination)) ? transition.destination : '';\n return { name, source, destination };\n }).filter(item => item.name && item.source && item.destination);\n }\n\n supportState(state) { return this._stateFlow.states?.includes(state); }\n supportMode(state) { return this.supportState(state); }\n\n\n get immutableData() {\n const data = {};\n const objectNames = Object.keys(this._immutableData);\n for (let index = 0; index < objectNames.length; index++) {\n const name = objectNames[index];\n data[name] = this.getImmutableElement(name);\n }\n return data;\n }\n\n getImmutableElement(name) { return this._immutableData?.[name]?.value ?? null; }\n getExtraInfo(name) { return this._extraInfo?.[name]?.value ?? null; }\n\n get extraInfo() {\n const data = {};\n const objectNames = Object.keys(this._extraInfo);\n for (let index = 0; index < objectNames.length; index++) {\n const name = objectNames[index];\n data[name] = this.getExtraInfo(name);\n }\n return data;\n }\n\n getFields() { return this._fields; }\n\n getStates() {\n return this._stateFlow.states;\n }\n\n getFieldNames() {\n return this._fields.map(field => field.fieldCode);\n }\n\n getActions() {\n return this._actions;\n }\n\n getHeaderActions() {\n return this._actions.filter(actionItem => actionItem.location === HEADER);\n }\n\n getFieldObject(elementId) {\n return (this._fieldsObj && elementId && this._fieldsObj[elementId])\n ? this._fieldsObj[elementId] : null;\n }\n\n getTableObject(elementId) {\n return (this._tableObj && elementId && this._tableObj[elementId])\n ? this._tableObj[elementId] : null;\n }\n\n getActionObject(elementId) {\n return (this._actionsObj && elementId && this._actionsObj[elementId])\n ? this._actionsObj[elementId] : null;\n }\n\n getSubSection(sectionCode, subsectionCode) {\n const section = (this._sectionsObj && this._sectionsObj[sectionCode])\n ? this._sectionsObj[sectionCode] : null;\n return (section) ? section.getSubsection(subsectionCode) : null;\n }\n\n get actions() { return this._actionsObj; }\n\n getSection(sectionCode) {\n return (this._sectionsObj && this._sectionsObj[sectionCode])\n ? this._sectionsObj[sectionCode] : null;\n }\n sections() { return this.getSections(); }\n sectionTitles() { return this.getSectionsTitles(); }\n\n getSections() {\n return this._sections;\n }\n\n get visibleSections() {\n return this._sections.filter(sec => sec.visible);\n }\n\n numSections() {\n return this._sections.length;\n }\n\n getSectionsTitles() {\n return this._sections.map(formSection => formSection.sectionTitle);\n }\n\n getSectionObject(elementId) {\n return (this._sectionsObj && elementId && this._sectionsObj[elementId])\n ? this._sectionsObj[elementId] : null;\n }\n tables() { return this.getTables(); }\n\n getTables() {\n return this._tables;\n }\n\n cleanData() {\n if (this._fields) {\n for (const recordField of this._fields) {\n recordField.setValue(recordField.defaultValue);\n }\n }\n if (this._tables) {\n for (const formTable of this._tables) {\n formTable.clean();\n }\n }\n }\n\n showSection(sectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n return (sectionObject) ? sectionObject.show() : null;\n }\n\n hideSection(sectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n return (sectionObject) ? sectionObject.hide() : null;\n }\n\n activeSection() {\n const activeSection = this._sections.find(sectionObj => sectionObj.active);\n return activeSection.sectionCode;\n }\n\n activateSection(sectionCode) {\n this._sections.forEach(sectionObj => {\n if (sectionObj) { sectionObj.inactivate(); }\n });\n const sectionObject = this.getSectionObject(sectionCode);\n return (sectionObject) ? sectionObject.activate() : null;\n }\n\n showSections(sectionArray) {\n const sectionNames = (Array.isArray(sectionArray)) ? sectionArray : [sectionArray];\n sectionNames.forEach(sectionCode => this.showSection(sectionCode));\n }\n\n hideSections(sectionArray) {\n const sectionNames = (Array.isArray(sectionArray)) ? sectionArray : [sectionArray];\n sectionNames.forEach(sectionCode => this.hideSection(sectionCode));\n }\n\n showSubSection(sectionCode, subSectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n return (subSectionObject) ? subSectionObject.show() : null;\n }\n\n hideSubSection(sectionCode, subSectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n return (subSectionObject) ? subSectionObject.hide() : null;\n }\n\n showSubSections(sectionCode, subSectionArray) {\n if (subSectionArray && subSectionArray.length > 0) {\n const sectionObject = this.getSectionObject(sectionCode);\n for (const subSectionCode of subSectionArray) {\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n if (subSectionObject) { subSectionObject.show(); }\n }\n }\n }\n\n hideSubSections(sectionCode, subSectionArray) {\n if (subSectionArray && subSectionArray.length > 0) {\n const sectionObject = this.getSectionObject(sectionCode);\n for (const subSectionCode of subSectionArray) {\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n if (subSectionObject) { subSectionObject.hide(); }\n }\n }\n }\n\n showAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.show() : null;\n }\n\n hideAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.hide() : null;\n }\n\n showActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.showAction(actionCode));\n }\n\n hideActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.hideAction(actionCode));\n }\n\n enableAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.enable() : null;\n }\n\n disableAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.disable() : null;\n }\n\n enableActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.enableAction(actionCode));\n }\n\n disableActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.disableAction(actionCode));\n }\n\n get fields() { return this._fieldsObj; }\n\n enableField(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.enable() : null;\n }\n\n disableField(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.disable() : null;\n }\n\n getFieldValue(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.getValue() : null;\n }\n\n getFieldsValues(fieldCodesArray) {\n if (!fieldCodesArray || !Array.isArray(fieldCodesArray) || fieldCodesArray.length === 0) {\n return null;\n }\n const resultObject = {};\n for (let index = 0; index < fieldCodesArray.length; index++) {\n const fieldCode = fieldCodesArray[index];\n if (fieldCode) {\n resultObject[fieldCode] = this._fieldsObj?.[fieldCode]?.getValue() ?? null;\n }\n }\n return resultObject;\n }\n\n getFieldOptions(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.getFieldOptions() : null;\n }\n\n setFieldValue(fieldCode, fieldValue) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.setValue(fieldValue) : null;\n }\n\n setFieldError(code, message, type = 'error') {\n const fieldObject = this.getFieldObject(code);\n return (fieldObject) ? fieldObject.setError(code, message, type) : null;\n }\n\n setFieldIntrinsicErrorMessage(code, message) {\n const fieldObject = this.getFieldObject(code);\n return (fieldObject) ? fieldObject.setIntrinsicErrorMessage(message) : null;\n }\n\n setFieldRequired(fieldCode, required) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.required = required : null;\n }\n\n setFieldErrorMessage(fieldCode, errorMessage) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.setErrorMessage(errorMessage) : null;\n }\n\n setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {\n const fieldObject = this.getFieldObject(fieldCode);\n if (fieldObject && optionsArray && optionsArray.length > 0) {\n const fieldOptions = [];\n for (const optionItem of optionsArray) {\n const fieldOption = {\n fieldOptionId: optionItem[idAttribute],\n fieldOptionValue: optionItem[nameAttribute]\n };\n fieldOptions.push(fieldOption);\n }\n fieldObject.setFieldOptions(fieldOptions);\n }\n }\n\n getFieldSet(filterFunc, fieldArray = null, sectionCode = null, subSectionCode = null) {\n let fieldUniverse = null;\n if (fieldArray && Array.isArray(fieldArray) && fieldArray.length > 0) {\n fieldUniverse = fieldArray;\n } else if (sectionCode && !subSectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n fieldUniverse = sectionObject?.getFieldNames();\n } else if (sectionCode && subSectionCode) {\n const subSectionObject = this.getSubSection(sectionCode, subSectionCode);\n fieldUniverse = subSectionObject?.getFieldNames();\n } else {\n fieldUniverse = this.getFieldNames();\n }\n if (!filterFunc) {\n return fieldUniverse;\n }\n return fieldUniverse.filter(fld => {\n const fieldObject = this.getFieldObject(fld);\n return (fieldObject && filterFunc(fieldObject));\n });\n }\n\n applyProcessToFieldSet(processFunc, fieldArray = null, sectionCode = null, subSectionCode = null) {\n const fieldUniverse = this.getFieldSet(null, fieldArray, sectionCode, subSectionCode);\n let fieldSetSize = 0;\n if (fieldUniverse && processFunc) {\n for (const fieldCode of fieldUniverse) {\n const fieldObject = this.getFieldObject(fieldCode);\n if (fieldObject) {\n try {\n processFunc(fieldObject);\n fieldSetSize += 1;\n } catch (e) {\n console.log(`Error procesando funcion en campo ${fieldObject}: ${e}`);\n }\n }\n }\n }\n return fieldSetSize;\n }\n\n showFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.show(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n hideFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.hide(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n showLabelFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.showLablel(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n hideLabelFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.hideLabel(),\n fieldArray, sectionCode, subSectionCode);\n }\n // Para deprecar\n enableEditFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.enableFields(fieldArray, sectionCode, subSectionCode);\n }\n // Para deprecar\n disableEditFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.disableFields(fieldArray, sectionCode, subSectionCode);\n }\n\n enableFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.enable(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n disableFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.disable(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n cleanFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fieldObject => {\n fieldObject.clean('');\n fieldObject.setErrorMessage('');\n }, fieldArray, sectionCode, subSectionCode);\n }\n\n getRequiredFields(fieldArray, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => fld.fieldRequired, fieldArray,\n sectionCode, subSectionCode);\n }\n\n getRequiredEmptyFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => fld.fieldRequired && fld.isEmpty(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n getChangedFields(fieldArray, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => !fld.outputOnly && fld.hasChanged(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n getFieldsWithValidationIssues(fieldArray, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => fld.errorCode !== NO_ERROR,\n fieldArray, sectionCode, subSectionCode);\n }\n\n tagFieldsWithError(errorMessage, fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fieldObject => {\n fieldObject.setErrorMessage(errorMessage);\n }, fieldArray, sectionCode, subSectionCode);\n }\n\n cleanErrorFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n this.tagFieldsWithError('', fieldArray, sectionCode, subSectionCode);\n }\n\n tagEmptyRequiredFields(errorMessage, fieldArray = null, sectionCode = null, subSectionCode = null) {\n const pendingFields = this.getRequiredEmptyFields(fieldArray, sectionCode, subSectionCode);\n if (pendingFields && pendingFields.length > 0) {\n this.tagFieldsWithError(errorMessage, pendingFields);\n return true;\n }\n return false;\n }\n\n cleanTable(tableCode) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.clean() : null;\n }\n\n getTableRecord(tableCode, recordId) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.getTableRecord(recordId) : null;\n }\n\n hideTable(tableCode) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.hide() : null;\n }\n\n showTable(tableCode) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.show() : null;\n }\n\n showTables(tableArray) {\n const tableNames = (Array.isArray(tableArray)) ? tableArray : [tableArray];\n tableNames.forEach(tableCode => this.showTable(tableCode));\n }\n\n hideTables(tableArray) {\n const tableNames = (Array.isArray(tableArray)) ? tableArray : [tableArray];\n tableNames.forEach(tableCode => this.hideTable(tableCode));\n }\n\n /** payload para servicios Tuain */\n getPayload() {\n const formData = {\n fields: [],\n tables: [],\n };\n const formFields = this.getFields();\n if (formFields && formFields.length > 0) {\n for (const fieldDescriptor of formFields) {\n if (!fieldDescriptor.outputOnly) {\n const formField = {\n fieldCode: fieldDescriptor.fieldCode,\n fieldValue: fieldDescriptor.getValue(),\n editable: !fieldDescriptor.disabled,\n visible: fieldDescriptor.visible,\n required: fieldDescriptor.fieldRequired,\n fieldOptions: '',\n };\n formData.fields.push(formField);\n }\n }\n }\n const tables = this.getTables();\n if (tables && tables.length > 0) {\n for (const tableDescriptor of tables) {\n const formTable = {\n tableCode: tableDescriptor.tableCode,\n visible: tableDescriptor.visible,\n currentPage: tableDescriptor.currentPage,\n requestedPage: tableDescriptor.requestedPage,\n recordsPerPage: tableDescriptor.recordsPerPage,\n currentFilter: tableDescriptor.currentFilter,\n sortingColumn: tableDescriptor.sorting.columnName,\n sortingDirection: tableDescriptor.sorting.direction,\n };\n formData.tables.push(formTable);\n }\n }\n return formData;\n }\n}\n","import { nanoid } from 'nanoid';\n\nexport class LibFormManagerService {\n pageStack: any[];\n\n constructor() {\n this.cleanStack();\n }\n\n // Métodos virtuales para las aplicaciones\n getFormDefinition(formCode) { }\n execServerAction(actionDetail) { }\n goToForm(formCode, token, subject) { }\n loadStack() { }\n saveStack() { }\n\n cleanStack() { this.pageStack = []; }\n resetPageStack() { this.cleanStack() }\n\n findFormInStack(token) {\n const index = this.pageStack.findIndex(item => item?.token === token);\n const data = (index >= 0) ? this.pageStack[index] : null;\n return { index, data };\n }\n\n replaceItem(token, formInfo) {\n if (!token || !formInfo) { return; }\n const { index, data: storedForm } = this.findFormInStack(token);\n let updatedForm: any = null;\n if (index >= 0) {\n updatedForm = { ...storedForm };\n updatedForm.subject = formInfo?.subject ?? storedForm.subject;\n updatedForm.state = formInfo?.state ?? storedForm.state;\n Object.assign(updatedForm.fields, formInfo.fields);\n Object.assign(updatedForm.extra, formInfo.extra);\n this.pageStack[index] = updatedForm;\n this.saveStack();\n }\n }\n\n stack(origin, target) {\n const token = nanoid(6);\n this.replaceItem(target.originToken, origin);\n this.pageStack.push({ token, ...target });\n this.saveStack();\n return token;\n }\n\n unstack(token = null) {\n let index = (token) ? this.findFormInStack(token).index : this.pageStack.length - 2;\n let formInfo = null;\n if (index >= 0) {\n formInfo = this.pageStack[index];\n this.pageStack.splice(index + 1);\n this.saveStack();\n }\n return formInfo;\n }\n\n getFormInfo(token: string) {\n const { data } = this.findFormInStack(token);\n return {\n token: data?.token,\n subject: data?.subject,\n state: data?.state,\n originToken: data?.originToken,\n fields: data?.fields ?? {},\n extra: data?.extra ?? {}\n };\n }\n\n openForm(origin: any, target: any) {\n (!origin) && this.cleanStack();\n target.originToken = origin?.token ?? null;\n const token = this.stack(origin, target);\n this.goToForm(target.name, token, target.subject);\n }\n\n backTo(targetToken = null) {\n const formInfo = this.unstack(targetToken);\n formInfo && formInfo.name && this.goToForm(formInfo.name, formInfo.token, formInfo.subject);\n }\n}\n","import { ReplaySubject } from 'rxjs';\n\nexport class LibEventManagerService {\n eventSubjects: any = {};\n\n constructor(eventNames) {\n eventNames.forEach((name) => { this.addEventName(name); });\n }\n\n addEventName(name) {\n if (!this.eventSubjects[name]) {\n const newEventSubject: ReplaySubject<any> = new ReplaySubject(1);\n this.eventSubjects[name] = newEventSubject;\n }\n }\n\n getEventNames() { return Object.keys(this.eventSubjects); }\n getSubject(eventClassName) { return eventClassName ? this.eventSubjects[eventClassName] : null; }\n subscribe(eventClassName, callback) { this.getSubject(eventClassName).subscribe(callback); }\n next(eventClassName, data) { this.getSubject(eventClassName).next(data); }\n}\n","export class LibFileManagementService {\n openFile(fileBase64Data, fileName, fileType) { }\n saveFileFromURL(fileUrl, fullFileName = null) { }\n saveFile(fileBase64Data, fileName, fileType) { }\n}\n\n","import { Component } from '@angular/core';\nimport { FormStructureAndData } from '../../classes/forms/form';\nimport { LibFormManagerService } from '../../services/form-manager.service';\nimport { LibEventManagerService } from '../../services/event-manager.service';\nimport { LibFileManagementService } from '../../services/file-manager.service';\nimport { formActions, NO_ERROR } from '../../classes/forms/form.constants';\n\nconst PAYLOAD_VERSION = 'TUAINEXCHANGE_1.0';\nconst INLINE_ACTION = 'INLINE';\nconst GLOBAL_ACTION = 'GLOBAL';\nconst GET_DATA_ACTION = 'GETDATA';\n\nconst SUBJECT = 'subject';\nconst TOKEN = 'token';\n\n@Component({\n template: `<ng-content></ng-content>`\n})\nexport class BasicFormComponent {\n formConfig: any;\n name: string;\n _formRoute: string;\n formSubject: string;\n _errorType: '';\n errorCode = '';\n errorMessage = '';\n errorDetail = '';\n\n formStructure: FormStructureAndData = null;\n fields: any;\n actions: any;\n\n controlToken = null;\n originToken: string;\n inputDataFields = {};\n extraData: any = {};\n\n definitionObtained = false;\n formVisible = false;\n busy = false;\n\n formSectionsActivate = {};\n formSectionsInactivate = {};\n formActionsStart = {};\n formActionsFinish = {};\n fieldInputValidation = {};\n fieldValidationsStart = {};\n fieldValidationsFinish = {};\n // Callback de acciones de tablas\n tableSelectionsStart = {};\n tableSelectionsFinish = {};\n tableActionsStart = {};\n tableActionsFinish = {};\n tableGetDataStart = {};\n tableGetDataFinish = {};\n\n protected _eventEmiter: LibEventManagerService;\n\n constructor(\n protected formManagerService: LibFormManagerService,\n protected _eventManager: LibEventManagerService,\n protected fileMgmtServices: LibFileManagementService) {\n this._eventEmiter = this._eventManager;\n this.cleanStart();\n this.customPreProcessing();\n }\n\n get inServerProcess() { return this.busy; }\n\n setConfig(formConfig) {\n this.formConfig = formConfig;\n }\n\n cleanStart() {\n this._errorType = '';\n this.errorCode = '';\n this.errorMessage = '';\n this.errorDetail = '';\n this.formStructure = null;\n this.fields = null;\n this.actions = null;\n this.controlToken = null;\n this.inputDataFields = {};\n this.definitionObtained = false;\n // Se limpian los manejadores de eventos\n this.formVisible = false;\n this.busy = false;\n this.formSectionsActivate = {};\n this.formSectionsInactivate = {};\n this.formActionsStart = {};\n this.formActionsFinish = {};\n this.fieldInputValidation = {};\n this.fieldValidationsStart = {};\n this.fieldValidationsFinish = {};\n this.tableSelectionsStart = {};\n this.tableSelectionsFinish = {};\n this.tableActionsStart = {};\n this.tableActionsFinish = {};\n this.tableGetDataStart = {};\n this.tableGetDataFinish = {};\n }\n\n get form() { return this.formStructure; }\n\n get currentState() { return this.formStructure.state; }\n set currentState(state) { this.formStructure.changeState(state); }\n get currentMode() { return this.currentState; }\n get immutableData() { return this.formStructure.immutableData }\n get extraInfo() { return this.formStructure.extraInfo }\n\n // Métodos Pass-through hacia el contenido y estructura del formulario\n supportState(state) { return this.formStructure.supportState(state); }\n supportMode(state) { return this.supportState(state); }\n getTitle() { return this.formStructure.title; }\n setTitle(title: string) { this.formStructure.title = title; }\n getImmutableElement(name) { return this.formStructure.getImmutableElement(name); }\n getExtraInfo(name) { return this.formStructure.getExtraInfo(name); }\n cleanData() { return this.formStructure.cleanData(); }\n getFields() { return this.formStructure.getFields(); }\n getFieldNames() { return this.formStructure.getFieldNames(); }\n getFieldObject(elementId) { return this.formStructure.getFieldObject(elementId); }\n getField(fieldCode) { return this.getFieldObject(fieldCode); }\n enableField(fieldCode) { return this.formStructure.enableField(fieldCode); }\n disableField(fieldCode) { return this.formStructure.disableField(fieldCode); }\n getFieldValue(fieldCode) { return this.formStructure.getFieldValue(fieldCode); }\n getFieldsValues(fieldCodesArray) { return this.formStructure.getFieldsValues(fieldCodesArray); }\n getFieldOptions(fieldCode) { return this.formStructure.getFieldOptions(fieldCode); }\n setFieldValue(fieldCode, fieldValue) { return this.formStructure.setFieldValue(fieldCode, fieldValue); }\n setFieldRequired(fieldCode, required: boolean) { return this.formStructure.setFieldRequired(fieldCode, required); }\n setFieldErrorMessage(fieldCode, errorMessage) { return this.formStructure.setFieldErrorMessage(fieldCode, errorMessage); }\n setFieldError(code, message, type = 'error') { return this.formStructure.setFieldError(code, message, type); }\n setFieldIntrinsicErrorMessage(code, message) { return this.formStructure.setFieldIntrinsicErrorMessage(code, message); }\n\n setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {\n return this.formStructure.setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute);\n }\n getFieldSet(filterFunc?, fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getFieldSet(filterFunc, fieldArray, sectionCode, subSectionCode);\n }\n applyProcessToFieldSet(processFunc, fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.applyProcessToFieldSet(processFunc, fieldArray, sectionCode, subSectionCode);\n }\n applyProcessToAllFields(processFunc) { return this.formStructure.applyProcessToFieldSet(processFunc); }\n cleanFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.cleanFields(fieldArray, sectionCode, subSectionCode);\n }\n getRequiredFields(fieldArray, sectionCode?, subSectionCode?) {\n return this.formStructure.getRequiredFields(fieldArray, sectionCode, subSectionCode);\n }\n getRequiredEmptyFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getRequiredEmptyFields(fieldArray, sectionCode, subSectionCode);\n }\n getChangedFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getChangedFields(fieldArray, sectionCode, subSectionCode);\n }\n getFieldsWithValidationIssues(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getFieldsWithValidationIssues(fieldArray, sectionCode, subSectionCode);\n }\n tagFieldsWithError(errorMessage, fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.tagFieldsWithError(errorMessage, fieldArray, sectionCode, subSectionCode);\n }\n cleanErrorFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.cleanErrorFields(fieldArray, sectionCode, subSectionCode);\n }\n showLabelFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.showLabelFields(fieldArray, sectionCode, subSectionCode);\n }\n hideLabelFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.hideLabelFields(fieldArray, sectionCode, subSectionCode);\n }\n enableFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.enableFields(fieldArray, sectionCode, subSectionCode);\n }\n disableFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.disableFields(fieldArray, sectionCode, subSectionCode);\n }\n enableEditFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.enableEditFields(fieldArray, sectionCode, subSectionCode);\n }\n disableEditFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.disableEditFields(fieldArray, sectionCode, subSectionCode);\n }\n showFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.showFields(fieldArray, sectionCode, subSectionCode);\n }\n hideFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.hideFields(fieldArray, sectionCode, subSectionCode);\n }\n\n getHeaderActions() { return this.formStructure.getHeaderActions(); }\n getActionObject(elementId) { return this.formStructure.getActionObject(elementId); }\n getAction(actionCode) { return this.getActionObject(actionCode); }\n getActionDefinition(actionCode) { return this.getActionObject(actionCode); }\n showAction(actionCode) { return this.formStructure.showAction(actionCode); }\n hideAction(actionCode) { return this.formStructure.hideAction(actionCode); }\n showActions(actionArray) { return this.formStructure.showActions(actionArray); }\n hideActions(actionArray) { return this.formStructure.hideActions(actionArray); }\n enableAction(actionCode) { return this.formStructure.enableAction(actionCode); }\n disableAction(actionCode) { return this.formStructure.disableAction(actionCode); }\n enableActions(actionArray) { return this.formStructure.enableActions(actionArray); }\n disableActions(actionArray) { return this.formStructure.disableActions(actionArray); }\n\n getStates() { return this.formStructure.getStates(); }\n getSections() { return this.formStructure.getSections(); }\n get visibleSections() { return this.formStructure.visibleSections; }\n\n getSection(sectionCode) { return this.formStructure.getSection(sectionCode); }\n activateSection(sectionCode) { return this.formStructure.activateSection(sectionCode); }\n getSubSection(sectionCode, subsectionCode) { return this.formStructure.getSubSection(sectionCode, subsectionCode); }\n numSections() { return this.formStructure.numSections(); }\n getSectionsTitles() { return this.formStructure.getSectionsTitles(); }\n getSectionObject(elementId) { return this.formStructure.getSectionObject(elementId); }\n showSection(sectionCode) { return this.formStructure.showSection(sectionCode); }\n hideSection(sectionCode) { return this.formStructure.hideSection(sectionCode); }\n showSections(sectionArray) { return this.formStructure.showSections(sectionArray); }\n hideSections(sectionArray) { return this.formStructure.hideSections(sectionArray); }\n showSubSection(sectionCode, subSectionCode) { return this.formStructure.showSubSection(sectionCode, subSectionCode); }\n hideSubSection(sectionCode, subSectionCode) { return this.formStructure.hideSubSection(sectionCode, subSectionCode); }\n showSubSections(sectionCode, subSectionArray) { return this.formStructure.showSubSections(sectionCode, subSectionArray); }\n hideSubSections(sectionCode, subSectionArray) { return this.formStructure.hideSubSections(sectionCode, subSectionArray); }\n\n getTables() { return this.formStructure.getTables(); }\n getTableObject(elementId) { return this.formStructure.getTableObject(elementId); }\n getTable(tableName) { return this.getTableObject(tableName); }\n showTable(tableName) { return this.formStructure.showTable(tableName); }\n hideTable(tableName) { return this.formStructure.hideTable(tableName); }\n showTables(tableArray) { return this.formStructure.showTables(tableArray); }\n hideTables(tableArray) { return this.formStructure.hideTables(tableArray); }\n cleanTable(tableName) { return this.formStructure.cleanTable(tableName); }\n getTableRecord(tableName, recordId) { return this.formStructure.getTableRecord(tableName, recordId); }\n\n customPreProcessing() { }\n customFormStart() { }\n displayActionServerError() { }\n displayValidationServerError() { }\n displayTableServerError() { }\n showFieldInfo(fieldCode: string) { }\n showModalDialog(title, body, options, callback?, params?) { }\n openUploadDialog(title, body, options, callback?, params?) { }\n\n subscribeAppEvent(eventName, callback) {\n this._eventEmiter.subscribe(eventName, callback);\n }\n\n openForm(name, data = null, backData = null, cleanStack = false) {\n let origin = null;\n if (!cleanStack) {\n origin = { ...backData, name: this.name, url: this._formRoute, token: this.controlToken };\n origin.subject = origin?.subject ?? this.formSubject;\n origin.state = origin?.state ?? this.currentState;\n origin.fields = origin?.fields ?? {};\n origin.extra = origin?.extra ?? {};\n }\n const target = { ...data, name };\n target.subject = target?.subject ?? null;\n target.state = target?.state ?? null;\n target.fields = target?.fields ?? {};\n target.extra = target?.extra ?? {};\n this.formManagerService.openForm(origin, target);\n }\n\n canGoBack() { return this.originToken !== null }\n goBack() { return this.formManagerService.backTo(); }\n goBackForm() { return this.goBack(); }\n getOriginDetail() { return this.formManagerService.getFormInfo(this.originToken); }\n\n setError(errorType, errorMessage, errorDetail) {\n this._errorType = errorType || '';\n this.errorMessage = errorMessage || '';\n this.errorDetail = errorDetail || '';\n }\n\n get formManager() { return this; }\n resetError() { this.setError(null, null, null); }\n getErrorType() { return this._errorType; }\n getErrorMessage() { return this.errorMessage; }\n getErrorDetail() { return this.errorDetail; }\n getErrorCode() { return this._errorType; }\n\n get formRoute() { return this._formRoute; }\n set formRoute(route) { this._formRoute = route; }\n defineFormCode(name) { this.name = name; }\n getCurrentState() { return this.formStructure.state; }\n getCurrentMode() { return this.formStructure.state; }\n\n get formCode() { return this.name; }\n set formCode(name) { this.name = name; }\n\n getFormParameter(name) {\n return (name) ? (this.extraData?.[name] ?? null) : null;\n }\n\n getSubject() { return this.formSubject; }\n getformSubject() { return this.getSubject(); }\n\n preocessInputParams(params) {\n this.controlToken = params?.[TOKEN] ?? null;\n const { token, subject, state, fields, extra, originToken } = this.formManagerService.getFormInfo(this.controlToken);\n if (!this.controlToken || this.controlToken !== token) {\n return;\n }\n this.formSubject = params?.[SUBJECT] ?? subject ?? null;\n this.inputDataFields = fields;\n this.extraData = extra;\n this.originToken = originToken;\n return state;\n }\n\n subscribeSectionActivation() {\n const formSections = this.formStructure.getSections();\n if (Array.isArray(formSections)) {\n formSections.forEach(section => {\n section.activation.subscribe(code => this.launchSectionActivation(code));\n section.inactivation.subscribe(code => this.launchSectionInactivation(code));\n });\n }\n }\n\n subscribeFieldsSubjects() {\n const formFields = this.formStructure.getFields();\n if (Array.isArray(formFields)) {\n formFields.forEach(field => {\n field.editionFinish.subscribe(event => {\n const { code, intrinsicValidation } = event;\n this.startFieldValidation(code, intrinsicValidation);\n });\n field.editionPartial.subscribe(event => {\n const { code, intrinsicValidation } = event;\n this.startFieldInputValidation(code, intrinsicValidation);\n });\n field.detailRequest.subscribe(code => this.showFieldInfo(code));\n });\n }\n }\n\n subscribeActionSubjects() {\n const formActions = this.formStructure.getActions();\n if (Array.isArray(formActions)) {\n formActions.forEach(action => {\n action.actionActivated.subscribe(code => this.startAction(code));\n });\n }\n }\n\n subscribeTableSubjects() {\n const formTables = this.formStructure.getTables();\n if (Array.isArray(formTables)) {\n formTables.forEach(table => {\n table.inlineActionTrigger.subscribe(event => this.startTableAction(event));\n table.globalActionTrigger.subscribe(event => this.startTableGlobalAction(event));\n table.recordSelectionTrigger.subscribe(event => this.startTableRecordSelection(event));\n table.selectionActionTrigger.subscribe(event => this.startTableSelectionAction(event));\n table.getDataTrigger.subscribe(event => this.startTableGetData(event));\n });\n }\n }\n\n async formInit(params) {\n let initialState = this.preocessInputParams(params);\n if (!this.name) { return; }\n if (!this.definitionObtained) {\n this.busy = true;\n const formDefinition = await this.formManagerService.getFormDefinition(this.name);\n this.busy = false;\n this.formStructure = new FormStructureAndData(formDefinition, this.formConfig);\n this.fields = this.formStructure.fields;\n this.actions = this.formStructure.actions;\n this.definitionObtained = true;\n } else {\n this.cleanData();\n }\n if (!this.supportState(initialState)) {\n initialState = this.formStructure.defaultState;\n }\n this.formStructure.changeState(initialState || this.formStructure.defaultState);\n const inputFieldNames = Object.keys(this.inputDataFields);\n for (let index = 0; index < inputFieldNames.length; index++) {\n const fieldCode = inputFieldNames[index];\n const fieldValue = this.inputDataFields[fieldCode];\n this.setFieldValue(fieldCode, fieldValue);\n }\n const recordResponse = await this.requestFormAction(formActions.getData);\n this.checkErrorRecordReceived(recordResponse);\n this.formVisible = true;\n this.subscribeSectionActivation();\n this.subscribeFieldsSubjects();\n this.subscribeActionSubjects();\n this.subscribeTableSubjects();\n this.customFormStart();\n }\n\n checkErrorRecordReceived(recordResponse) {\n const { error } = recordResponse;\n if (!error) { return false; }\n this.errorCode = recordResponse.errorCode;\n this.errorMessage = recordResponse.errorMessage;\n this.errorDetail = recordResponse.errorDetail;\n }\n\n errorOccured() {\n return (this.errorCode !== NO_ERROR);\n }\n\n changeState(state) { return this.formStructure.changeState(state); }\n changeFormMode(state) { return this.changeState(state); }\n\n async requestFormAction(actionCode, actionSubject = {}) {\n const actionDetail = {\n formCode: this.name,\n formSubject: this.formSubject,\n currentMode: this.formStructure.state,\n actionCode,\n actionSubject,\n version: PAYLOAD_VERSION,\n formData: this.formStructure.getPayload(),\n immutableData: this.formStructure.immutableData,\n };\n this.errorCode = NO_ERROR;\n this.errorMessage = '';\n this.errorDetail = '';\n this.busy = true;\n const formActionResponse: any = await this.formManagerService.execServerAction(actionDetail);\n this.busy = false;\n if (formActionResponse && formActionResponse.error.errorType) {\n console.log('Excepción no soportada');\n }\n if (formActionResponse.hasError()) {\n const error = formActionResponse.error;\n this.errorCode = error.errorCode;\n this.errorMessage = error.errorMessage;\n this.errorDetail = error.errorDetail;\n }\n const formResponseData = formActionResponse.getData();\n this.updateFormWithServerData(formResponseData);\n return formResponseData;\n }\n\n updateFormWithServerData(formContent) {\n const {\n currentMode, formSubject, actions, fields, recordTables,\n returnedFile, immutableData, extraInfo,\n } = formContent;\n currentMode && this.changeState(currentMode);\n if (formSubject) { this.formSubject = formSubject; }\n if (actions && actions.length > 0) {\n for (const changedAction of actions) {\n const actionObject = this.getActionObject(changedAction.actionCode);\n if (actionObject) { actionObject.updateFromServer(changedAction); }\n }\n }\n if (fields && fields.length > 0) {\n for (const changedField of fields) {\n const fieldObject = this.getFieldObject(changedField.fieldCode);\n if (fieldObject) {\n fieldObject.updateFromServer(changedField);\n }\n }\n }\n if (recordTables && recordTables.length > 0) {\n for (const changedTable of recordTables) {\n const tableObject = this.getTableObject(changedTable.tableCode);\n if (tableObject) {\n tableObject.updateFromServer(changedTable);\n }\n }\n }\n if (returnedFile && returnedFile.file) {\n this.fileMgmtServices.saveFile(returnedFile.file, returnedFile.name, returnedFile.type);\n }\n this.formStructure.immutableData = immutableData;\n this.formStructure.extraInfo = extraInfo;\n }\n\n /**\n * Manejo de event handlers para acciones sobre el formulario\n */\n\n addSectionActivation(sections, callbackMethod) {\n const sectionSet = (Array.isArray(sections)) ? sections : [sections];\n sectionSet.forEach((sectionName) => {\n if (!this.formSectionsActivate[sectionName]) {\n this.formSectionsActivate[sectionName] = [];\n }\n this.formSectionsActivate[sectionName].push(callbackMethod);\n });\n }\n\n addSectionInactivation(sections, callbackMethod) {\n const sectionSet = (Array.isArray(sections)) ? sections : [sections];\n sectionSet.forEach((sectionName) => {\n if (!this.formSectionsInactivate[sectionName]) {\n this.formSectionsInactivate[sectionName] = [];\n }\n this.formSectionsInactivate[sectionName].push(callbackMethod);\n });\n }\n\n addActionMethodStart(actions, callbackMethod) {\n const actionSet = (Array.isArray(actions)) ? actions : [actions];\n actionSet.forEach((actionName) => {\n if (!this.formActionsStart[actionName]) {\n this.formActionsStart[actionName] = [];\n }\n this.formActionsStart[actionName].push(callbackMethod);\n });\n }\n\n addActionMethodFinish(actions, callbackMethod) {\n const actionSet = (Array.isArray(actions)) ? actions : [actions];\n actionSet.forEach((actionName) => {\n if (!this.formActionsFinish[actionName]) {\n this.formActionsFinish[actionName] = [];\n }\n this.formActionsFinish[actionName].push(callbackMethod);\n });\n }\n\n async launchSectionActivation(sectionCode: string) {\n const sectionObject = this.formStructure.getSectionObject(sectionCode);\n if (!sectionObject) { return; }\n const clientSectionMethods = this.formSectionsActivate[sectionCode];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async launchSectionInactivation(sectionCode: string) {\n const sectionObject = this.formStructure.getSectionObject(sectionCode);\n if (!sectionObject) { return; }\n const clientSectionMethods = this.formSectionsInactivate[sectionCode];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async startAction(actionCode: string) {\n const actionObject = this.getAction(actionCode);\n if (!actionObject) { return; }\n this.resetError();\n actionObject.start();\n const clientActionMethods = this.formActionsStart[actionCode];\n if (clientActionMethods) {\n const clientActionPromises = [];\n for (const clientActionMethod of clientActionMethods) {\n const continueActionPromise = clientActionMethod(actionObject);\n clientActionPromises.push(continueActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n actionObject.stop();\n return;\n }\n }\n this.startServerAction(actionObject);\n }\n\n async startServerAction(actionInput) {\n const action = (typeof actionInput === 'string')\n ? this.getAction(actionInput) : actionInput;\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n actionResult = await this.requestFormAction(action.actionCode);\n finish = !this.errorOccured();\n }\n if (finish) {\n await this.finishAction(action, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayActionServerError();\n }\n action.stop();\n }\n\n async finishAction(actionObject, actionResult) {\n const finishActionMethods = this.formActionsFinish[actionObject.actionCode];\n if (finishActionMethods) {\n const clientActionPromises = [];\n for (const clientActionMethod of finishActionMethods) {\n clientActionPromises.push(clientActionMethod(actionObject, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n completeGlobalAction(actionObject) {\n return this.startServerAction(actionObject);\n }\n\n /**\n * Manejadores de eventos para validaciones sobre campos\n */\n\n addFieldInputValidation(fields, callbackMethod) {\n const fieldSet = (Array.isArray(fields)) ? fields : [fields];\n fieldSet.forEach((fieldCode) => {\n if (!this.fieldInputValidation[fieldCode]) {\n this.fieldInputValidation[fieldCode] = [];\n }\n this.fieldInputValidation[fieldCode].push(callbackMethod);\n });\n }\n\n addFieldValidationStart(fields, callbackMethod) {\n const fieldSet = (Array.isArray(fields)) ? fields : [fields];\n fieldSet.forEach((fieldCode) => {\n if (!this.fieldValidationsStart[fieldCode]) {\n this.fieldValidationsStart[fieldCode] = [];\n }\n this.fieldValidationsStart[fieldCode].push(callbackMethod);\n });\n }\n\n addFieldValidationFinish(fields, callbackMethod) {\n const fieldSet = (Array.isArray(fields)) ? fields : [fields];\n fieldSet.forEach((fieldCode) => {\n if (!this.fieldValidationsFinish[fieldCode]) {\n this.fieldValidationsFinish[fieldCode] = [];\n }\n this.fieldValidationsFinish[fieldCode].push(callbackMethod);\n });\n }\n\n async startFieldInputValidation(fieldCode: string, intrinsicValidation: boolean = true) {\n const fieldToValidate = this.getFieldObject(fieldCode);\n if (!fieldToValidate) { return false; }\n fieldToValidate.resetError();\n const validationCallbacks = this.fieldInputValidation[fieldCode];\n if (validationCallbacks) {\n const clientValidationPromises = [];\n for (const validationMethod of validationCallbacks) {\n const continueValidationPromise = validationMethod(fieldToValidate);\n clientValidationPromises.push(continueValidationPromise);\n }\n await Promise.all(clientValidationPromises);\n }\n }\n\n async startFieldValidation(fieldCode: string, intrinsicValidation: boolean = true) {\n const fieldToValidate = this.getField(fieldCode);\n if (!fieldToValidate || !intrinsicValidation) { return; }\n fieldToValidate.resetError();\n const validationCallbacks = this.fieldValidationsStart[fieldCode];\n if (validationCallbacks) {\n const clientValidationPromises = [];\n for (const validationMethod of validationCallbacks) {\n const clientValidationPromise = validationMethod(fieldToValidate);\n clientValidationPromises.push(clientValidationPromise);\n }\n const clientValidationResults = await Promise.all(clientValidationPromises);\n const continueValidation = clientValidationResults.reduce((total, curr) => (total && curr), true);\n if (!continueValidation) {\n return;\n }\n }\n this.startServerFieldValidation(fieldToValidate);\n }\n\n async startServerFieldValidation(inputField) {\n const fieldObj = (typeof inputField === 'string')\n ? this.getField(inputField) : inputField;\n let finish = true;\n let validationResult = null;\n if (fieldObj.backend) {\n fieldObj.validating = true;\n validationResult = await this\n .requestFormAction(formActions.validate, fieldObj.fieldCode);\n finish = !this.errorOccured();\n }\n if (finish) {\n await this.finishFieldValidation(fieldObj, validationResult);\n } else {\n fieldObj.setErrorCode(this.errorCode);\n fieldObj.setErrorMessage(this.errorMessage);\n this.displayValidationServerError();\n }\n fieldObj.validating = false;\n }\n\n async finishFieldValidation(fieldObject, validationResult) {\n const validationCallbacks = this.fieldValidationsFinish[fieldObject.fieldCode];\n if (validationCallbacks) {\n const clientActionPromises = [];\n for (const validationMethod of validationCallbacks) {\n clientActionPromises.push(validationMethod(fieldObject, validationResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async continueFieldValidation(fieldCode) {\n return this.startServerFieldValidation(fieldCode);\n }\n\n /**\n * Manejadores de eventos para acciones sobre Tablas\n */\n\n addTableActionStart(tableName, actionCode, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getActionObject(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableActionsStart[tableName]) {\n tableEventHandlers = this.tableActionsStart[tableName];\n } else {\n tableEventHandlers = {};\n this.tableActionsStart[tableName] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableActionFinish(tableName, actionCode, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getActionObject(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableActionsFinish[tableName]) {\n tableEventHandlers = this.tableActionsFinish[tableName];\n } else {\n tableEventHandlers = {};\n this.tableActionsFinish[tableName] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableSelectionStart(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this.tableSelectionsStart[tableName]) {\n tableEventHandlers = this.tableSelectionsStart[tableName];\n } else {\n tableEventHandlers = [];\n this.tableSelectionsStart[tableName] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableSelectionFinish(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this.tableSelectionsFinish[tableName]) {\n tableEventHandlers = this.tableSelectionsFinish[tableName];\n } else {\n tableEventHandlers = [];\n this.tableSelectionsFinish[tableName] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataStart(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableGetDataStart[tableName]) {\n tableEventHandlers = this.tableGetDataStart[tableName];\n } else {\n tableEventHandlers = [];\n this.tableGetDataStart[tableName] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataFinish(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableGetDataFinish[tableName]) {\n tableEventHandlers = this.tableGetDataFinish[tableName];\n } else {\n tableEventHandlers = {};\n this.tableGetDataFinish[tableName] = tableEventHandlers;\n }\n tableEventHandlers[GET_DATA_ACTION] = callbackMethod;\n }\n\n async startTableGlobalAction(tableActionEvent) {\n const { tableCode, actionCode } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject || !actionCode) { return; }\n this.resetError();\n const action = tableObject.getAction(actionCode);\n if (!action) { return; }\n const tableActionDetail = {\n tableObject,\n action,\n tableCode,\n actionCode,\n };\n const tableEventHandlers = this.tableActionsStart[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerGlobalAction(tableActionDetail);\n }\n\n async startTableServerGlobalAction(tableActionDetail) {\n const { tableObject, action, tableCode, actionCode } = tableActionDetail;\n if (!tableObject || !action) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n const actionSubject = {\n tableCode,\n actionType: GLOBAL_ACTION,\n actionCode\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n await this.finishTableGlobalAction(tableActionDetail, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n async finishTableGlobalAction(tableActionDetail, actionResult) {\n const { tableCode, actionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableAction(tableActionEvent) {\n const { tableCode, actionCode, actionDetail } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject || !actionCode) { return; }\n this.resetError();\n const { recordId, recordData } = actionDetail;\n const action = tableObject.getAction(actionCode);\n if (!action) { return; }\n const tableActionDetail = {\n tableObject,\n action,\n tableCode,\n actionCode,\n recordId,\n recordData\n };\n const tableEventHandlers = this.tableActionsStart[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerAction(tableActionDetail);\n }\n\n async startTableServerAction(tableActionDetail) {\n const { tableObject, action, tableCode, actionCode, recordId, recordData } = tableActionDetail;\n if (!tableObject || !action) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n const actionSubject = {\n tableCode,\n actionType: this.formConfig.tableActions.inline,\n actionCode,\n tableRecordId: recordId,\n tableRecordData: recordData\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n this.finishTableAction(tableActionDetail, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n completeInlineAction(tableAction) {\n return this.startTableServerAction(tableAction);\n }\n\n async finishTableAction(tableActionDetail, actionResult) {\n const { tableCode, actionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableRecordSelection(tableActionEvent) {\n const { tableCode, actionDetail } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject) { return; }\n this.resetError();\n const { recordId, recordData } = actionDetail;\n const tableSelectionDetail = {\n tableObject,\n tableCode,\n recordId,\n recordData\n };\n const tableEventHandlers = this.tableSelectionsStart[tableCode];\n if (tableEventHandlers) {\n const clientActionPromises = [];\n for (const tableSelectionMethod of tableEventHandlers) {\n const clientActionPromise = tableSelectionMethod(tableSelectionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerRecordSelection(tableSelectionDetail);\n }\n\n async startTableServerRecordSelection(tableSelectionDetail) {\n const { tableObject, tableCode, recordId, recordData } = tableSelectionDetail;\n if (!tableObject) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (tableObject.selectionBackend) {\n const actionSubject: any = {\n tableCode,\n actionType: this.formConfig.tableActions.rowSelection,\n actionCode: null,\n tableRecordId: recordId,\n tableRecordData: recordData\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n this.finishTableRecordSelection(tableSelectionDetail, actionResult);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n async finishTableRecordSelection(tableSelectionDetail, actionResult) {\n const { tableCode } = tableSelectionDetail;\n const tableEventHandlers = this.tableSelectionsFinish[tableCode];\n if (tableEventHandlers) {\n const clientActionPromises = [];\n for (const tableSelectionMethod of tableEventHandlers) {\n clientActionPromises.push(tableSelectionMethod(tableSelectionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableSelectionAction(tableActionEvent) {\n const { tableCode, actionCode, actionDetail } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject || !actionCode) { return; }\n this.resetError();\n const { selectedRecords } = actionDetail;\n const action = tableObject.getAction(actionCode);\n if (!action) { return; }\n const tableActionDetail = {\n tableObject,\n action,\n tableCode,\n actionCode,\n selectedRecords\n };\n const tableEventHandlers = this.tableActionsStart[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerSelectionAction(tableActionDetail);\n }\n\n async startTableServerSelectionAction(tableActionDetail) {\n const { tableObject, action, tableCode, actionCode, selectedRecords } = tableActionDetail;\n if (!tableObject || !action) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n const actionSubject = {\n tableCode,\n actionType: this.formConfig.tableActions.selection,\n actionCode,\n selectedRecords\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n this.finishTableSelectionAction(tableActionDetail, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n async finishTableSelectionAction(tableActionDetail, actionResult) {\n const { tableCode, actionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableGetData(tableActionEvent) {\n const { tableCode } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n const tableActionDetail = {\n tableObject,\n tableCode\n };\n this.resetError();\n const tableEventHandlers = this.tableGetDataStart[tableCode];\n if (tableEventHandlers) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableEventHandlers) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerGetData(tableActionDetail);\n }\n\n async startTableServerGetData(tableActionDetail) {\n const { tableObject, tableCode } = tableActionDetail;\n tableObject.putOnWait();\n const actionSubject = { tableCode };\n const actionResult = await this\n .requestFormAction(formActions.getTableData, actionSubject);\n if (this.errorOccured()) {\n this.displayTableServerError();\n } else {\n this.finishTableGetData(tableActionDetail, actionResult);\n }\n tableObject.freeWaiting();\n }\n\n async finishTableGetData(tableActionDetail, actionResult) {\n const { tableCode, tableActionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[tableActionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n checkSectionRequiredFields(sectionCode, reqFieldMessage?) {\n this.cleanErrorFields(null, sectionCode);\n const requiredFieldMessage = reqFieldMessage ?? this.formConfig.formStandardErrors.requiredField\n const numErrors = this.tagFieldsWithError(this.getRequiredEmptyFields(null,\n sectionCode), null, requiredFieldMessage);\n return (numErrors === 0);\n }\n\n validateSectionConsistency(sectionCode, reqFieldMessage?) {\n this.resetError();\n const completeFields = this.checkSectionRequiredFields(sectionCode, reqFieldMessage);\n if (!completeFields) {\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.requiredFields);\n return;\n }\n let validationError = false;\n const requiredEmptyFields = this.getRequiredEmptyFields(null, sectionCode);\n if (requiredEmptyFields.length > 0) {\n validationError = true;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.requiredFields);\n this.tagFieldsWithError(requiredEmptyFields, null,\n this.formConfig.formStandardErrors.requiredField);\n for (const fieldCode of requiredEmptyFields) {\n const requiredEmptyField = this.getField(fieldCode);\n if (requiredEmptyField && requiredEmptyField.widget\n && requiredEmptyField.widget.focus) {\n requiredEmptyField.widget.focus();\n break;\n }\n }\n }\n const validationIssueFields = this.getFieldsWithValidationIssues(null,\n sectionCode);\n if (!validationError && validationIssueFields.length > 0) {\n validationError = true;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.validationFields);\n for (const fieldCode of validationIssueFields) {\n const validationIssueField = this.getField(fieldCode);\n if (validationIssueField && validationIssueField.widget\n && validationIssueField.widget.focus) {\n validationIssueField.widget.focus();\n break;\n }\n }\n }\n return validationError;\n }\n\n copyTableRecordToFields(tableObj, mappingTable = null) {\n const tableObject = this.getTable(tableObj.tableCode);\n const tableRecord = tableObject.getTableRecord(tableObj.recordId);\n const columnNames = tableObject.columnNames;\n for (const columnName of columnNames) {\n const columnValue = tableRecord.getFieldValue(columnName) ?? '';\n const fieldCode = mappingTable?.[columnName] ?? columnName;\n this.setFieldValue(fieldCode, columnValue);\n }\n return true;\n }\n\n /**\n * Soporte registros en tablas que se editan en campos del formulario\n */\n\n defineEditionTable(tableEditionDef) {\n const { columnFieldMapping, recordCaptureFields, startCollapsed } = tableEditionDef;\n tableEditionDef.startCollapsed = (typeof startCollapsed !== 'undefined')\n ? startCollapsed : true;\n\n const fieldsMappingTable = {};\n const fieldsToClear = [];\n for (const columnMap of columnFieldMapping) {\n const [columnName, formField] = columnMap;\n fieldsMappingTable[columnName] = formField;\n fieldsToClear.push(formField);\n }\n tableEditionDef.fieldsMappingTable = fieldsMappingTable;\n tableEditionDef.fieldsToClear = fieldsToClear;\n\n const { tableName, newRecordActionName, saveRecordActionName,\n cancelSaveRecordActionName, tableEditRecordActionName, enableRecordEdition\n } = tableEditionDef;\n\n this.addActionMethodStart(newRecordActionName, () => {\n this.cleanFields(fieldsToClear, null);\n this.showFields(recordCaptureFields);\n if (!enableRecordEdition) {\n this.enableRecordEdition(tableEditionDef);\n } else {\n enableRecordEdition(tableEditionDef);\n }\n this.hideAction(newRecordActionName);\n this.showAction(cancelSaveRecordActionName);\n this.showAction(saveRecordActionName);\n return true;\n });\n const { recordEditionValidate, disableRecordEdition } = tableEditionDef;\n this.addActionMethodStart(saveRecordActionName, () => {\n return (!recordEditionValidate) ? this.recordEditionValidate(tableEditionDef)\n : recordEditionValidate(tableEditionDef);\n });\n this.addActionMethodFinish(saveRecordActionName, () => {\n if (!this.errorOccured()) {\n return (!disableRecordEdition) ? this.disableRecordEdition(tableEditionDef)\n : disableRecordEdition(tableEditionDef);\n }\n });\n this.addActionMethodStart(cancelSaveRecordActionName, () => {\n return (!disableRecordEdition) ? this.disableRecordEdition(tableEditionDef)\n : disableRecordEdition(tableEditionDef);\n });\n this.addTableActionStart(tableName, tableEditRecordActionName,\n (tblActObj) => {\n return (!enableRecordEdition)\n ? this.enableRecordEdition(tableEditionDef, tblActObj)\n : enableRecordEdition(tableEditionDef, tblActObj);\n });\n if (tableEditionDef.startCollapsed) {\n return (!tableEditionDef.disableRecordEdition)\n ? this.disableRecordEdition(tableEditionDef)\n : tableEditionDef.disableRecordEdition(tableEditionDef);\n } else {\n return (!tableEditionDef.enableRecordEdition)\n ? this.enableRecordEdition(tableEditionDef)\n : tableEditionDef.enableRecordEdition(tableEditionDef, null);\n }\n }\n\n enableRecordEdition(tableEditionDef, tableActionObject = null) {\n if (tableActionObject) {\n this.copyTableRecordToFields(tableActionObject, tableEditionDef.fieldsMappingTable);\n }\n this.showFields(tableEditionDef.recordCaptureFields);\n this.hideAction(tableEditionDef.newRecordActionName);\n this.showAction(tableEditionDef.cancelSaveRecordActionName);\n this.showAction(tableEditionDef.saveRecordActionName);\n if (tableEditionDef.fieldsToTriggerValidation\n && tableEditionDef.fieldsToTriggerValidation.length > 0) {\n for (const fieldName of tableEditionDef.fieldsToTriggerValidation) {\n this.startFieldValidation(fieldName);\n }\n }\n return true;\n }\n\n disableRecordEdition(tableDefinition) {\n this.cleanFields(tableDefinition.fieldsToClear, null);\n this.hideFields(tableDefinition.recordCaptureFields);\n this.showAction(tableDefinition.newRecordActionName);\n this.hideAction(tableDefinition.cancelSaveRecordActionName);\n this.hideAction(tableDefinition.saveRecordActionName);\n return true;\n }\n\n recordEditionValidate(tableEditionDef) {\n const { recordCaptureFields } = tableEditionDef;\n let validationOk = true;\n const requiredEmptyFields = this.getRequiredEmptyFields(recordCaptureFields, null);\n if (requiredEmptyFields.length > 0) {\n validationOk = false;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.requiredFields);\n this.tagFieldsWithError(requiredEmptyFields, null,\n this.formConfig.formStandardErrors.requiredField);\n }\n const validationIssueFields = this.getFieldsWithValidationIssues(recordCaptureFields, null);\n if (validationIssueFields.length > 0) {\n validationOk = false;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle, this.formConfig.formStandardErrors.validationFields);\n }\n return validationOk;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\n\nimport { BasicFormComponent } from './components/forms/basic-form';\nimport { ActionComponent } from './components/elements/action.component';\nimport { FieldComponent } from './components/elements/field.component';\nimport { ElementComponent } from './components/elements/layout/element.component';\nimport { FormErrorComponent } from './components/elements/layout/form-error.component';\nimport { FormHeaderComponent } from './components/elements/layout/form-header.component';\nimport { SectionComponent } from './components/elements/layout/section.component';\nimport { SubSectionComponent } from './components/elements/layout/sub-section.component';\nimport { LibTableFilterComponent } from './components/elements/tables/table-filter.component';\nimport { LibTableRecordActionComponent } from './components/elements/tables/table-record-action.component';\nimport { LibTableRecordFieldComponent } from './components/elements/tables/table-record-field.component';\nimport { LibTableComponent } from './components/elements/tables/table.component';\n\nconst COMPONENTS = [\n BasicFormComponent,\n ActionComponent,\n FieldComponent,\n ElementComponent,\n FormErrorComponent,\n FormHeaderComponent,\n SectionComponent,\n SubSectionComponent,\n LibTableFilterComponent,\n LibTableRecordActionComponent,\n LibTableRecordFieldComponent,\n LibTableComponent];\n\n@NgModule({\n declarations: COMPONENTS,\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ],\n exports: COMPONENTS\n})\nexport class TuainNgFormsLibModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["HEADER","INLINE_ACTION"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tuain-ng-forms-lib.js","sources":["../../../projects/tuain-ng-forms-lib/src/lib/components/elements/action.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/field.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/element.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/form-error.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/form-header.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/section.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/layout/sub-section.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/filter.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/form.constants.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/element.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/column.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/action.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/utilities.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/row-data.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/table.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table-filter.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table-record-action.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table-record-field.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/elements/tables/table.component.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/subsection.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/section.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/action.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/field.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/form.ts","../../../projects/tuain-ng-forms-lib/src/lib/services/form-manager.service.ts","../../../projects/tuain-ng-forms-lib/src/lib/services/event-manager.service.ts","../../../projects/tuain-ng-forms-lib/src/lib/services/file-manager.service.ts","../../../projects/tuain-ng-forms-lib/src/lib/components/forms/basic-form.ts","../../../projects/tuain-ng-forms-lib/src/lib/tuain-ng-forms-lib.module.ts","../../../projects/tuain-ng-forms-lib/src/tuain-ng-forms-lib.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport { FormAction } from '../../classes/forms/action';\n\n@Component({\n selector: 'lib-action',\n template: `<ng-content></ng-content>`\n})\n\nexport class ActionComponent implements OnInit {\n formConfig: any;\n inProgress: boolean;\n @Input() action: FormAction;\n @Input() busy: any;\n @Input() relatedField: any;\n @Input() currentState: any;\n\n @Input() style = 'primary';\n @Input() showLabel = true;\n\n ngOnInit() {\n this.formConfig = this.action?._formConfig;\n this.start();\n }\n\n start() { }\n\n activate() {\n if (this.action?.notifyActivation) {\n this.action.notifyActivation();\n }\n }\n\n visibleOnRestriction() {\n if (!this.action?.restrictedOnField) {\n return true;\n }\n if ((this.action?.restrictedOnOperator === '=='\n && this.relatedField === this.action?.restrictedOnValue)\n || (this.action?.restrictedOnOperator === '!='\n && this.relatedField !== this.action?.restrictedOnValue)) {\n return true;\n }\n }\n\n get visible() {\n return this.action?.visibleOn(this.currentState) && this.visibleOnRestriction();\n }\n\n get disabled() {\n return !(this.action?.enabledOn(this.currentState));\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { FieldDescriptor } from '../../classes/forms/field';\n\nconst VALUE = ''\n@Component({\n selector: 'lib-field',\n template: `<ng-content></ng-content>`\n})\nexport class FieldComponent implements OnInit {\n formConfig: any;\n // Atributos obtenidos estáticamente\n code: string;\n value: any;\n fieldInfo: string;\n fieldAlignment: string;\n tooltipText: string;\n\n // Atributos actualizados por subscripción\n maxLength: any;\n onValidation: any;\n captureType: any;\n title: any;\n type: any;\n visibleLabel: any;\n required: any;\n options: any;\n\n errorType: any;\n errorCode: any;\n errorMessage: any;\n\n @Input() field: FieldDescriptor;\n @Input() currentState: any;\n\n ngOnInit() {\n if (this.field) {\n this.formConfig = this.field?._formConfig;\n // Inicialización\n const mapping = Object.entries(this.formConfig.componentFieldAttrMap);\n for (let index = 0; index < mapping.length; index++) {\n const [fieldAttr, compAttr1] = mapping[index];\n const compAttr = compAttr1.toString();\n if (compAttr === VALUE) {\n this.updateValue();\n } else {\n this[compAttr] = this.field?.[fieldAttr.toString()];\n }\n }\n // Subscripción a cambios en atributos\n this.field.attributeChange.subscribe(event => {\n const { name: fieldAttr, value } = event;\n const compAttr = this.formConfig.componentFieldAttrMap[fieldAttr];\n if (compAttr === VALUE) {\n this.updateValue();\n } else {\n this[compAttr] = value\n }\n });\n }\n this.start();\n }\n\n start() { }\n\n focus() { }\n\n updateObject() {\n this.field._fieldValue = this.value;\n }\n\n inputChanged() {\n this.field._fieldValue = this.value;\n this.onChangeContent();\n }\n\n inputTyped() {\n this.field._fieldValue = this.value;\n this.onInputChange();\n }\n\n updateValue() {\n this.value = this.field._fieldValue;\n }\n\n onInputChange() {\n setTimeout(() => this.field.notifyEditionPartial(), 50);\n }\n\n onChangeContent() {\n setTimeout(() => this.field.notifyEditionFinish(), 50);\n }\n\n onShowInfo() {\n setTimeout(() => this.field.notifyEditionDetailRequest(), 50);\n }\n\n numberInputValidation(event) {\n const k = event.charCode;\n return (k > 47 && k < 58);\n }\n\n get visible() {\n return this.field?.visibleOn(this.currentState);\n }\n\n get disabled() {\n return !this.field?.enabledOn(this.currentState);\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-element',\n template: `<ng-content></ng-content>`\n})\nexport class ElementComponent implements OnInit {\n formConfig: any;\n\n @Input() element: any;\n @Input() form: any;\n @Input() currentState: any;\n\n ngOnInit() {\n this.formConfig = this.element?._formConfig;\n this.start();\n }\n\n start() { }\n\n get visible() {\n return this.element?.visibleOn(this.currentState);\n }\n\n get disabled() {\n return !this.element?.enabledOn(this.currentState);\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-form-error',\n template: `<ng-content></ng-content>`\n})\nexport class FormErrorComponent {\n @Input() errorTitle: any;\n @Input() errorMessage: any;\n @Input() errorType: any;\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'lib-form-header',\n template: `<ng-content></ng-content>`\n})\nexport class FormHeaderComponent {\n @Input() formManager: any;\n @Input() goBackAction: boolean;\n @Input() showTitle: any;\n @Input() headerActions: any;\n @Output() goBackEvent: EventEmitter<object> = new EventEmitter<object>();\n\n goBackForm() {\n this.goBackEvent.emit();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-section',\n template: `<ng-content></ng-content>`\n})\nexport class SectionComponent implements OnInit {\n @Input() sectionObject: any;\n @Input() formManager: any;\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-subsection',\n template: `<ng-content></ng-content>`\n})\nexport class SubSectionComponent implements OnInit {\n @Input() subSection: any;\n @Input() showHeader: any;\n @Input() formManager: any;\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n}\n","export class FieldSearch {\n fieldCode: string;\n fieldAlias: string;\n fieldTitle: string;\n fieldTypeCode: string;\n operators: string[];\n alignment: string;\n format: string;\n constructor(filterDefinition) {\n this.fieldCode = filterDefinition.fieldCode;\n this.fieldAlias = filterDefinition.fieldAlias || filterDefinition.fieldCode;\n this.fieldTitle = filterDefinition.fieldTitle;\n this.fieldTypeCode = filterDefinition.fieldTypeCode;\n this.operators = filterDefinition.operators;\n this.alignment = filterDefinition.alignment;\n this.format = filterDefinition.format;\n }\n}\n\nexport interface AdvancedFilterItem {\n fieldSearch: FieldSearch;\n operator: string;\n fieldValue1: string;\n fieldValue2: string;\n}\n\nexport class Filter {\n filterModeSimple: boolean;\n advancedFilter: AdvancedFilterItem[];\n simpleFilterWords: string[];\n constructor() {\n this.filterModeSimple = true;\n this.advancedFilter = [];\n this.simpleFilterWords = [];\n }\n}\n","export const NO_ERROR = '00';\nexport const HEADER = 'HEADER';\n\nexport const elementTypes = {\n action: 'ACTION',\n field: 'FIELD',\n table: 'TABLE',\n};\n\nexport const formActions = {\n tableAction: 'TABLEACTION',\n getData: 'GETDATA',\n getTableData: 'GETTABLEDATA',\n validate: 'VALIDATE',\n};\n\nexport const operators = {\n G: '>',\n L: '<',\n GE: '>=',\n LE: '<=',\n EQ: '==',\n NOT_EQ: '!=',\n CONTENT: 'Contiene',\n NOT_CONTENT: 'No Contiene',\n BETWEEN: 'Entre',\n};\n","import { elementTypes } from './form.constants';\nexport class FormElement {\n protected _visible: boolean;\n protected _visibleForced: boolean;\n protected _isForced: boolean;\n _formConfig: any;\n disabled: boolean;\n visibleStates: string[];\n enabledStates: string[];\n widget: any;\n elementType: string;\n\n constructor(elementDefinition, formConfig) {\n this._formConfig = formConfig;\n this._isForced = false;\n this.setVisibleStates(elementDefinition.visibleStates);\n this.setEnabledStates(elementDefinition.enabledStates);\n this._visibleForced = false;\n this.disabled = elementDefinition?.disabled ?? false;\n this.setVisibility(elementDefinition?.visible ?? true);\n this.widget = null;\n }\n\n isField() { return this.elementType === elementTypes.field; }\n isAction() { return this.elementType === elementTypes.action; }\n isTable() { return this.elementType === elementTypes.table; }\n\n setVisibleStates(newStates: any) {\n const visibleStates = (!Array.isArray(newStates) && typeof newStates === 'string')\n ? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)\n : newStates;\n this.visibleStates = (Array.isArray(visibleStates)) ? visibleStates : [];\n }\n\n setEnabledStates(newStates: any) {\n const enabledStates = (!Array.isArray(newStates) && typeof newStates === 'string')\n ? newStates.split(',').map(state => state.trim()).filter(state => state.length > 0)\n : newStates;\n this.enabledStates = (Array.isArray(enabledStates)) ? enabledStates : [];\n }\n\n viewOnState(state) { return (this.visibleStates && state) ? this.visibleStates.includes(state) : false; }\n enabledOnState(state) { return (this.enabledStates && state) ? this.enabledStates.includes(state) : false; }\n\n supportState(state) { return this.viewOnState(state); }\n supportMode(state) { return this.viewOnState(state); }\n\n get visible() { return (this._isForced) ? this._visibleForced : this._visible; }\n set visible(visible: boolean) { this.setVisibility(visible); }\n\n visibleOn(state) {\n return this.visible && this.viewOnState(state);\n }\n\n enabledOn(state) {\n return !this.disabled && this.enabledOnState(state);\n }\n\n setVisibility(visible: boolean, forced: boolean = null) {\n this._visible = visible && true;\n if (forced != null) {\n this._isForced = forced;\n }\n }\n\n show(forced?: boolean) {\n this._visible = true;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = true;\n }\n }\n\n hide(forced?: boolean) {\n this._visible = false;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = false;\n }\n }\n\n enable() { this.disabled = false; }\n disable() { this.disabled = true; }\n\n get enabled() { return !this.disabled; }\n get editable() { return !this.disabled; }\n}\n","export class RecordTableColumn {\n _formConfig: any;\n fieldCode: string;\n fieldTitle: string;\n fieldType: string;\n fieldAlignment: string;\n fieldFormat: string;\n visible: boolean;\n sortable: boolean;\n customAttributes: any;\n\n constructor(recTableColReceived, formConfig) {\n this._formConfig = formConfig;\n if (recTableColReceived) {\n this.fieldCode = recTableColReceived.fieldCode;\n this.fieldTitle = recTableColReceived.fieldTitle;\n this.fieldType = recTableColReceived.fieldTypeCode || this._formConfig.fieldTypes.text;\n const defaultTypeAlignment = (this._formConfig.tableFieldStyles[this.fieldType] != null) ? this._formConfig.tableFieldStyles[this.fieldType]['text-align'] : 'left';\n this.fieldAlignment = (recTableColReceived.alignment != null) ? recTableColReceived.alignment.toLowerCase() : defaultTypeAlignment;\n this.visible = recTableColReceived?.visible ?? true;\n this.sortable = recTableColReceived?.sortable ?? false;\n this.fieldFormat = recTableColReceived.format || '';\n this.customAttributes = recTableColReceived?.customAttributes ?? {};\n }\n }\n}\n","export class TableAction {\n visibleStates: string[];\n enabledStates: string[];\n newState: string;\n\n actionCode: string;\n actionTitle: string;\n iconName: string;\n actionType: string;\n actionClass: string;\n stateField: string;\n\n backend: boolean;\n restrictedOnField: string;\n restrictedOnValue: string;\n restrictedOnOperator: string;\n customAttributes: any;\n\n constructor(actionDefinition) {\n this.actionCode = actionDefinition.actionCode;\n this.actionTitle = actionDefinition.actionTitle;\n this.iconName = actionDefinition.iconName || this.actionCode;\n this.actionType = actionDefinition.actionType || 'STANDARD';\n this.actionClass = actionDefinition.actionClass || 'INLINE';\n this.newState = actionDefinition.newState;\n this.stateField = actionDefinition.stateField || '';\n\n this.visibleStates = actionDefinition.visibleStates || [];\n this.enabledStates = actionDefinition.enabledStates || [];\n this.backend = actionDefinition?.serverAction ?? false;\n this.restrictedOnField = actionDefinition.fieldRestrictedCode || '';\n this.restrictedOnValue = actionDefinition.valueRestricted || '';\n this.restrictedOnOperator = actionDefinition.operatorRestricted || '';\n this.customAttributes = actionDefinition?.customAttributes ?? {};\n }\n\n supportMode(state) { return this.viewOnState(state); }\n\n viewOnState(state) { return this.visibleStates.includes(state); }\n enabledOnState(state) { return this.enabledStates.includes(state); }\n}\n","export function formatCurrency(inputValue) {\n if (!inputValue) { return null; }\n const numeralDecimalMark = '.';\n const numeralPositiveOnly = false;\n const stripLeadingZeroes = true;\n const numeralIntegerScale = 12;\n const numeralDecimalScale = 2;\n const delimiter = ',';\n let parts;\n let partInteger;\n let partDecimal = '';\n\n // Se eliminan los caracteres alfabéticos\n let outputValue = inputValue.toString();\n if (!outputValue) {\n return;\n }\n /**\n * Se remplaza el primer caracter de marca decimal con el marcador reservado\n * Se eliminan los caractertes no numéricos excepto el signo menos y 'M'\n * utilizado como separador decimal en este punto, eliminando los prefijos\n * Se remplaza el caracter menos por un marcador resertvado\n * Se eliminan todos los demás caracteres menos en caso de estar presentes\n * Se remplaza el marcador de caracter menos (si está presente)\n * Se remplaza el marcador de separación decimal\n */\n let value = outputValue.replace(/[A-Za-z]/g, '')\n .replace(numeralDecimalMark, 'M')\n .replace(/[^\\dM-]/g, '')\n .replace(/^\\-/, 'N')\n .replace(/\\-/g, '')\n .replace('N', numeralPositiveOnly ? '' : '-')\n .replace('M', numeralDecimalMark);\n // Se eliminan los ceros a la izquierda\n if (stripLeadingZeroes) {\n value = value.replace(/^(-)?0+(?=\\d)/, '$1');\n }\n // Se separa la parte entera de la parte decimal\n partInteger = value;\n if (value.indexOf(numeralDecimalMark) >= 0) {\n parts = value.split(numeralDecimalMark);\n partInteger = parts[0];\n partDecimal = numeralDecimalMark + parts[1].slice(0, numeralDecimalScale);\n }\n if (numeralIntegerScale > 0) {\n partInteger = partInteger.slice(0, numeralIntegerScale + (value.slice(0, 1) === '-' ? 1 : 0));\n }\n // Se separan los digitos de acuerdo a la configuraciñon de agrupación\n partInteger = partInteger.replace(/(\\d)(?=(\\d{3})+$)/g, '$1' + delimiter);\n outputValue = partInteger.toString() + (numeralDecimalScale > 0 ? partDecimal.toString() : '');\n return outputValue;\n}\n","import { formatCurrency } from '../../utilities';\nimport { RecordTableColumn } from './column';\nimport { operators } from '../form.constants';\n\nconst DATE_TYPE = 'DATE';\nconst CURRENCY_TYPE = 'CURRENCY';\n\nexport class TableRecordData {\n recordId: string;\n selected: boolean;\n recordData: any = {};\n\n constructor(recordReceived, recordDefinition: RecordTableColumn[], selectionFieldName = null) {\n const { tableRecordId, recordData } = recordReceived;\n this.recordId = tableRecordId;\n this.selected = false;\n this.recordData = {};\n if (!recordDefinition || recordDefinition.length === 0 || !recordData || recordData.length === 0) {\n return;\n }\n const fieldNames = recordDefinition.map(column => column.fieldCode);\n if (Array.isArray(recordData)) {\n const rawRecordData = recordData.filter(fieldData => fieldData.fieldCode && fieldNames.includes(fieldData.fieldCode));\n rawRecordData.forEach(fieldData => {\n const { fieldCode, fieldValue } = fieldData;\n const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);\n const formattedFieldValue = this.formatFieldValue(fieldDef.fieldType, fieldValue);\n this.recordData[fieldCode] = formattedFieldValue;\n if (fieldCode === selectionFieldName) {\n this.selected = fieldValue;\n }\n });\n } else {\n const fields = Object.keys(recordData);\n fields.forEach(fieldCode => {\n const fieldValue = recordData[fieldCode];\n const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);\n const formattedFieldValue = this.formatFieldValue(fieldDef.fieldType, fieldValue);\n this.recordData[fieldCode] = formattedFieldValue;\n });\n }\n }\n\n formatFieldValue(fieldType, fieldValue) {\n if (fieldType === CURRENCY_TYPE) {\n return formatCurrency(fieldValue);\n } else if (fieldType === DATE_TYPE && fieldValue) {\n return new Date(fieldValue).toISOString().split('T')[0];\n }\n return fieldValue || '';\n }\n\n toggleSelect() {\n this.selected = !this.selected;\n }\n\n select() {\n this.selected = true;\n }\n\n unselect() {\n this.selected = false;\n }\n\n get recordIdKey() {\n return (typeof this.recordId === 'object')\n ? JSON.stringify(this.recordId) : this.recordId;\n }\n\n getFieldValue(fieldCode) {\n return (fieldCode && this.recordData[fieldCode])\n ? this.recordData[fieldCode] : null;\n }\n\n hasPattern(words) {\n if (!words || words.length === 0) {\n return true;\n }\n for (const fieldCode in this.recordData) {\n if (this.recordData.hasOwnProperty(fieldCode)) {\n for (const word of words) {\n const term = word.toUpperCase();\n const fieldValue = this.recordData[fieldCode];\n if (fieldValue.toString().toUpperCase().includes(term)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n hasCondition(advancedFilter) {\n if (!advancedFilter || advancedFilter.length === 0) {\n return true;\n }\n for (const condition of advancedFilter) {\n const fieldCode = condition.fieldSearch.fieldCode;\n if (this.recordData.hasOwnProperty(fieldCode)) {\n const fieldValue = this.recordData[fieldCode].toString().toUpperCase();\n const conditionField1Value = condition?.fieldValue1?.toString().toUpperCase();\n const conditionField2Value = condition.fieldValue2.toString().toUpperCase();\n if (condition.operator === operators.G && fieldValue <= conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.L && fieldValue >= conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.GE && fieldValue < conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.LE && fieldValue > conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.EQ) {\n return fieldValue === conditionField1Value;\n }\n if (condition.operator === operators.NOT_EQ && fieldValue === conditionField1Value) {\n return false;\n }\n if (condition.operator === operators.CONTENT && !fieldValue.includes(conditionField1Value)) {\n return false;\n }\n if (condition.operator === operators.NOT_CONTENT && fieldValue.includes(conditionField1Value)) {\n return false;\n }\n if (condition.operator === operators.BETWEEN && (fieldValue < conditionField1Value\n || fieldValue > conditionField2Value)) {\n return false;\n }\n }\n }\n return true;\n }\n}\n","import { Subject } from 'rxjs';\nimport { elementTypes } from '../form.constants';\nimport { FormElement } from '../element';\nimport { FieldSearch, Filter, AdvancedFilterItem } from './filter';\nimport { RecordTableColumn } from './column';\nimport { TableAction } from './action';\nimport { TableRecordData } from './row-data';\n\nconst TABLE_SORT_ASCENDING = 'asc';\nconst TABLE_SORT_DESCENDING = 'desc';\n\nexport const TABLE_FILTER_TYPES = {\n simpleFilterChange: 'SIMPLE_CHANGE',\n simpleFilterFinish: 'SIMPLE_FINISH',\n complexFilterAdd: 'COMPLEX_ADD',\n complexFilterRemove: 'COMPLEX_REMOVE',\n};\n\nexport interface TableFilterEvent {\n eventType: string;\n simpleFilterString: string;\n complexFilterItem: AdvancedFilterItem;\n itemName: string;\n}\n\nexport interface TableActionEvent {\n actionCode: string;\n recordId: any;\n recordData: any;\n}\n\nexport interface TableEvent {\n tableCode: string;\n actionCode: string;\n actionDetail: any;\n}\n\nexport class RecordTable extends FormElement {\n private readonly _inlineActionTrigger = new Subject<TableEvent>();\n private readonly _globalActionTrigger = new Subject<TableEvent>();\n private readonly _recordSelectionTrigger = new Subject<TableEvent>();\n private readonly _selectionActionTrigger = new Subject<TableEvent>();\n private readonly _getDataTrigger = new Subject<TableEvent>();\n private readonly _attributeChange = new Subject<any>();\n\n tableRecords: TableRecordData[];\n tableRecordObj = {};\n visibleRecords: TableRecordData[];\n columns: RecordTableColumn[];\n private _tableColumnObj = {};\n private _appendPages: boolean;\n selectable: boolean;\n selectionBackend: boolean;\n selectionField: RecordTableColumn;\n private _actions: TableAction[];\n private _actionsObj = {};\n allSelected = false;\n\n tableCode: string;\n tableTitle: string;\n currentPage: number;\n totalPages: number;\n requestedPage: number;\n recordsPerPage: number;\n totalRecordsNumber: number;\n recordsNumber: number;\n sorting: any;\n\n waiting: boolean;\n clientPaging: boolean;\n\n simpleFilter: boolean;\n complexFilter: boolean;\n sortable: boolean;\n filterConfig: FieldSearch[];\n filterObject: Filter;\n customAttributes: any;\n\n constructor(tableReceived, formConfig) {\n super(tableReceived, formConfig);\n this.elementType = elementTypes.table;\n this.waiting = false;\n this.currentPage = 1;\n this.totalPages = 1;\n this.requestedPage = 1;\n\n this.columns = [];\n this._tableColumnObj = {};\n this._actions = [];\n this._actionsObj = {};\n this.tableRecords = [];\n\n this.setAttr('allSelected', false);\n this.setAttr('filterObject', new Filter());\n this.setAttr('filterConfig', []);\n this.setAttr('tableCode', tableReceived.tableCode);\n this.tableTitle = tableReceived.tableTitle;\n this.setAttr('clientPaging', tableReceived?.clientPaging ?? true);\n this.setAttr('simpleFilter', tableReceived?.simpleFilter ?? false);\n this.setAttr('complexFilter', false);\n\n this._appendPages = tableReceived?.append ?? false;\n this.selectable = tableReceived?.selectable ?? false;\n this.setAttr('selectionBackend', tableReceived?.selectionBackend ?? false);\n this.customAttributes = tableReceived?.customAttributes ?? {};\n this.setAttr('sortable', tableReceived?.sortable ?? false);\n this.setAttr('sorting', { columnName: '', direction: '' });\n\n this.setAttr('recordsPerPage', formConfig.defaultRecordsPerPage);\n if (tableReceived.fields) {\n const columns = [];\n for (const columnReceived of tableReceived.fields) {\n const columnDefinition = new RecordTableColumn(columnReceived, this._formConfig);\n columns.push(columnDefinition);\n this._tableColumnObj[columnDefinition.fieldCode] = columnDefinition;\n }\n this.setAttr('columns', columns);\n }\n if (tableReceived.actions) {\n const tableActions = tableReceived.actions.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates;\n if (!visibleStates) {\n visibleStates = (objDef.actionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0);\n enabledStates = (objDef.actionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0);\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const actionReceived of tableActions) {\n const inlineAction = new TableAction(actionReceived);\n this._actions.push(inlineAction);\n this._actionsObj[inlineAction.actionCode] = inlineAction;\n }\n }\n if (tableReceived.filters && tableReceived.filters.length > 0) {\n this.setAttr('complexFilter', true);\n const filterConfig = this.filterConfig;\n for (const filterReceived of tableReceived.filters) {\n const filterItem = new FieldSearch(filterReceived);\n filterConfig.push(filterItem);\n }\n this.setAttr('filterConfig', filterConfig);\n\n }\n if (this.selectable) {\n this.selectionField = this.columns\n .find(column => column.fieldCode === tableReceived?.selectionField);\n }\n }\n\n get inlineActionTrigger() { return this._inlineActionTrigger; }\n get globalActionTrigger() { return this._globalActionTrigger; }\n get selectionActionTrigger() { return this._selectionActionTrigger; }\n get recordSelectionTrigger() { return this._recordSelectionTrigger; }\n get getDataTrigger() { return this._getDataTrigger; }\n get attributeChange() { return this._attributeChange; }\n\n get hasActions() { return (this._actions.length > 0); }\n get selectionFieldName() { return this.selectionField?.fieldCode ?? null; }\n get columnNames() { return Object.keys(this._tableColumnObj); }\n\n get records() { return this.visibleRecords; }\n set records(records) { this.replaceRecords(records); }\n get selectedRecords() {\n return this.tableRecords.filter(rec => rec.selected)\n .map(rec => rec.recordId);\n }\n\n setAttr(name: string, value: any) {\n this[name] = value;\n if (this._formConfig.monitoredTableAttributes.includes(name)) {\n this._attributeChange.next({ name, value });\n }\n }\n\n appendRecords(records) { this.setTableRecords(records, true); }\n replaceRecords(records) { this.setTableRecords(records, false); }\n columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }\n putOnWait() { this.waiting = true; }\n freeWaiting() { this.waiting = false; }\n getActionObject(actionCode) { return this.getAction(actionCode); }\n\n notifyGlobalAction(actionCode) {\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode,\n actionDetail: null\n };\n this._globalActionTrigger.next(tableEvent);\n }\n\n notifyInlineAction(tableActionEvent: TableActionEvent) {\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode: tableActionEvent.actionCode,\n actionDetail: {\n recordId: tableActionEvent.recordId,\n recordData: tableActionEvent.recordData\n }\n };\n this._inlineActionTrigger.next(tableEvent);\n }\n\n notifyRecordSelection(recordId) {\n const record = this.getTableRecord(recordId);\n if (!record) { return; }\n record.toggleSelect();\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode: null,\n actionDetail: {\n recordId: record.recordId,\n recordData: record.recordData\n }\n };\n this.recordSelectionTrigger.next(tableEvent);\n }\n\n notifySelectionAction(actionCode) {\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode,\n actionDetail: {\n selectedRecords: this.selectedRecords\n }\n };\n this._selectionActionTrigger.next(tableEvent);\n }\n\n notifyGetDataAction(requestedPage = null) {\n this.updateVisibleRecords();\n this.requestedPage = requestedPage || this.currentPage;\n const tableEvent: TableEvent = {\n tableCode: this.tableCode,\n actionCode: null,\n actionDetail: null,\n };\n this._getDataTrigger.next(tableEvent);\n }\n\n clean() {\n this.tableRecords = [];\n this.tableRecordObj = {};\n }\n\n selectAll() {\n this.setAttr('allSelected', true);\n this.tableRecords.forEach(record => record.select());\n }\n\n unSelectAll() {\n this.setAttr('allSelected', false);\n this.tableRecords.forEach(record => record.unselect());\n }\n\n setTableRecords(tableRecords, append) {\n if (!append) { this.clean(); }\n const newRecordsObj = { ...this.tableRecordObj };\n const newRecords = [...this.tableRecords];\n for (const tableRecord of tableRecords) {\n const recordReceived: TableRecordData = new TableRecordData(tableRecord, this.columns,\n this.selectionField?.fieldCode);\n const recordIdKey = recordReceived.recordIdKey;\n newRecords.push(recordReceived);\n newRecordsObj[recordIdKey] = recordReceived;\n }\n this.tableRecords = newRecords;\n this.tableRecordObj = newRecordsObj;\n this.updateVisibleRecords();\n }\n\n updateVisibleRecords() {\n if (!this.clientPaging || !this.tableRecords || this.tableRecords.length === 0) {\n this.setAttr('visibleRecords', this.tableRecords);\n }\n const recordsVisible = (this.filterObject.filterModeSimple)\n ? this.tableRecords.filter(record => record.hasPattern(this.filterObject.simpleFilterWords))\n : this.tableRecords.filter(record => record.hasCondition(this.filterObject.advancedFilter));\n this.setAttr('visibleRecords', recordsVisible);\n }\n\n updateFromServer(tableReceived) {\n this.visible = tableReceived?.visible || true;\n this.setAttr('currentPage', parseInt(tableReceived.currentPage, 10) || 1);\n this.totalPages = tableReceived.totalPages || 1;\n this.setAttr('recordsPerPage', tableReceived.recordsPerPage);\n this.recordsNumber = tableReceived.recordsNumber;\n this.setAttr('totalRecordsNumber', tableReceived.totalRecordsNumber);\n this.setAttr('sorting', {\n columnName: tableReceived.sortingColumn || '',\n direction: tableReceived.sortingDirection || ''\n });\n\n this.requestedPage = 1;\n this.waiting = false;\n\n this.clean();\n if (this._appendPages) {\n this.replaceRecords(tableReceived.tableRecords);\n } else {\n this.appendRecords(tableReceived.tableRecords);\n }\n }\n\n getTableRecord(recordId) {\n const recordIdKey = (typeof recordId === 'object') ? JSON.stringify(recordId) : recordId;\n return (this.tableRecordObj && recordId && this.tableRecordObj[recordId])\n ? this.tableRecordObj[recordId] : null;\n }\n\n getAction(actionCode) {\n return (this._actionsObj && actionCode && this._actionsObj[actionCode])\n ? this._actionsObj[actionCode] : null;\n }\n\n getActions(actionClass: string = this._formConfig.tableActions.inline, actionTypes: string[] = null) {\n return this._actions.filter(actionDef => {\n const typeIncluded = (actionTypes) ? actionTypes.includes(actionDef.actionType) : true;\n return actionDef.actionClass === actionClass && typeIncluded;\n });\n }\n\n // Filtros\n\n set simpleFilterText(filterText) {\n let terms = (filterText) ? filterText.split(' ') : null;\n if (terms && terms.length > 0) {\n terms = terms.filter((term) => term !== '');\n }\n this.filterObject.filterModeSimple = true;\n this.filterObject.simpleFilterWords = terms || [];\n }\n\n changeFilterMode(toSimple) {\n this.filterObject.filterModeSimple = toSimple;\n }\n\n addFilterRestriction(filterTerm: AdvancedFilterItem) {\n this.filterObject.advancedFilter.push(filterTerm);\n }\n\n removeFilterRestriction(fieldCode) {\n const filterIndex = this.filterObject.advancedFilter.findIndex((filterDef) => {\n return filterDef.fieldSearch.fieldCode === fieldCode;\n });\n const filterToRemove = this.filterObject.advancedFilter[filterIndex];\n this.filterObject.advancedFilter.splice(filterIndex, 1);\n return filterToRemove;\n }\n\n get availableFilters() {\n return this.filterConfig.filter((fieldSearch) => {\n const currentFilter = this.filterObject.advancedFilter.find((filterItem) => {\n return filterItem.fieldSearch.fieldCode === fieldSearch.fieldCode;\n });\n return !currentFilter;\n });\n }\n\n get currentFilter() {\n const compactFilter: any = {};\n if (this.filterObject.filterModeSimple) {\n compactFilter.simpleFilterWords = this.filterObject.simpleFilterWords;\n } else {\n compactFilter.advancedFilter = [];\n this.filterObject.advancedFilter.forEach((condition) => {\n const simplifiedCondition = {\n fieldCode: condition.fieldSearch.fieldCode,\n fieldAlias: condition.fieldSearch.fieldAlias,\n operator: condition.operator,\n fieldValue1: condition.fieldValue1,\n fieldValue2: condition.fieldValue2,\n };\n compactFilter.advancedFilter.push(simplifiedCondition);\n });\n }\n return compactFilter;\n }\n\n // Ordenamiento\n\n setRequiredOrder(columnField) {\n if (columnField !== this.sorting.columnName) {\n this.setAttr('sorting', {\n columnName: columnField,\n direction: TABLE_SORT_ASCENDING\n });\n } else {\n const tableSort = this.sorting;\n tableSort.direction = (tableSort.direction === TABLE_SORT_ASCENDING) ? TABLE_SORT_DESCENDING : TABLE_SORT_ASCENDING;\n this.setAttr('sorting', tableSort);\n }\n }\n\n localSortData() {\n if (!this.sorting.columnName || !this.sorting.direction) { return; }\n this.tableRecords.sort((a, b) => this.recordCompare(a, b, this.sorting.columnName, this.sorting.direction));\n this.updateVisibleRecords();\n }\n\n recordCompare(recordA: TableRecordData, recordB: TableRecordData, columnCompare, direction) {\n const recordAColumn = recordA.getFieldValue(columnCompare);\n const recordBColumn = recordB.getFieldValue(columnCompare);\n let result = 0;\n if (recordAColumn < recordBColumn) {\n result = -1;\n } else if (recordAColumn > recordBColumn) {\n result = 1;\n }\n return direction === TABLE_SORT_ASCENDING ? result : -result;\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { FieldSearch, Filter, AdvancedFilterItem } from '../../../classes/forms/table/filter';\nimport { TABLE_FILTER_TYPES, TableFilterEvent } from '../../../classes/forms/table/table';\n\n@Component({\n selector: 'lib-table-filter',\n template: `<ng-content></ng-content>`\n})\n\nexport class LibTableFilterComponent implements OnInit {\n simpleSearchString = '';\n selectedField: string;\n filterFieldConfig: FieldSearch;\n selectedOperator: string;\n filterValue1: string;\n filterValue2: string;\n possibleOperators: string[];\n filterObject: Filter = new Filter();\n complexIsCollapsed = true;\n\n @Input() simpleFilter: boolean;\n @Input() complexFilter: boolean;\n @Input() complexFilterConfig: FieldSearch[];\n\n @Output() filterChanged: EventEmitter<object> = new EventEmitter<object>();\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n\n filterHasChanged(changeType) {\n this.complexIsCollapsed = true;\n const eventType = (changeType === 'change')\n ? TABLE_FILTER_TYPES.simpleFilterFinish\n : TABLE_FILTER_TYPES.simpleFilterChange;\n const tableFilterEvent: TableFilterEvent = {\n eventType,\n simpleFilterString: this.simpleSearchString,\n complexFilterItem: null,\n itemName: null,\n };\n this.filterChanged.emit(tableFilterEvent);\n }\n\n selectField() {\n this.selectedOperator = '';\n this.filterValue1 = '';\n this.filterValue2 = '';\n this.filterFieldConfig = this.complexFilterConfig.find((filterConfig) =>\n filterConfig.fieldCode === this.selectedField);\n this.possibleOperators = [];\n if (this.filterFieldConfig && this.filterFieldConfig.operators) {\n this.possibleOperators = this.filterFieldConfig.operators;\n }\n }\n\n addFilterField() {\n const filterCondition: AdvancedFilterItem = {\n fieldSearch: this.filterFieldConfig,\n operator: this.selectedOperator,\n fieldValue1: this.filterValue1,\n fieldValue2: this.filterValue2,\n };\n const tableFilterEvent: TableFilterEvent = {\n eventType: TABLE_FILTER_TYPES.complexFilterAdd,\n simpleFilterString: null,\n complexFilterItem: filterCondition,\n itemName: null,\n\n };\n this.filterChanged.emit(tableFilterEvent);\n this.clearFilterField();\n }\n\n clearFilterField() {\n this.selectedField = '';\n this.selectedOperator = '';\n this.selectedOperator = '';\n this.filterValue1 = '';\n this.filterValue2 = '';\n this.possibleOperators = [];\n }\n\n removeFilterField(fieldCode) {\n const tableFilterEvent: TableFilterEvent = {\n eventType: TABLE_FILTER_TYPES.complexFilterRemove,\n simpleFilterString: null,\n complexFilterItem: null,\n itemName: fieldCode,\n };\n this.filterChanged.emit(tableFilterEvent);\n // Se elimina de la configuración de filtro local\n const idx = this.filterObject.advancedFilter.findIndex(def => def.fieldSearch.fieldCode === fieldCode);\n if (idx >= 0) {\n const filterToRemove = this.filterObject.advancedFilter[idx];\n this.selectedField = filterToRemove.fieldSearch.fieldCode;\n this.selectField();\n this.selectedOperator = filterToRemove.operator;\n this.filterValue1 = filterToRemove.fieldValue1;\n this.filterValue2 = filterToRemove.fieldValue2;\n this.filterObject.advancedFilter.splice(idx, 1);\n }\n }\n}\n","import { Component, Input, Output, OnInit, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport { TableEvent, TableActionEvent } from '../../../classes/forms/table/table';\n\nconst INLINE_ACTION = 'INLINE';\n\n@Component({\n selector: 'lib-table-record-action',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibTableRecordActionComponent implements OnInit {\n @Input() recordId: any;\n @Input() recordData: any;\n @Input() action: any;\n\n @Output() actionSelected: EventEmitter<object> = new EventEmitter<object>();\n\n constructor() { }\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n\n onActivate() {\n const tableEvent: TableActionEvent = {\n actionCode: this.action.actionCode,\n recordId: this.recordId,\n recordData: this.recordData,\n };\n this.actionSelected.emit(tableEvent);\n }\n\n class() { }\n}\n","import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'lib-table-record-field',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibTableRecordFieldComponent implements OnInit {\n @Input() fieldCode: any;\n @Input() fieldType: any;\n @Input() fieldValue: any;\n\n ngOnInit() {\n this.start();\n }\n\n start() { }\n}\n","import { Component, OnInit, Input, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { TableRecordData } from '../../../classes/forms/table/row-data';\nimport { TableActionEvent } from '../../../classes/forms/table/table';\n\nimport { RecordTable, TableEvent, TableFilterEvent, TABLE_FILTER_TYPES } from '../../../classes/forms/table/table';\n\n@Component({\n selector: 'lib-table',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibTableComponent implements OnInit {\n formConfig: any;\n\n // Atributos sincronizados del objeto\n code: any;\n selectionBackend: any;\n simpleFilter: any;\n complexFilter: any;\n allSelected: any;\n currentPage: any;\n visibleRecords: any;\n recordsPerPage: any;\n clientPaging: any;\n columns: any;\n sortable: any;\n sorting: any;\n totalRecordsNumber: any;\n filterConfig: any;\n filterObject: any;\n\n tableFieldStyles: any;\n loaded = false;\n selectable = false;\n hasActions = false;\n inlineActions: any;\n globalActions: any;\n selectionActions: any;\n\n @Input() tableObject: RecordTable;\n @Input() tableRecords: TableRecordData[];\n @Input() disabled: boolean;\n @Input() currentState: string;\n @Input() waiting: boolean;\n\n ngOnInit() {\n if (this.tableObject) {\n this.formConfig = this.tableObject?._formConfig;\n this.tableFieldStyles = this.formConfig.tableFieldStyles;\n this.selectable = this.tableObject.selectable;\n this.hasActions = this.tableObject.hasActions;\n this.tableObject.widget = this;\n this.inlineActions = this.tableObject.getActions(this.formConfig.tableActions.inline);\n this.globalActions = this.tableObject.getActions(this.formConfig.tableActions.global);\n this.selectionActions = this.tableObject.getActions(this.formConfig.tableActions.selection);\n // Inicialización de campos mapeados del objeto\n const mapping = Object.entries(this.formConfig.componentTableAttrMap);\n for (let index = 0; index < mapping.length; index++) {\n const [tableAttr, compAttr] = mapping[index];\n this[compAttr.toString()] = this.tableObject?.[tableAttr.toString()];\n }\n // Subscripción a cambios en atributos\n this.tableObject.attributeChange.subscribe(event => {\n const { name: tableAttr, value } = event;\n const compAttr = this.formConfig.componentTableAttrMap[tableAttr];\n this.hasOwnProperty(compAttr) && (this[compAttr] = value);\n });\n }\n this.start();\n }\n\n start() { }\n\n tableGlobalAction(actionCode: string) {\n this.tableObject.notifyGlobalAction(actionCode);\n }\n\n tableSelectionAction(actionCode: string) {\n this.tableObject.notifySelectionAction(actionCode);\n }\n\n tableActionSelected(actionEvent: TableActionEvent) {\n this.tableObject.notifyInlineAction(actionEvent);\n }\n\n tableColumnSort(columnFieldCode) {\n this.tableObject.setRequiredOrder(columnFieldCode);\n if (this.clientPaging) {\n return this.tableObject.localSortData();\n }\n this.tableObject.notifyGetDataAction();\n }\n\n changePage(requestedPage) {\n if (!this.clientPaging) {\n this.tableObject.notifyGetDataAction(requestedPage);\n }\n }\n\n get records() {\n const currentPageRecords = this.visibleRecords;\n if (this.clientPaging && currentPageRecords && currentPageRecords.length > 0) {\n this.totalRecordsNumber = currentPageRecords.length;\n return currentPageRecords.map((record, i) => ({ id: i + 1, ...record }))\n .slice((this.currentPage - 1) * this.recordsPerPage,\n (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage);\n }\n return currentPageRecords;\n }\n\n applyCurrentFilter(tableFilterEvent: TableFilterEvent) {\n const { eventType } = tableFilterEvent;\n let triggerDataUpdate = false;\n if (eventType === TABLE_FILTER_TYPES.simpleFilterChange || eventType === TABLE_FILTER_TYPES.simpleFilterFinish) {\n this.tableObject.simpleFilterText = tableFilterEvent.simpleFilterString.trim();\n if (this.clientPaging) {\n this.tableObject.setAttr('currentPage', 1);\n this.tableObject.updateVisibleRecords();\n } else if (eventType === TABLE_FILTER_TYPES.simpleFilterFinish) {\n triggerDataUpdate = true;\n }\n }\n if (eventType === TABLE_FILTER_TYPES.complexFilterAdd) {\n this.tableObject.addFilterRestriction(tableFilterEvent.complexFilterItem);\n }\n if (eventType === TABLE_FILTER_TYPES.complexFilterRemove) {\n this.tableObject.removeFilterRestriction(tableFilterEvent.itemName);\n }\n if (triggerDataUpdate) {\n const tableGetDataEvent = {\n tableCode: this.tableObject.tableCode,\n requestedPage: 1,\n };\n this.tableObject.notifyGetDataAction(tableGetDataEvent);\n }\n }\n\n tableSelectionToggle(recordId) {\n this.tableObject.notifyRecordSelection(recordId);\n }\n\n toggleSelectAll() {\n if (this.allSelected) {\n this.tableObject.unSelectAll();\n } else {\n this.tableObject.selectAll();\n }\n }\n\n get availableFilters() {\n return this.tableObject.availableFilters;\n }\n\n get selectedRecords() {\n return this.tableObject.selectedRecords;\n }\n}\n","import { elementTypes } from './form.constants';\n\nexport class RecordFormSubSection {\n visible: boolean;\n _customRender: string;\n subsectionId: string;\n subsectionCode: string;\n subsectionTitle: string;\n visibleStates: string[];\n\n subSectionElements: any[];\n subSectionFields: any[];\n subSectionTables: any[];\n subSectionActions: any[];\n elementsArray: any;\n\n constructor(subsectionReceived, formObject) {\n if (!subsectionReceived) { return; }\n this._customRender = null;\n this.visible = true;\n this.subSectionElements = [];\n this.subSectionFields = [];\n this.subSectionTables = [];\n this.subSectionActions = [];\n this.elementsArray = {};\n this.subsectionId = (subsectionReceived.subsectionId) ? subsectionReceived.subsectionId.toString() : '';\n this.subsectionCode = (subsectionReceived.subsectionCode) ? subsectionReceived.subsectionCode : '';\n this.subsectionTitle = (subsectionReceived.subsectionTitle) ? subsectionReceived.subsectionTitle : '';\n this.visibleStates = subsectionReceived.visibleStates || [];\n if (subsectionReceived.elements) {\n for (const receivedElement of subsectionReceived.elements) {\n let elementObject = null;\n let arrayToAdd = null;\n const { type, code } = receivedElement;\n switch (type) {\n case elementTypes.field:\n elementObject = formObject.getFieldObject(code);\n arrayToAdd = this.subSectionFields;\n break;\n case elementTypes.table:\n elementObject = formObject.getTableObject(code);\n arrayToAdd = this.subSectionTables;\n break;\n case elementTypes.action:\n elementObject = formObject.getActionObject(code);\n arrayToAdd = this.subSectionActions;\n break;\n }\n if (elementObject) {\n elementObject.elementType = type;\n arrayToAdd.push(elementObject);\n this.subSectionElements.push(elementObject);\n this.elementsArray[code] = elementObject;\n }\n }\n }\n }\n\n show() { this.visible = true; }\n hide() { this.visible = false; }\n\n get customRender() { return this._customRender; }\n set customRender(customRenderName) { this._customRender = customRenderName; }\n\n getField(name) {\n return this.subSectionFields.find(fld => fld.name === name);\n }\n\n getFields() {\n return this.subSectionFields;\n }\n\n getFieldNames() {\n return this.subSectionFields.map(field => field.fieldCode);\n }\n\n viewOnState(state) {\n return this.visibleStates.includes(state);\n }\n\n supportMode(state) { return this.viewOnState(state); }\n}\n","import { Subject } from 'rxjs';\nimport { RecordFormSubSection } from './subsection';\n\nexport class RecordFormSection {\n private readonly _activation = new Subject<string>();\n private readonly _inactivation = new Subject<string>();\n visible: boolean;\n visibleStates: string[];\n\n active = false;\n sectionId: string;\n sectionCode: string;\n sectionTitle: string;\n\n subSections: RecordFormSubSection[];\n subSectionsObj: any;\n\n constructor(sectionReceived, formObject) {\n if (!sectionReceived) { return; }\n this.visible = true;\n this.sectionId = (sectionReceived.sectionId) ? sectionReceived.sectionId.toString() : '';\n this.sectionCode = (sectionReceived.sectionCode) ? sectionReceived.sectionCode : '';\n this.sectionTitle = (sectionReceived.sectionTitle) ? sectionReceived.sectionTitle : '';\n this.visibleStates = sectionReceived.visibleStates || [];\n this.subSections = [];\n this.subSectionsObj = {};\n if (sectionReceived.subsections) {\n const subsections = sectionReceived.subsections.map(objDef => {\n let visibleStates = objDef.visibleStates;\n if (!visibleStates) {\n visibleStates = (objDef.subsectionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0);\n }\n if (!visibleStates || visibleStates.length === 0) {\n visibleStates = this.visibleStates;\n }\n if (objDef.elements && Array.isArray(objDef.elements)) {\n objDef.elements = objDef.elements.map(elm => ({ code: elm.elementCode, type: elm.elementTypeName }));\n }\n return { ...objDef, visibleStates };\n });\n for (const subsectionReceived of subsections) {\n const subSectionToAdd = new RecordFormSubSection(subsectionReceived, formObject);\n const subsectionCode = subSectionToAdd.subsectionCode;\n if (subsectionCode) {\n this.subSections.push(subSectionToAdd);\n this.subSectionsObj[subsectionCode] = subSectionToAdd;\n }\n }\n }\n }\n\n get activation() { return this._activation; }\n get inactivation() { return this._inactivation; }\n\n activate() {\n if (!this.active) {\n this.active = true;\n this._activation.next(this.sectionCode);\n }\n }\n\n inactivate() {\n if (this.active) {\n this.active = false;\n this._inactivation.next(this.sectionCode);\n }\n }\n\n show() { this.visible = true; }\n hide() { this.visible = false; }\n get title() { return this.sectionTitle; }\n set title(title) { this.sectionTitle = title; }\n\n getVisibleSubsections(state) {\n return this.subSections.filter(subSection => {\n return subSection.visible && subSection.viewOnState(state);\n });\n }\n\n getSubsection(subSectionCode) {\n return (this.subSectionsObj && this.subSectionsObj[subSectionCode])\n ? this.subSectionsObj[subSectionCode] : null;\n }\n\n getFields() {\n let fieldsArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n fieldsArray = fieldsArray.concat(subSection.getFields());\n }\n }\n return fieldsArray;\n }\n\n getFieldNames() {\n let fieldsArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n fieldsArray = fieldsArray.concat(subSection.getFieldNames());\n }\n }\n return fieldsArray;\n }\n\n getField(name) {\n let field = null;\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n field = subSection.getField(name);\n if (field) {\n return field;\n }\n }\n }\n return null;\n }\n\n supportState(state) { return this.viewOnState(state); }\n viewOnState(state) { return this.visibleStates.includes(state); }\n supportMode(state) { return this.viewOnState(state); }\n}\n","import { Subject } from 'rxjs';\nimport { elementTypes } from './form.constants';\nimport { FormElement } from './element';\n\nconst HEADER = 'HEADER';\n\nexport class FormAction extends FormElement {\n private readonly _actionActivated = new Subject<string>();\n\n inProgress = false;\n newState: string;\n backend: boolean;\n\n actionCode: string;\n actionName: string;\n iconName: string;\n location: string;\n\n restrictedOnField: string;\n restrictedOnOperator: string;\n restrictedOnValue: string;\n customValidation: any;\n customAttributes: any;\n\n constructor(actionDefinition, formConfig) {\n super(actionDefinition, formConfig);\n this.elementType = elementTypes.action;\n this.actionCode = actionDefinition.actionCode ? actionDefinition.actionCode.toString() : '';\n this.actionName = actionDefinition.actionTitle;\n this.iconName = actionDefinition.iconName || this.actionCode;\n this.location = actionDefinition.position || HEADER;\n this.backend = actionDefinition?.serverAction ?? false;\n this.newState = actionDefinition?.newState;\n this.customAttributes = actionDefinition?.customAttributes ?? null;\n\n this.restrictedOnField = actionDefinition.fieldRestrictedCode ? actionDefinition.fieldRestrictedCode.toString() : '';\n this.restrictedOnOperator = actionDefinition.operatorRestricted || '';\n this.restrictedOnValue = actionDefinition.valueRestricted || '';\n this.customValidation = () => true;\n }\n\n get actionActivated() { return this._actionActivated; }\n\n start() { this.inProgress = true; }\n stop() { this.inProgress = false; }\n\n notifyActivation() { this._actionActivated.next(this.actionCode); }\n\n updateFromServer(receivedAction) {\n for (const propertyName in receivedAction) {\n if (propertyName !== 'actionCode' && propertyName !== 'actionId') {\n this[propertyName] = receivedAction[propertyName];\n }\n }\n }\n\n setCustomValidation(callback) { this.customValidation = () => callback(); }\n}\n","import { Subject } from 'rxjs';\nimport { elementTypes, NO_ERROR } from './form.constants';\nimport { FormElement } from './element';\nimport { formatCurrency } from '../utilities';\n\nconst UNDEFINED = 'undefined';\n\nconst DEFAULT_ERROR_TYPE = 'error';\nconst DEFAULT_CAPTURE_TYPE = 'INPUT';\nconst DEFAULT_ALIGNMENT = 'left';\n\nconst STD_MAX_LENGTH = 50;\nconst BIG_MAX_LENGTH = 500;\n\nconst fldAttr = {\n validateOnServer: 'validateOnServer',\n value: '_fieldValue',\n minValue: '_minValue',\n maxValue: '_maxValue',\n maxLength: '_maxLength',\n onValidation: '_onValidation',\n intrinsicErrorMessage: '_intrinsicErrorMessage',\n code: 'fieldCode',\n info: 'fieldInfo',\n defaultValue: 'defaultValue',\n defaultEditable: 'defaultEditable',\n customAttributes: 'customAttributes',\n visibleLabel: 'visibleLabel',\n required: 'fieldRequired',\n hasChanged: 'hasChanged',\n outputOnly: 'outputOnly',\n captureType: 'captureType',\n title: 'fieldTitle',\n type: 'fieldType',\n alignment: 'fieldAlignment',\n format: 'fieldFormat',\n externalValue: 'externalValue',\n tooltipText: 'tooltipText',\n errorType: 'errorType',\n errorCode: 'errorCode',\n errorMessage: 'errorMessage',\n options: 'fieldOptions',\n};\n\nexport class FieldDescriptor extends FormElement {\n private readonly _editionFinish = new Subject<any>();\n private readonly _editionPartial = new Subject<any>();\n private readonly _detailRequest = new Subject<string>();\n private readonly _attributeChange = new Subject<any>();\n\n private validateOnServer: boolean;\n\n _fieldValue: any;\n _minValue: any;\n _maxValue: any;\n _maxLength: number;\n _onValidation: boolean;\n _intrinsicErrorMessage: string;\n\n fieldCode: string;\n fieldInfo: string;\n defaultValue: string;\n defaultEditable: boolean;\n customAttributes: any;\n\n visibleLabel: boolean;\n fieldRequired: boolean;\n hasChanged: boolean;\n outputOnly: boolean;\n captureType: string;\n fieldTitle: string;\n fieldType: string;\n fieldAlignment: string;\n fieldFormat: RegExp;\n externalValue: any;\n tooltipText: string;\n\n errorType: string;\n errorCode: string;\n errorMessage: string;\n\n fieldOptions: {\n fieldOptionValue: string;\n fieldOptionId: string;\n }[];\n\n constructor(inputFieldReceived, formConfig) {\n super(inputFieldReceived, formConfig);\n this.elementType = elementTypes.field;\n const fld = (inputFieldReceived) ? inputFieldReceived : {};\n\n this.setAttr(fldAttr.code, fld.fieldCode);\n this.setAttr(fldAttr.title, fld.fieldTitle ?? this.fieldCode);\n this.setAttr(fldAttr.captureType, fld.captureType ?? DEFAULT_CAPTURE_TYPE);\n this.setAttr(fldAttr.defaultValue, fld.defaultValue ?? null);\n const defaultTypeAlignment = (this._formConfig.tableFieldStyles[this.fieldType] != null)\n ? this._formConfig.tableFieldStyles[this.fieldType]['text-align'] : DEFAULT_ALIGNMENT;\n const fieldAlignment = (fld.alignment != null) ? fld.alignment.toLowerCase() : defaultTypeAlignment;\n this.setAttr(fldAttr.alignment, fieldAlignment);\n this.setAttr(fldAttr.info, fld.info || '');\n let fieldFormat;\n try {\n fieldFormat = (fld.format) ? new RegExp(fld.format) : null;\n } catch (e) {\n fieldFormat = null;\n }\n this.setAttr(fldAttr.format, fieldFormat);\n\n this.setAttr(fldAttr.validateOnServer, fld.serverAction ?? false);\n this.setAttr(fldAttr.customAttributes, fld.customAttributes ?? {});\n\n this.setAttr(fldAttr.tooltipText, fld.tooltip || '');\n this.setAttr(fldAttr.defaultEditable, this.enabled);\n this.setAttr(fldAttr.required, fld.required ?? false);\n this.setError(fld.errorCode, fld.errorMessage, fld.errorType ?? DEFAULT_ERROR_TYPE);\n this.setAttr(fldAttr.outputOnly, fld.outputOnly ?? false);\n const maxLength = fld.maxLength ?? (this.captureType === 'TEXTAREA' ? BIG_MAX_LENGTH : STD_MAX_LENGTH);\n this.setAttr(fldAttr.maxLength, maxLength);\n this.setAttr(fldAttr.intrinsicErrorMessage, this._formConfig.fieldTypeErrMsg[this.fieldType] ?? this._formConfig.fieldTypeErrMsg.DEFAULT);\n\n this.setFieldType(fld.fieldTypeCode);\n this.setEditable(fld.editable ?? true);\n this.setVisibleLabel(fld.visibleLabel ?? true);\n this.setVisibility(fld.visible);\n this.setFieldOptions(fld.fieldOptions);\n this.setValue(fld.fieldValue || this.defaultValue || '');\n }\n\n get name() { return this.fieldCode; }\n get editionFinish() { return this._editionFinish; }\n get attributeChange() { return this._attributeChange; }\n\n get editionPartial() { return this._editionPartial; }\n get detailRequest() { return this._detailRequest; }\n\n get validating() { return this._onValidation; }\n set validating(isValidating: boolean) { this.setAttr(fldAttr.onValidation, isValidating); }\n\n setIntrinsicErrorMessage(message: string) { this.setAttr(fldAttr.intrinsicErrorMessage, message); }\n set intrinsicErrorMessage(message: string) { this.setIntrinsicErrorMessage(message); }\n\n get fieldValue() { return this.getValue(); }\n get required() { return this.fieldRequired; }\n set required(required: boolean) { this.setAttr(fldAttr.required, required ?? false); }\n get maxLength() { return (this._maxLength > 0) ? this._maxLength.toString() : ''; }\n set maxLength(requiredMaxLength: any) {\n if (typeof requiredMaxLength === 'string') {\n this.setAttr(fldAttr.maxLength, parseInt(requiredMaxLength, 10));\n } else if (typeof requiredMaxLength === 'number') {\n this.setAttr(fldAttr.maxLength, requiredMaxLength);\n }\n }\n get value() { return this.getValue(); }\n set value(newValue) { this.setValue(newValue); }\n\n notifyEditionPartial() {\n const intrinsicValidation = true;\n this._editionPartial.next({ code: this.fieldCode, intrinsicValidation });\n }\n\n notifyEditionFinish() {\n let intrinsicValidation = true;\n const fieldDefaultFormat = this._formConfig.fieldTypesPatterns?.[this.fieldType] ?? null;\n const fieldValue = this.getValue();\n if (fieldValue && (fieldDefaultFormat || this.fieldFormat)) {\n intrinsicValidation = (fieldDefaultFormat?.test(fieldValue) ?? true)\n && (this.fieldFormat?.test(fieldValue) ?? true);\n if (!intrinsicValidation) {\n this.setError('99', this._intrinsicErrorMessage);\n }\n }\n this._editionFinish.next({ code: this.fieldCode, intrinsicValidation });\n }\n\n setAttr(name: string, value: any) {\n this[name] = value;\n if (this._formConfig.monitoredFieldAttributes.includes(name)) {\n this._attributeChange.next({ name, value });\n }\n }\n\n notifyEditionDetailRequest() {\n this._detailRequest.next(this.fieldCode);\n }\n\n getCustomAttribute(name) { return this.customAttributes?.[name] ?? null; }\n\n setVisibleLabel(visibleLabel: boolean) { this.setAttr(fldAttr.visibleLabel, visibleLabel); }\n showLabel() { this.setVisibleLabel(true); }\n hideLabel() { this.setVisibleLabel(false); }\n\n setChanged(hasChanged: boolean) { this.setAttr(fldAttr.hasChanged, hasChanged); }\n changed() { this.setChanged(true); }\n\n getRawValue() { return this._fieldValue; }\n setLabel(label) { this.setAttr(fldAttr.title, label); }\n clean() { this.setValue(this.defaultValue || ''); }\n get backend() { return this.validateOnServer; }\n\n setEditable(editable: boolean = true) { (editable) ? this.enable() : this.disable(); }\n\n hasError() { return this.errorCode !== NO_ERROR; }\n resetError() { (this.errorCode !== NO_ERROR) && this.setError(NO_ERROR, null); }\n setError(code, message, type = DEFAULT_ERROR_TYPE) {\n this.setAttr(fldAttr.errorCode, code ?? NO_ERROR);\n this.setAttr(fldAttr.errorType, (this.errorCode === NO_ERROR) ? '' : type);\n this.setAttr(fldAttr.errorMessage, message ?? '');\n }\n\n getError() { return { type: this.errorType, code: this.errorCode, message: this.errorMessage }; }\n get error() { return this.getError(); }\n set error(errorObj) { this.setError(errorObj.code, errorObj.message, errorObj.type ?? DEFAULT_ERROR_TYPE) }\n\n getErrorCode() { return this.getError().code; }\n setErrorCode(code) { this.setError(code, this.errorMessage); }\n getErrorMessage() { return this.getError().message; }\n setErrorMessage(msg) { this.setError(this.errorCode, msg); }\n\n isEmpty() {\n const fieldCurrentValue = this.getValue();\n if (fieldCurrentValue === undefined || fieldCurrentValue === null) {\n return true;\n }\n if ((this.fieldType === this._formConfig.fieldTypes.array || this.fieldType === this._formConfig.fieldTypes.phone)\n && Array.isArray(fieldCurrentValue) && fieldCurrentValue.length === 0) {\n return true;\n };\n return fieldCurrentValue === '';\n }\n\n getValue() {\n switch (this.fieldType) {\n case this._formConfig.fieldTypes.boolean:\n return this._fieldValue ?? false;\n break;\n case this._formConfig.fieldTypes.check:\n return this._fieldValue ?? false;\n break;\n case this._formConfig.fieldTypes.currency:\n return (typeof this._fieldValue === 'string')\n ? this._fieldValue.replace(',', '') : this._fieldValue;\n break;\n default:\n return this._fieldValue;\n break;\n }\n }\n\n updateFromServer(fld) {\n const fieldKeys = Object.keys(fld);\n for (let index = 0; index < fieldKeys.length; index++) {\n const attrName = fieldKeys[index];\n const attrValue = fld[attrName];\n (attrName === this._formConfig.apiFieldAttrs.visible) && this.setVisibility(attrValue);\n (attrName === this._formConfig.apiFieldAttrs.labelVisible) && this.setVisibleLabel(fld.visibleLabel);\n (attrName === this._formConfig.apiFieldAttrs.required) && this.setAttr(fldAttr.required, fld.required ?? false);\n (attrName === this._formConfig.apiFieldAttrs.errorCode) && this.setAttr(fldAttr.errorCode, fld.errorCode);\n (attrName === this._formConfig.apiFieldAttrs.errorMessage) && this.setAttr(fldAttr.errorMessage, fld.errorMessage);\n (attrName === this._formConfig.apiFieldAttrs.tooltip) && this.setAttr(fldAttr.tooltipText, fld.tooltip);\n (attrName === this._formConfig.apiFieldAttrs.info) && this.setAttr(fldAttr.info, fld.info);\n (attrName === this._formConfig.apiFieldAttrs.editable) && this.setEditable(fld.editable);\n (attrName === this._formConfig.apiFieldAttrs.title) && this.setLabel(fld.fieldTitle.toString());\n (attrName === this._formConfig.apiFieldAttrs.value) && (this.setValue(fld.fieldValue) && this.setChanged(false));\n (attrName === this._formConfig.apiFieldAttrs.options) && this.setFieldOptions(fld.fieldOptions);\n (attrName === this._formConfig.apiFieldAttrs.captureType) && this.setAttr(fldAttr.captureType, fld.captureType || 'INPUT');\n (attrName === this._formConfig.apiFieldAttrs.type) && this.setFieldType(fld.fieldTypeCode);\n (attrName === this._formConfig.apiFieldAttrs.maxLength) && this.setAttr(fldAttr.maxLength, fld.maxLength);\n }\n }\n\n setFieldType(inputFieldType) {\n this.setAttr(fldAttr.type, inputFieldType);\n }\n\n format() {\n if (this.fieldType === this._formConfig.fieldTypes.currency) {\n this.setAttr(fldAttr.value, formatCurrency(this._fieldValue));\n }\n }\n\n setMinValue(minValue) {\n if (this.fieldType === this._formConfig.fieldTypes.date\n && this.widget?.setMinValue) {\n this.setAttr(fldAttr.minValue, minValue);\n if (!minValue) {\n this.widget?.setMinValue(false);\n } else {\n const minDate = new Date(minValue);\n this.widget?.setMinValue(minDate);\n }\n }\n }\n\n setMaxValue(maxValue) {\n if (this.fieldType === this._formConfig.fieldTypes.date\n && this.widget?.setMaxValue) {\n this.setAttr(fldAttr.maxValue, maxValue);\n if (!maxValue) {\n this.widget?.setMaxValue(false);\n } else {\n const maxDate = new Date(maxValue);\n this.widget?.setMaxValue(maxDate);\n }\n }\n }\n\n getFieldOptions() {\n return JSON.parse(JSON.stringify(this.fieldOptions));\n }\n\n setFieldOptions(newOptions) {\n if ((this.captureType !== 'LIST' && this.captureType !== 'RADIO')\n || typeof newOptions === UNDEFINED || !newOptions\n || !Array.isArray(newOptions)) {\n return;\n }\n let fieldOptions = newOptions.map(option => {\n if (option.text !== undefined && option.text !== null\n && option.value !== undefined && option.value !== null) {\n return { fieldOptionValue: option.text, fieldOptionId: option.value };\n }\n return { ...option };\n });\n fieldOptions = (fieldOptions && Array.isArray(fieldOptions)\n && fieldOptions.length > 0) ? fieldOptions : [];\n this.setAttr(fldAttr.options, fieldOptions);\n if (this.fieldType === this._formConfig.fieldTypes.array && this.widget) {\n return this.widget?.refereshContent();\n }\n if (this._fieldValue) {\n if (this.fieldType === this._formConfig.fieldTypes.array && Array.isArray(this._fieldValue)) {\n const fieldValue = this._fieldValue?.filter(item =>\n this.fieldOptions.find(opt => opt.fieldOptionId === item)\n );\n this.setAttr(fldAttr.value, fieldValue);\n } else {\n const valInOptions = this.fieldOptions\n .find(item => item.fieldOptionId === this._fieldValue);\n if (!valInOptions) {\n this.setValue('');\n }\n }\n }\n if (this.fieldRequired && this.fieldOptions.length === 1) {\n this.setValue(this.fieldOptions[0].fieldOptionId);\n if (this.widget?.onChangeContent) {\n this.widget?.onChangeContent();\n }\n }\n }\n\n setValue(newValue, widgetUpdate = true) {\n if (typeof newValue === UNDEFINED || newValue === null) {\n return true;\n }\n let newFinalValue;\n switch (this.fieldType) {\n case 'BOOLEAN':\n newFinalValue = !!newValue;\n break;\n case this._formConfig.fieldTypes.boolean:\n newFinalValue = !!newValue;\n break;\n case this._formConfig.fieldTypes.check:\n newFinalValue = !!newValue;\n break;\n case this._formConfig.fieldTypes.array:\n if (newValue === null || newValue === '') {\n newFinalValue = [];\n } else if (!Array.isArray(newValue)) {\n if (typeof (newValue) !== 'string') {\n newValue = newValue.toString();\n }\n newFinalValue = newValue.split(',');\n } else {\n newFinalValue = newValue;\n }\n break;\n case this._formConfig.fieldTypes.map:\n newFinalValue = newValue;\n if (newFinalValue && this.widget && widgetUpdate) {\n const latitude = parseFloat(newFinalValue[0]);\n const longitude = parseFloat(newFinalValue[1]);\n this.widget?.setLocation(latitude, longitude);\n }\n break;\n case this._formConfig.fieldTypes.currency:\n newFinalValue = formatCurrency(newValue);\n break;\n default:\n newFinalValue = newValue;\n break;\n }\n if (this._fieldValue !== newFinalValue) {\n this.setChanged(true);\n this.setAttr(fldAttr.value, newFinalValue);\n }\n return true;\n }\n}\n","import { RecordFormSection } from './section';\nimport { FormAction } from './action';\nimport { FieldDescriptor } from './field';\nimport { RecordTable } from './table/table';\nimport { NO_ERROR, HEADER } from './form.constants';\n\ninterface Transition {\n name: string;\n source: string;\n destination: string;\n}\n\ninterface StateFlow {\n defaultState: string;\n states: string[];\n transitions: Transition[];\n}\n\nexport class FormStructureAndData {\n state: string;\n _name: string;\n _formConfig: any;\n private _title: string;\n private _stateFlow: StateFlow;\n private _fields: FieldDescriptor[];\n private _fieldsObj = {};\n private _actions: FormAction[];\n private _actionsObj = {};\n private _tables: RecordTable[];\n private _tableObj = {};\n private _sections: RecordFormSection[];\n private _sectionsObj = {};\n private _immutableData = {};\n private _extraInfo = {};\n\n constructor(definitionReceived, formConfig) {\n this._formConfig = formConfig;\n this.state = '';\n this._actions = [];\n this._fields = [];\n this._tables = [];\n this._sections = [];\n this._stateFlow = {\n defaultState: '',\n states: [],\n transitions: [],\n };\n if (!definitionReceived) { return; }\n this._name = (definitionReceived.form && definitionReceived.form.formCode)\n ? definitionReceived.form.formCode : this._name;\n this._title = (definitionReceived.form && definitionReceived.form.formTitle)\n ? definitionReceived.form.formTitle : '';\n this.setStateFlow(definitionReceived?.states, definitionReceived?.transitions,\n definitionReceived?.defaultState);\n this.immutableData = definitionReceived.immutableData;\n this.extraInfo = definitionReceived.extraInfo;\n\n if (definitionReceived.actions) {\n const formActions = definitionReceived.actions.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates;\n if (!visibleStates) {\n visibleStates = (objDef.actionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n enabledStates = [...visibleStates];\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const actionReceived of formActions) {\n const globalAction = new FormAction(actionReceived, this._formConfig);\n const globalActionCode = globalAction.actionCode;\n if (globalActionCode) {\n this._actions.push(globalAction);\n this._actionsObj[globalActionCode] = globalAction;\n }\n }\n }\n\n if (definitionReceived.fields) {\n const formFields = definitionReceived.fields.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates || objDef.editableStates;\n if (!visibleStates) {\n visibleStates = (objDef.fieldModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n enabledStates = [...visibleStates];\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const fieldReceived of formFields) {\n const fieldToAdd = new FieldDescriptor(fieldReceived, this._formConfig);\n const fieldCode = fieldToAdd.fieldCode;\n if (fieldCode) {\n this._fields.push(fieldToAdd);\n this._fieldsObj[fieldCode] = fieldToAdd;\n }\n }\n }\n\n if (definitionReceived.tables) {\n const tables = definitionReceived.tables.map(objDef => {\n let visibleStates = objDef.visibleStates;\n let enabledStates = objDef.enabledStates || objDef.editableStates;\n if (!visibleStates) {\n visibleStates = (objDef.tableModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n enabledStates = [...visibleStates];\n }\n if (!visibleStates || visibleStates.length === 0) {\n visibleStates = this._formConfig.defaultStateFlow.states;\n }\n return { ...objDef, visibleStates, enabledStates };\n });\n for (const tableReceived of tables) {\n const tableToAdd = new RecordTable(tableReceived, this._formConfig);\n const tableCode = tableToAdd.tableCode;\n if (tableCode) {\n this._tables.push(tableToAdd);\n this._tableObj[tableCode] = tableToAdd;\n }\n }\n }\n\n if (definitionReceived.sections) {\n const formSections = definitionReceived.sections.map(objDef => {\n let visibleStates = objDef.visibleStates;\n if (!visibleStates) {\n visibleStates = (objDef.sectionModes || '').split(',')\n .map(state => state.trim())\n .filter(state => state.length > 0) || [];\n }\n return { ...objDef, visibleStates };\n });\n for (const sectionReceived of formSections) {\n const sectionToAdd = new RecordFormSection(sectionReceived, this);\n const sectionCode = sectionToAdd.sectionCode;\n if (sectionCode) {\n this._sections.push(sectionToAdd);\n this._sectionsObj[sectionCode] = sectionToAdd;\n }\n }\n }\n }\n\n set immutableData(immutableData) { Object.assign(this._immutableData, immutableData); }\n set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }\n\n get defaultState() { return this._stateFlow.defaultState; }\n get title() { return this._title; }\n set title(title) { this._title = title; }\n get name() { return this._name; }\n set name(name) { this._name = name; }\n\n changeState(newState) {\n if (!newState || !this.supportState(newState)) {\n return false;\n }\n if (!this.state) {\n this.state = newState;\n } else {\n const transitionToChange = this._stateFlow.transitions.find(trns =>\n trns.source === this.state && trns.destination === newState);\n if (transitionToChange) {\n this.state = newState;\n }\n }\n return (this.state === newState);\n }\n\n setStateFlow(states?, transitions?, defaultState?) {\n if (!states || !transitions) {\n this._stateFlow = JSON.parse(JSON.stringify(this._formConfig.defaultStateFlow));\n return;\n }\n this._stateFlow.states = states;\n this._stateFlow.defaultState = defaultState || this._stateFlow.states[0];\n this._stateFlow.transitions = transitions.map(transition => {\n const name = transition.name;\n const source = (this._stateFlow.states.includes(transition.source)) ? transition.source : '';\n const destination = (this._stateFlow.states.includes(transition.destination)) ? transition.destination : '';\n return { name, source, destination };\n }).filter(item => item.name && item.source && item.destination);\n }\n\n supportState(state) { return this._stateFlow.states?.includes(state); }\n supportMode(state) { return this.supportState(state); }\n\n\n get immutableData() {\n const data = {};\n const objectNames = Object.keys(this._immutableData);\n for (let index = 0; index < objectNames.length; index++) {\n const name = objectNames[index];\n data[name] = this.getImmutableElement(name);\n }\n return data;\n }\n\n getImmutableElement(name) { return this._immutableData?.[name]?.value ?? null; }\n getExtraInfo(name) { return this._extraInfo?.[name]?.value ?? null; }\n\n get extraInfo() {\n const data = {};\n const objectNames = Object.keys(this._extraInfo);\n for (let index = 0; index < objectNames.length; index++) {\n const name = objectNames[index];\n data[name] = this.getExtraInfo(name);\n }\n return data;\n }\n\n getFields() { return this._fields; }\n\n getStates() {\n return this._stateFlow.states;\n }\n\n getFieldNames() {\n return this._fields.map(field => field.fieldCode);\n }\n\n getActions() {\n return this._actions;\n }\n\n getHeaderActions() {\n return this._actions.filter(actionItem => actionItem.location === HEADER);\n }\n\n getFieldObject(elementId) {\n return (this._fieldsObj && elementId && this._fieldsObj[elementId])\n ? this._fieldsObj[elementId] : null;\n }\n\n getTableObject(elementId) {\n return (this._tableObj && elementId && this._tableObj[elementId])\n ? this._tableObj[elementId] : null;\n }\n\n getActionObject(elementId) {\n return (this._actionsObj && elementId && this._actionsObj[elementId])\n ? this._actionsObj[elementId] : null;\n }\n\n getSubSection(sectionCode, subsectionCode) {\n const section = (this._sectionsObj && this._sectionsObj[sectionCode])\n ? this._sectionsObj[sectionCode] : null;\n return (section) ? section.getSubsection(subsectionCode) : null;\n }\n\n get actions() { return this._actionsObj; }\n\n getSection(sectionCode) {\n return (this._sectionsObj && this._sectionsObj[sectionCode])\n ? this._sectionsObj[sectionCode] : null;\n }\n sections() { return this.getSections(); }\n sectionTitles() { return this.getSectionsTitles(); }\n\n getSections() {\n return this._sections;\n }\n\n get visibleSections() {\n return this._sections.filter(sec => sec.visible);\n }\n\n numSections() {\n return this._sections.length;\n }\n\n getSectionsTitles() {\n return this._sections.map(formSection => formSection.sectionTitle);\n }\n\n getSectionObject(elementId) {\n return (this._sectionsObj && elementId && this._sectionsObj[elementId])\n ? this._sectionsObj[elementId] : null;\n }\n tables() { return this.getTables(); }\n\n getTables() {\n return this._tables;\n }\n\n cleanData() {\n if (this._fields) {\n for (const recordField of this._fields) {\n recordField.setValue(recordField.defaultValue);\n }\n }\n if (this._tables) {\n for (const formTable of this._tables) {\n formTable.clean();\n }\n }\n }\n\n showSection(sectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n return (sectionObject) ? sectionObject.show() : null;\n }\n\n hideSection(sectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n return (sectionObject) ? sectionObject.hide() : null;\n }\n\n activeSection() {\n const activeSection = this._sections.find(sectionObj => sectionObj.active);\n return activeSection.sectionCode;\n }\n\n activateSection(sectionCode) {\n this._sections.forEach(sectionObj => {\n if (sectionObj) { sectionObj.inactivate(); }\n });\n const sectionObject = this.getSectionObject(sectionCode);\n return (sectionObject) ? sectionObject.activate() : null;\n }\n\n showSections(sectionArray) {\n const sectionNames = (Array.isArray(sectionArray)) ? sectionArray : [sectionArray];\n sectionNames.forEach(sectionCode => this.showSection(sectionCode));\n }\n\n hideSections(sectionArray) {\n const sectionNames = (Array.isArray(sectionArray)) ? sectionArray : [sectionArray];\n sectionNames.forEach(sectionCode => this.hideSection(sectionCode));\n }\n\n showSubSection(sectionCode, subSectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n return (subSectionObject) ? subSectionObject.show() : null;\n }\n\n hideSubSection(sectionCode, subSectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n return (subSectionObject) ? subSectionObject.hide() : null;\n }\n\n showSubSections(sectionCode, subSectionArray) {\n if (subSectionArray && subSectionArray.length > 0) {\n const sectionObject = this.getSectionObject(sectionCode);\n for (const subSectionCode of subSectionArray) {\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n if (subSectionObject) { subSectionObject.show(); }\n }\n }\n }\n\n hideSubSections(sectionCode, subSectionArray) {\n if (subSectionArray && subSectionArray.length > 0) {\n const sectionObject = this.getSectionObject(sectionCode);\n for (const subSectionCode of subSectionArray) {\n const subSectionObject = (sectionObject) ? sectionObject.getSubsection(subSectionCode) : null;\n if (subSectionObject) { subSectionObject.hide(); }\n }\n }\n }\n\n showAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.show() : null;\n }\n\n hideAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.hide() : null;\n }\n\n showActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.showAction(actionCode));\n }\n\n hideActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.hideAction(actionCode));\n }\n\n enableAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.enable() : null;\n }\n\n disableAction(actionCode) {\n const actionObject = this.getActionObject(actionCode);\n return (actionObject) ? actionObject.disable() : null;\n }\n\n enableActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.enableAction(actionCode));\n }\n\n disableActions(actionArray) {\n const actionNames = (Array.isArray(actionArray)) ? actionArray : [actionArray];\n actionNames.forEach(actionCode => this.disableAction(actionCode));\n }\n\n get fields() { return this._fieldsObj; }\n\n enableField(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.enable() : null;\n }\n\n disableField(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.disable() : null;\n }\n\n getFieldValue(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.getValue() : null;\n }\n\n getFieldsValues(fieldCodesArray) {\n if (!fieldCodesArray || !Array.isArray(fieldCodesArray) || fieldCodesArray.length === 0) {\n return null;\n }\n const resultObject = {};\n for (let index = 0; index < fieldCodesArray.length; index++) {\n const fieldCode = fieldCodesArray[index];\n if (fieldCode) {\n resultObject[fieldCode] = this._fieldsObj?.[fieldCode]?.getValue() ?? null;\n }\n }\n return resultObject;\n }\n\n getFieldOptions(fieldCode) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.getFieldOptions() : null;\n }\n\n setFieldValue(fieldCode, fieldValue) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.setValue(fieldValue) : null;\n }\n\n setFieldError(code, message, type = 'error') {\n const fieldObject = this.getFieldObject(code);\n return (fieldObject) ? fieldObject.setError(code, message, type) : null;\n }\n\n setFieldIntrinsicErrorMessage(code, message) {\n const fieldObject = this.getFieldObject(code);\n return (fieldObject) ? fieldObject.setIntrinsicErrorMessage(message) : null;\n }\n\n setFieldRequired(fieldCode, required) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.required = required : null;\n }\n\n setFieldErrorMessage(fieldCode, errorMessage) {\n const fieldObject = this.getFieldObject(fieldCode);\n return (fieldObject) ? fieldObject.setErrorMessage(errorMessage) : null;\n }\n\n setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {\n const fieldObject = this.getFieldObject(fieldCode);\n if (fieldObject && optionsArray && optionsArray.length > 0) {\n const fieldOptions = [];\n for (const optionItem of optionsArray) {\n const fieldOption = {\n fieldOptionId: optionItem[idAttribute],\n fieldOptionValue: optionItem[nameAttribute]\n };\n fieldOptions.push(fieldOption);\n }\n fieldObject.setFieldOptions(fieldOptions);\n }\n }\n\n getFieldSet(filterFunc, fieldArray = null, sectionCode = null, subSectionCode = null) {\n let fieldUniverse = null;\n if (fieldArray && Array.isArray(fieldArray) && fieldArray.length > 0) {\n fieldUniverse = fieldArray;\n } else if (sectionCode && !subSectionCode) {\n const sectionObject = this.getSectionObject(sectionCode);\n fieldUniverse = sectionObject?.getFieldNames();\n } else if (sectionCode && subSectionCode) {\n const subSectionObject = this.getSubSection(sectionCode, subSectionCode);\n fieldUniverse = subSectionObject?.getFieldNames();\n } else {\n fieldUniverse = this.getFieldNames();\n }\n if (!filterFunc) {\n return fieldUniverse;\n }\n return fieldUniverse.filter(fld => {\n const fieldObject = this.getFieldObject(fld);\n return (fieldObject && filterFunc(fieldObject));\n });\n }\n\n applyProcessToFieldSet(processFunc, fieldArray = null, sectionCode = null, subSectionCode = null) {\n const fieldUniverse = this.getFieldSet(null, fieldArray, sectionCode, subSectionCode);\n let fieldSetSize = 0;\n if (fieldUniverse && processFunc) {\n for (const fieldCode of fieldUniverse) {\n const fieldObject = this.getFieldObject(fieldCode);\n if (fieldObject) {\n try {\n processFunc(fieldObject);\n fieldSetSize += 1;\n } catch (e) {\n console.log(`Error procesando funcion en campo ${fieldObject}: ${e}`);\n }\n }\n }\n }\n return fieldSetSize;\n }\n\n showFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.show(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n hideFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.hide(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n showLabelFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.showLablel(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n hideLabelFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.hideLabel(),\n fieldArray, sectionCode, subSectionCode);\n }\n // Para deprecar\n enableEditFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.enableFields(fieldArray, sectionCode, subSectionCode);\n }\n // Para deprecar\n disableEditFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.disableFields(fieldArray, sectionCode, subSectionCode);\n }\n\n enableFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.enable(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n disableFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fld => fld.disable(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n cleanFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fieldObject => {\n fieldObject.clean('');\n fieldObject.setErrorMessage('');\n }, fieldArray, sectionCode, subSectionCode);\n }\n\n getRequiredFields(fieldArray, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => fld.fieldRequired, fieldArray,\n sectionCode, subSectionCode);\n }\n\n getRequiredEmptyFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => fld.fieldRequired && fld.isEmpty(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n getChangedFields(fieldArray, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => !fld.outputOnly && fld.hasChanged(),\n fieldArray, sectionCode, subSectionCode);\n }\n\n getFieldsWithValidationIssues(fieldArray, sectionCode = null, subSectionCode = null) {\n return this.getFieldSet(fld => fld.errorCode !== NO_ERROR,\n fieldArray, sectionCode, subSectionCode);\n }\n\n tagFieldsWithError(errorMessage, fieldArray = null, sectionCode = null, subSectionCode = null) {\n return this.applyProcessToFieldSet(fieldObject => {\n fieldObject.setErrorMessage(errorMessage);\n }, fieldArray, sectionCode, subSectionCode);\n }\n\n cleanErrorFields(fieldArray = null, sectionCode = null, subSectionCode = null) {\n this.tagFieldsWithError('', fieldArray, sectionCode, subSectionCode);\n }\n\n tagEmptyRequiredFields(errorMessage, fieldArray = null, sectionCode = null, subSectionCode = null) {\n const pendingFields = this.getRequiredEmptyFields(fieldArray, sectionCode, subSectionCode);\n if (pendingFields && pendingFields.length > 0) {\n this.tagFieldsWithError(errorMessage, pendingFields);\n return true;\n }\n return false;\n }\n\n cleanTable(tableCode) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.clean() : null;\n }\n\n getTableRecord(tableCode, recordId) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.getTableRecord(recordId) : null;\n }\n\n hideTable(tableCode) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.hide() : null;\n }\n\n showTable(tableCode) {\n const tableObject = this.getTableObject(tableCode);\n return (tableObject) ? tableObject.show() : null;\n }\n\n showTables(tableArray) {\n const tableNames = (Array.isArray(tableArray)) ? tableArray : [tableArray];\n tableNames.forEach(tableCode => this.showTable(tableCode));\n }\n\n hideTables(tableArray) {\n const tableNames = (Array.isArray(tableArray)) ? tableArray : [tableArray];\n tableNames.forEach(tableCode => this.hideTable(tableCode));\n }\n\n /** payload para servicios Tuain */\n getPayload() {\n const formData = {\n fields: [],\n tables: [],\n };\n const formFields = this.getFields();\n if (formFields && formFields.length > 0) {\n for (const fieldDescriptor of formFields) {\n if (!fieldDescriptor.outputOnly) {\n const formField = {\n fieldCode: fieldDescriptor.fieldCode,\n fieldValue: fieldDescriptor.getValue(),\n editable: !fieldDescriptor.disabled,\n visible: fieldDescriptor.visible,\n required: fieldDescriptor.fieldRequired,\n fieldOptions: '',\n };\n formData.fields.push(formField);\n }\n }\n }\n const tables = this.getTables();\n if (tables && tables.length > 0) {\n for (const tableDescriptor of tables) {\n const formTable = {\n tableCode: tableDescriptor.tableCode,\n visible: tableDescriptor.visible,\n currentPage: tableDescriptor.currentPage,\n requestedPage: tableDescriptor.requestedPage,\n recordsPerPage: tableDescriptor.recordsPerPage,\n currentFilter: tableDescriptor.currentFilter,\n sortingColumn: tableDescriptor.sorting.columnName,\n sortingDirection: tableDescriptor.sorting.direction,\n };\n formData.tables.push(formTable);\n }\n }\n return formData;\n }\n}\n","import { nanoid } from 'nanoid';\n\nexport class LibFormManagerService {\n pageStack: any[];\n\n constructor() {\n this.cleanStack();\n }\n\n // Métodos virtuales para las aplicaciones\n getFormDefinition(formCode) { }\n execServerAction(actionDetail) { }\n goToForm(formCode, token, subject) { }\n loadStack() { }\n saveStack() { }\n\n cleanStack() { this.pageStack = []; }\n resetPageStack() { this.cleanStack() }\n\n findFormInStack(token) {\n const index = this.pageStack.findIndex(item => item?.token === token);\n const data = (index >= 0) ? this.pageStack[index] : null;\n return { index, data };\n }\n\n replaceItem(token, formInfo) {\n if (!token || !formInfo) { return; }\n const { index, data: storedForm } = this.findFormInStack(token);\n let updatedForm: any = null;\n if (index >= 0) {\n updatedForm = { ...storedForm };\n updatedForm.subject = formInfo?.subject ?? storedForm.subject;\n updatedForm.state = formInfo?.state ?? storedForm.state;\n Object.assign(updatedForm.fields, formInfo.fields);\n Object.assign(updatedForm.extra, formInfo.extra);\n this.pageStack[index] = updatedForm;\n this.saveStack();\n }\n }\n\n stack(origin, target) {\n const token = nanoid(6);\n this.replaceItem(target.originToken, origin);\n this.pageStack.push({ token, ...target });\n this.saveStack();\n return token;\n }\n\n unstack(token = null) {\n let index = (token) ? this.findFormInStack(token).index : this.pageStack.length - 2;\n let formInfo = null;\n if (index >= 0) {\n formInfo = this.pageStack[index];\n this.pageStack.splice(index + 1);\n this.saveStack();\n }\n return formInfo;\n }\n\n getFormInfo(token: string) {\n const { data } = this.findFormInStack(token);\n return {\n token: data?.token,\n subject: data?.subject,\n state: data?.state,\n originToken: data?.originToken,\n fields: data?.fields ?? {},\n extra: data?.extra ?? {}\n };\n }\n\n openForm(origin: any, target: any) {\n (!origin) && this.cleanStack();\n target.originToken = origin?.token ?? null;\n const token = this.stack(origin, target);\n this.goToForm(target.name, token, target.subject);\n }\n\n backTo(targetToken = null) {\n const formInfo = this.unstack(targetToken);\n formInfo && formInfo.name && this.goToForm(formInfo.name, formInfo.token, formInfo.subject);\n }\n}\n","import { ReplaySubject } from 'rxjs';\n\nexport class LibEventManagerService {\n eventSubjects: any = {};\n\n constructor(eventNames) {\n eventNames.forEach((name) => { this.addEventName(name); });\n }\n\n addEventName(name) {\n if (!this.eventSubjects[name]) {\n const newEventSubject: ReplaySubject<any> = new ReplaySubject(1);\n this.eventSubjects[name] = newEventSubject;\n }\n }\n\n getEventNames() { return Object.keys(this.eventSubjects); }\n getSubject(eventClassName) { return eventClassName ? this.eventSubjects[eventClassName] : null; }\n subscribe(eventClassName, callback) { this.getSubject(eventClassName).subscribe(callback); }\n next(eventClassName, data) { this.getSubject(eventClassName).next(data); }\n}\n","export class LibFileManagementService {\n openFile(fileBase64Data, fileName, fileType) { }\n saveFileFromURL(fileUrl, fullFileName = null) { }\n saveFile(fileBase64Data, fileName, fileType) { }\n}\n\n","import { Component } from '@angular/core';\nimport { FormStructureAndData } from '../../classes/forms/form';\nimport { LibFormManagerService } from '../../services/form-manager.service';\nimport { LibEventManagerService } from '../../services/event-manager.service';\nimport { LibFileManagementService } from '../../services/file-manager.service';\nimport { formActions, NO_ERROR } from '../../classes/forms/form.constants';\n\nconst PAYLOAD_VERSION = 'TUAINEXCHANGE_1.0';\nconst INLINE_ACTION = 'INLINE';\nconst GLOBAL_ACTION = 'GLOBAL';\nconst GET_DATA_ACTION = 'GETDATA';\n\nconst SUBJECT = 'subject';\nconst TOKEN = 'token';\n\n@Component({\n template: `<ng-content></ng-content>`\n})\nexport class BasicFormComponent {\n formConfig: any;\n name: string;\n _formRoute: string;\n formSubject: string;\n _errorType: '';\n errorCode = '';\n errorMessage = '';\n errorDetail = '';\n\n formStructure: FormStructureAndData = null;\n fields: any;\n actions: any;\n\n controlToken = null;\n originToken: string;\n inputDataFields = {};\n extraData: any = {};\n\n definitionObtained = false;\n formVisible = false;\n busy = false;\n\n formSectionsActivate = {};\n formSectionsInactivate = {};\n formActionsStart = {};\n formActionsFinish = {};\n fieldInputValidation = {};\n fieldValidationsStart = {};\n fieldValidationsFinish = {};\n // Callback de acciones de tablas\n tableSelectionsStart = {};\n tableSelectionsFinish = {};\n tableActionsStart = {};\n tableActionsFinish = {};\n tableGetDataStart = {};\n tableGetDataFinish = {};\n\n protected _eventEmiter: LibEventManagerService;\n\n constructor(\n protected formManagerService: LibFormManagerService,\n protected _eventManager: LibEventManagerService,\n protected fileMgmtServices: LibFileManagementService) {\n this._eventEmiter = this._eventManager;\n this.cleanStart();\n this.customPreProcessing();\n }\n\n get inServerProcess() { return this.busy; }\n\n setConfig(formConfig) {\n this.formConfig = formConfig;\n }\n\n cleanStart() {\n this._errorType = '';\n this.errorCode = '';\n this.errorMessage = '';\n this.errorDetail = '';\n this.formStructure = null;\n this.fields = null;\n this.actions = null;\n this.controlToken = null;\n this.inputDataFields = {};\n this.definitionObtained = false;\n // Se limpian los manejadores de eventos\n this.formVisible = false;\n this.busy = false;\n this.formSectionsActivate = {};\n this.formSectionsInactivate = {};\n this.formActionsStart = {};\n this.formActionsFinish = {};\n this.fieldInputValidation = {};\n this.fieldValidationsStart = {};\n this.fieldValidationsFinish = {};\n this.tableSelectionsStart = {};\n this.tableSelectionsFinish = {};\n this.tableActionsStart = {};\n this.tableActionsFinish = {};\n this.tableGetDataStart = {};\n this.tableGetDataFinish = {};\n }\n\n get form() { return this.formStructure; }\n\n get currentState() { return this.formStructure.state; }\n set currentState(state) { this.formStructure.changeState(state); }\n get currentMode() { return this.currentState; }\n get immutableData() { return this.formStructure.immutableData }\n get extraInfo() { return this.formStructure.extraInfo }\n\n // Métodos Pass-through hacia el contenido y estructura del formulario\n supportState(state) { return this.formStructure.supportState(state); }\n supportMode(state) { return this.supportState(state); }\n getTitle() { return this.formStructure.title; }\n setTitle(title: string) { this.formStructure.title = title; }\n getImmutableElement(name) { return this.formStructure.getImmutableElement(name); }\n getExtraInfo(name) { return this.formStructure.getExtraInfo(name); }\n cleanData() { return this.formStructure.cleanData(); }\n getFields() { return this.formStructure.getFields(); }\n getFieldNames() { return this.formStructure.getFieldNames(); }\n getFieldObject(elementId) { return this.formStructure.getFieldObject(elementId); }\n getField(fieldCode) { return this.getFieldObject(fieldCode); }\n enableField(fieldCode) { return this.formStructure.enableField(fieldCode); }\n disableField(fieldCode) { return this.formStructure.disableField(fieldCode); }\n getFieldValue(fieldCode) { return this.formStructure.getFieldValue(fieldCode); }\n getFieldsValues(fieldCodesArray) { return this.formStructure.getFieldsValues(fieldCodesArray); }\n getFieldOptions(fieldCode) { return this.formStructure.getFieldOptions(fieldCode); }\n setFieldValue(fieldCode, fieldValue) { return this.formStructure.setFieldValue(fieldCode, fieldValue); }\n setFieldRequired(fieldCode, required: boolean) { return this.formStructure.setFieldRequired(fieldCode, required); }\n setFieldErrorMessage(fieldCode, errorMessage) { return this.formStructure.setFieldErrorMessage(fieldCode, errorMessage); }\n setFieldError(code, message, type = 'error') { return this.formStructure.setFieldError(code, message, type); }\n setFieldIntrinsicErrorMessage(code, message) { return this.formStructure.setFieldIntrinsicErrorMessage(code, message); }\n\n setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {\n return this.formStructure.setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute);\n }\n getFieldSet(filterFunc?, fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getFieldSet(filterFunc, fieldArray, sectionCode, subSectionCode);\n }\n applyProcessToFieldSet(processFunc, fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.applyProcessToFieldSet(processFunc, fieldArray, sectionCode, subSectionCode);\n }\n applyProcessToAllFields(processFunc) { return this.formStructure.applyProcessToFieldSet(processFunc); }\n cleanFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.cleanFields(fieldArray, sectionCode, subSectionCode);\n }\n getRequiredFields(fieldArray, sectionCode?, subSectionCode?) {\n return this.formStructure.getRequiredFields(fieldArray, sectionCode, subSectionCode);\n }\n getRequiredEmptyFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getRequiredEmptyFields(fieldArray, sectionCode, subSectionCode);\n }\n getChangedFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getChangedFields(fieldArray, sectionCode, subSectionCode);\n }\n getFieldsWithValidationIssues(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.getFieldsWithValidationIssues(fieldArray, sectionCode, subSectionCode);\n }\n tagFieldsWithError(errorMessage, fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.tagFieldsWithError(errorMessage, fieldArray, sectionCode, subSectionCode);\n }\n cleanErrorFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.cleanErrorFields(fieldArray, sectionCode, subSectionCode);\n }\n showLabelFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.showLabelFields(fieldArray, sectionCode, subSectionCode);\n }\n hideLabelFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.hideLabelFields(fieldArray, sectionCode, subSectionCode);\n }\n enableFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.enableFields(fieldArray, sectionCode, subSectionCode);\n }\n disableFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.disableFields(fieldArray, sectionCode, subSectionCode);\n }\n enableEditFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.enableEditFields(fieldArray, sectionCode, subSectionCode);\n }\n disableEditFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.disableEditFields(fieldArray, sectionCode, subSectionCode);\n }\n showFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.showFields(fieldArray, sectionCode, subSectionCode);\n }\n hideFields(fieldArray?, sectionCode?, subSectionCode?) {\n return this.formStructure.hideFields(fieldArray, sectionCode, subSectionCode);\n }\n\n getHeaderActions() { return this.formStructure.getHeaderActions(); }\n getActionObject(elementId) { return this.formStructure.getActionObject(elementId); }\n getAction(actionCode) { return this.getActionObject(actionCode); }\n getActionDefinition(actionCode) { return this.getActionObject(actionCode); }\n showAction(actionCode) { return this.formStructure.showAction(actionCode); }\n hideAction(actionCode) { return this.formStructure.hideAction(actionCode); }\n showActions(actionArray) { return this.formStructure.showActions(actionArray); }\n hideActions(actionArray) { return this.formStructure.hideActions(actionArray); }\n enableAction(actionCode) { return this.formStructure.enableAction(actionCode); }\n disableAction(actionCode) { return this.formStructure.disableAction(actionCode); }\n enableActions(actionArray) { return this.formStructure.enableActions(actionArray); }\n disableActions(actionArray) { return this.formStructure.disableActions(actionArray); }\n\n getStates() { return this.formStructure.getStates(); }\n getSections() { return this.formStructure.getSections(); }\n get visibleSections() { return this.formStructure.visibleSections; }\n\n getSection(sectionCode) { return this.formStructure.getSection(sectionCode); }\n activateSection(sectionCode) { return this.formStructure.activateSection(sectionCode); }\n getSubSection(sectionCode, subsectionCode) { return this.formStructure.getSubSection(sectionCode, subsectionCode); }\n numSections() { return this.formStructure.numSections(); }\n getSectionsTitles() { return this.formStructure.getSectionsTitles(); }\n getSectionObject(elementId) { return this.formStructure.getSectionObject(elementId); }\n showSection(sectionCode) { return this.formStructure.showSection(sectionCode); }\n hideSection(sectionCode) { return this.formStructure.hideSection(sectionCode); }\n showSections(sectionArray) { return this.formStructure.showSections(sectionArray); }\n hideSections(sectionArray) { return this.formStructure.hideSections(sectionArray); }\n showSubSection(sectionCode, subSectionCode) { return this.formStructure.showSubSection(sectionCode, subSectionCode); }\n hideSubSection(sectionCode, subSectionCode) { return this.formStructure.hideSubSection(sectionCode, subSectionCode); }\n showSubSections(sectionCode, subSectionArray) { return this.formStructure.showSubSections(sectionCode, subSectionArray); }\n hideSubSections(sectionCode, subSectionArray) { return this.formStructure.hideSubSections(sectionCode, subSectionArray); }\n\n getTables() { return this.formStructure.getTables(); }\n getTableObject(elementId) { return this.formStructure.getTableObject(elementId); }\n getTable(tableName) { return this.getTableObject(tableName); }\n showTable(tableName) { return this.formStructure.showTable(tableName); }\n hideTable(tableName) { return this.formStructure.hideTable(tableName); }\n showTables(tableArray) { return this.formStructure.showTables(tableArray); }\n hideTables(tableArray) { return this.formStructure.hideTables(tableArray); }\n cleanTable(tableName) { return this.formStructure.cleanTable(tableName); }\n getTableRecord(tableName, recordId) { return this.formStructure.getTableRecord(tableName, recordId); }\n\n customPreProcessing() { }\n customFormStart() { }\n displayActionServerError() { }\n displayValidationServerError() { }\n displayTableServerError() { }\n showFieldInfo(fieldCode: string) { }\n showModalDialog(title, body, options, callback?, params?) { }\n openUploadDialog(title, body, options, callback?, params?) { }\n\n subscribeAppEvent(eventName, callback) {\n this._eventEmiter.subscribe(eventName, callback);\n }\n\n openForm(name, data = null, backData = null, cleanStack = false) {\n let origin = null;\n if (!cleanStack) {\n origin = { ...backData, name: this.name, url: this._formRoute, token: this.controlToken };\n origin.subject = origin?.subject ?? this.formSubject;\n origin.state = origin?.state ?? this.currentState;\n origin.fields = origin?.fields ?? {};\n origin.extra = origin?.extra ?? {};\n }\n const target = { ...data, name };\n target.subject = target?.subject ?? null;\n target.state = target?.state ?? null;\n target.fields = target?.fields ?? {};\n target.extra = target?.extra ?? {};\n this.formManagerService.openForm(origin, target);\n }\n\n canGoBack() { return this.originToken !== null }\n goBack() { return this.formManagerService.backTo(); }\n goBackForm() { return this.goBack(); }\n getOriginDetail() { return this.formManagerService.getFormInfo(this.originToken); }\n\n setError(errorType, errorMessage, errorDetail) {\n this._errorType = errorType || '';\n this.errorMessage = errorMessage || '';\n this.errorDetail = errorDetail || '';\n }\n\n get formManager() { return this; }\n resetError() { this.setError(null, null, null); }\n getErrorType() { return this._errorType; }\n getErrorMessage() { return this.errorMessage; }\n getErrorDetail() { return this.errorDetail; }\n getErrorCode() { return this._errorType; }\n\n get formRoute() { return this._formRoute; }\n set formRoute(route) { this._formRoute = route; }\n defineFormCode(name) { this.name = name; }\n getCurrentState() { return this.formStructure.state; }\n getCurrentMode() { return this.formStructure.state; }\n\n get formCode() { return this.name; }\n set formCode(name) { this.name = name; }\n\n getFormParameter(name) {\n return (name) ? (this.extraData?.[name] ?? null) : null;\n }\n\n getSubject() { return this.formSubject; }\n getformSubject() { return this.getSubject(); }\n\n preocessInputParams(params) {\n this.controlToken = params?.[TOKEN] ?? null;\n const { token, subject, state, fields, extra, originToken } = this.formManagerService.getFormInfo(this.controlToken);\n if (!this.controlToken || this.controlToken !== token) {\n return;\n }\n this.formSubject = params?.[SUBJECT] ?? subject ?? null;\n this.inputDataFields = fields;\n this.extraData = extra;\n this.originToken = originToken;\n return state;\n }\n\n subscribeSectionActivation() {\n const formSections = this.formStructure.getSections();\n if (Array.isArray(formSections)) {\n formSections.forEach(section => {\n section.activation.subscribe(code => this.launchSectionActivation(code));\n section.inactivation.subscribe(code => this.launchSectionInactivation(code));\n });\n }\n }\n\n subscribeFieldsSubjects() {\n const formFields = this.formStructure.getFields();\n if (Array.isArray(formFields)) {\n formFields.forEach(field => {\n field.editionFinish.subscribe(event => {\n const { code, intrinsicValidation } = event;\n this.startFieldValidation(code, intrinsicValidation);\n });\n field.editionPartial.subscribe(event => {\n const { code, intrinsicValidation } = event;\n this.startFieldInputValidation(code, intrinsicValidation);\n });\n field.detailRequest.subscribe(code => this.showFieldInfo(code));\n });\n }\n }\n\n subscribeActionSubjects() {\n const formActions = this.formStructure.getActions();\n if (Array.isArray(formActions)) {\n formActions.forEach(action => {\n action.actionActivated.subscribe(code => this.startAction(code));\n });\n }\n }\n\n subscribeTableSubjects() {\n const formTables = this.formStructure.getTables();\n if (Array.isArray(formTables)) {\n formTables.forEach(table => {\n table.inlineActionTrigger.subscribe(event => this.startTableAction(event));\n table.globalActionTrigger.subscribe(event => this.startTableGlobalAction(event));\n table.recordSelectionTrigger.subscribe(event => this.startTableRecordSelection(event));\n table.selectionActionTrigger.subscribe(event => this.startTableSelectionAction(event));\n table.getDataTrigger.subscribe(event => this.startTableGetData(event));\n });\n }\n }\n\n async formInit(params) {\n let initialState = this.preocessInputParams(params);\n if (!this.name) { return; }\n if (!this.definitionObtained) {\n this.busy = true;\n const formDefinition = await this.formManagerService.getFormDefinition(this.name);\n this.busy = false;\n this.formStructure = new FormStructureAndData(formDefinition, this.formConfig);\n this.fields = this.formStructure.fields;\n this.actions = this.formStructure.actions;\n this.definitionObtained = true;\n } else {\n this.cleanData();\n }\n if (!this.supportState(initialState)) {\n initialState = this.formStructure.defaultState;\n }\n this.formStructure.changeState(initialState || this.formStructure.defaultState);\n const inputFieldNames = Object.keys(this.inputDataFields);\n for (let index = 0; index < inputFieldNames.length; index++) {\n const fieldCode = inputFieldNames[index];\n const fieldValue = this.inputDataFields[fieldCode];\n this.setFieldValue(fieldCode, fieldValue);\n }\n const recordResponse = await this.requestFormAction(formActions.getData);\n this.checkErrorRecordReceived(recordResponse);\n this.formVisible = true;\n this.subscribeSectionActivation();\n this.subscribeFieldsSubjects();\n this.subscribeActionSubjects();\n this.subscribeTableSubjects();\n this.customFormStart();\n }\n\n checkErrorRecordReceived(recordResponse) {\n const { error } = recordResponse;\n if (!error) { return false; }\n this.errorCode = recordResponse.errorCode;\n this.errorMessage = recordResponse.errorMessage;\n this.errorDetail = recordResponse.errorDetail;\n }\n\n errorOccured() {\n return (this.errorCode !== NO_ERROR);\n }\n\n changeState(state) { return this.formStructure.changeState(state); }\n changeFormMode(state) { return this.changeState(state); }\n\n async requestFormAction(actionCode, actionSubject = {}) {\n const actionDetail = {\n formCode: this.name,\n formSubject: this.formSubject,\n currentMode: this.formStructure.state,\n actionCode,\n actionSubject,\n version: PAYLOAD_VERSION,\n formData: this.formStructure.getPayload(),\n immutableData: this.formStructure.immutableData,\n };\n this.errorCode = NO_ERROR;\n this.errorMessage = '';\n this.errorDetail = '';\n this.busy = true;\n const formActionResponse: any = await this.formManagerService.execServerAction(actionDetail);\n this.busy = false;\n if (formActionResponse && formActionResponse.error.errorType) {\n console.log('Excepción no soportada');\n }\n if (formActionResponse.hasError()) {\n const error = formActionResponse.error;\n this.errorCode = error.errorCode;\n this.errorMessage = error.errorMessage;\n this.errorDetail = error.errorDetail;\n }\n const formResponseData = formActionResponse.getData();\n this.updateFormWithServerData(formResponseData);\n return formResponseData;\n }\n\n updateFormWithServerData(formContent) {\n const {\n currentMode, formSubject, actions, fields, recordTables,\n returnedFile, immutableData, extraInfo,\n } = formContent;\n currentMode && this.changeState(currentMode);\n if (formSubject) { this.formSubject = formSubject; }\n if (actions && actions.length > 0) {\n for (const changedAction of actions) {\n const actionObject = this.getActionObject(changedAction.actionCode);\n if (actionObject) { actionObject.updateFromServer(changedAction); }\n }\n }\n if (fields && fields.length > 0) {\n for (const changedField of fields) {\n const fieldObject = this.getFieldObject(changedField.fieldCode);\n if (fieldObject) {\n fieldObject.updateFromServer(changedField);\n }\n }\n }\n if (recordTables && recordTables.length > 0) {\n for (const changedTable of recordTables) {\n const tableObject = this.getTableObject(changedTable.tableCode);\n if (tableObject) {\n tableObject.updateFromServer(changedTable);\n }\n }\n }\n if (returnedFile && returnedFile.file) {\n this.fileMgmtServices.saveFile(returnedFile.file, returnedFile.name, returnedFile.type);\n }\n this.formStructure.immutableData = immutableData;\n this.formStructure.extraInfo = extraInfo;\n }\n\n /**\n * Manejo de event handlers para acciones sobre el formulario\n */\n\n addSectionActivation(sections, callbackMethod) {\n const sectionSet = (Array.isArray(sections)) ? sections : [sections];\n sectionSet.forEach((sectionName) => {\n if (!this.formSectionsActivate[sectionName]) {\n this.formSectionsActivate[sectionName] = [];\n }\n this.formSectionsActivate[sectionName].push(callbackMethod);\n });\n }\n\n addSectionInactivation(sections, callbackMethod) {\n const sectionSet = (Array.isArray(sections)) ? sections : [sections];\n sectionSet.forEach((sectionName) => {\n if (!this.formSectionsInactivate[sectionName]) {\n this.formSectionsInactivate[sectionName] = [];\n }\n this.formSectionsInactivate[sectionName].push(callbackMethod);\n });\n }\n\n addActionMethodStart(actions, callbackMethod) {\n const actionSet = (Array.isArray(actions)) ? actions : [actions];\n actionSet.forEach((actionName) => {\n if (!this.formActionsStart[actionName]) {\n this.formActionsStart[actionName] = [];\n }\n this.formActionsStart[actionName].push(callbackMethod);\n });\n }\n\n addActionMethodFinish(actions, callbackMethod) {\n const actionSet = (Array.isArray(actions)) ? actions : [actions];\n actionSet.forEach((actionName) => {\n if (!this.formActionsFinish[actionName]) {\n this.formActionsFinish[actionName] = [];\n }\n this.formActionsFinish[actionName].push(callbackMethod);\n });\n }\n\n async launchSectionActivation(sectionCode: string) {\n const sectionObject = this.formStructure.getSectionObject(sectionCode);\n if (!sectionObject) { return; }\n const clientSectionMethods = this.formSectionsActivate[sectionCode];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async launchSectionInactivation(sectionCode: string) {\n const sectionObject = this.formStructure.getSectionObject(sectionCode);\n if (!sectionObject) { return; }\n const clientSectionMethods = this.formSectionsInactivate[sectionCode];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async startAction(actionCode: string) {\n const actionObject = this.getAction(actionCode);\n if (!actionObject) { return; }\n this.resetError();\n actionObject.start();\n const clientActionMethods = this.formActionsStart[actionCode];\n if (clientActionMethods) {\n const clientActionPromises = [];\n for (const clientActionMethod of clientActionMethods) {\n const continueActionPromise = clientActionMethod(actionObject);\n clientActionPromises.push(continueActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n actionObject.stop();\n return;\n }\n }\n this.startServerAction(actionObject);\n }\n\n async startServerAction(actionInput) {\n const action = (typeof actionInput === 'string')\n ? this.getAction(actionInput) : actionInput;\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n actionResult = await this.requestFormAction(action.actionCode);\n finish = !this.errorOccured();\n }\n if (finish) {\n await this.finishAction(action, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayActionServerError();\n }\n action.stop();\n }\n\n async finishAction(actionObject, actionResult) {\n const finishActionMethods = this.formActionsFinish[actionObject.actionCode];\n if (finishActionMethods) {\n const clientActionPromises = [];\n for (const clientActionMethod of finishActionMethods) {\n clientActionPromises.push(clientActionMethod(actionObject, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n completeGlobalAction(actionObject) {\n return this.startServerAction(actionObject);\n }\n\n /**\n * Manejadores de eventos para validaciones sobre campos\n */\n\n addFieldInputValidation(fields, callbackMethod) {\n const fieldSet = (Array.isArray(fields)) ? fields : [fields];\n fieldSet.forEach((fieldCode) => {\n if (!this.fieldInputValidation[fieldCode]) {\n this.fieldInputValidation[fieldCode] = [];\n }\n this.fieldInputValidation[fieldCode].push(callbackMethod);\n });\n }\n\n addFieldValidationStart(fields, callbackMethod) {\n const fieldSet = (Array.isArray(fields)) ? fields : [fields];\n fieldSet.forEach((fieldCode) => {\n if (!this.fieldValidationsStart[fieldCode]) {\n this.fieldValidationsStart[fieldCode] = [];\n }\n this.fieldValidationsStart[fieldCode].push(callbackMethod);\n });\n }\n\n addFieldValidationFinish(fields, callbackMethod) {\n const fieldSet = (Array.isArray(fields)) ? fields : [fields];\n fieldSet.forEach((fieldCode) => {\n if (!this.fieldValidationsFinish[fieldCode]) {\n this.fieldValidationsFinish[fieldCode] = [];\n }\n this.fieldValidationsFinish[fieldCode].push(callbackMethod);\n });\n }\n\n async startFieldInputValidation(fieldCode: string, intrinsicValidation: boolean = true) {\n const fieldToValidate = this.getFieldObject(fieldCode);\n if (!fieldToValidate) { return false; }\n fieldToValidate.resetError();\n const validationCallbacks = this.fieldInputValidation[fieldCode];\n if (validationCallbacks) {\n const clientValidationPromises = [];\n for (const validationMethod of validationCallbacks) {\n const continueValidationPromise = validationMethod(fieldToValidate);\n clientValidationPromises.push(continueValidationPromise);\n }\n await Promise.all(clientValidationPromises);\n }\n }\n\n async startFieldValidation(fieldCode: string, intrinsicValidation: boolean = true) {\n const fieldToValidate = this.getField(fieldCode);\n if (!fieldToValidate || !intrinsicValidation) { return; }\n fieldToValidate.resetError();\n const validationCallbacks = this.fieldValidationsStart[fieldCode];\n if (validationCallbacks) {\n const clientValidationPromises = [];\n for (const validationMethod of validationCallbacks) {\n const clientValidationPromise = validationMethod(fieldToValidate);\n clientValidationPromises.push(clientValidationPromise);\n }\n const clientValidationResults = await Promise.all(clientValidationPromises);\n const continueValidation = clientValidationResults.reduce((total, curr) => (total && curr), true);\n if (!continueValidation) {\n return;\n }\n }\n this.startServerFieldValidation(fieldToValidate);\n }\n\n async startServerFieldValidation(inputField) {\n const fieldObj = (typeof inputField === 'string')\n ? this.getField(inputField) : inputField;\n let finish = true;\n let validationResult = null;\n if (fieldObj.backend) {\n fieldObj.validating = true;\n validationResult = await this\n .requestFormAction(formActions.validate, fieldObj.fieldCode);\n finish = !this.errorOccured();\n }\n if (finish) {\n await this.finishFieldValidation(fieldObj, validationResult);\n } else {\n fieldObj.setErrorCode(this.errorCode);\n fieldObj.setErrorMessage(this.errorMessage);\n this.displayValidationServerError();\n }\n fieldObj.validating = false;\n }\n\n async finishFieldValidation(fieldObject, validationResult) {\n const validationCallbacks = this.fieldValidationsFinish[fieldObject.fieldCode];\n if (validationCallbacks) {\n const clientActionPromises = [];\n for (const validationMethod of validationCallbacks) {\n clientActionPromises.push(validationMethod(fieldObject, validationResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async continueFieldValidation(fieldCode) {\n return this.startServerFieldValidation(fieldCode);\n }\n\n /**\n * Manejadores de eventos para acciones sobre Tablas\n */\n\n addTableActionStart(tableName, actionCode, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getActionObject(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableActionsStart[tableName]) {\n tableEventHandlers = this.tableActionsStart[tableName];\n } else {\n tableEventHandlers = {};\n this.tableActionsStart[tableName] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableActionFinish(tableName, actionCode, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getActionObject(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableActionsFinish[tableName]) {\n tableEventHandlers = this.tableActionsFinish[tableName];\n } else {\n tableEventHandlers = {};\n this.tableActionsFinish[tableName] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableSelectionStart(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this.tableSelectionsStart[tableName]) {\n tableEventHandlers = this.tableSelectionsStart[tableName];\n } else {\n tableEventHandlers = [];\n this.tableSelectionsStart[tableName] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableSelectionFinish(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this.tableSelectionsFinish[tableName]) {\n tableEventHandlers = this.tableSelectionsFinish[tableName];\n } else {\n tableEventHandlers = [];\n this.tableSelectionsFinish[tableName] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataStart(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableGetDataStart[tableName]) {\n tableEventHandlers = this.tableGetDataStart[tableName];\n } else {\n tableEventHandlers = [];\n this.tableGetDataStart[tableName] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataFinish(tableName, callbackMethod) {\n const tableObject = this.getTable(tableName);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this.tableGetDataFinish[tableName]) {\n tableEventHandlers = this.tableGetDataFinish[tableName];\n } else {\n tableEventHandlers = {};\n this.tableGetDataFinish[tableName] = tableEventHandlers;\n }\n tableEventHandlers[GET_DATA_ACTION] = callbackMethod;\n }\n\n async startTableGlobalAction(tableActionEvent) {\n const { tableCode, actionCode } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject || !actionCode) { return; }\n this.resetError();\n const action = tableObject.getAction(actionCode);\n if (!action) { return; }\n const tableActionDetail = {\n tableObject,\n action,\n tableCode,\n actionCode,\n };\n const tableEventHandlers = this.tableActionsStart[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerGlobalAction(tableActionDetail);\n }\n\n async startTableServerGlobalAction(tableActionDetail) {\n const { tableObject, action, tableCode, actionCode } = tableActionDetail;\n if (!tableObject || !action) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n const actionSubject = {\n tableCode,\n actionType: GLOBAL_ACTION,\n actionCode\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n await this.finishTableGlobalAction(tableActionDetail, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n async finishTableGlobalAction(tableActionDetail, actionResult) {\n const { tableCode, actionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableAction(tableActionEvent) {\n const { tableCode, actionCode, actionDetail } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject || !actionCode) { return; }\n this.resetError();\n const { recordId, recordData } = actionDetail;\n const action = tableObject.getAction(actionCode);\n if (!action) { return; }\n const tableActionDetail = {\n tableObject,\n action,\n tableCode,\n actionCode,\n recordId,\n recordData\n };\n const tableEventHandlers = this.tableActionsStart[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerAction(tableActionDetail);\n }\n\n async startTableServerAction(tableActionDetail) {\n const { tableObject, action, tableCode, actionCode, recordId, recordData } = tableActionDetail;\n if (!tableObject || !action) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n const actionSubject = {\n tableCode,\n actionType: this.formConfig.tableActions.inline,\n actionCode,\n tableRecordId: recordId,\n tableRecordData: recordData\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n this.finishTableAction(tableActionDetail, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n completeInlineAction(tableAction) {\n return this.startTableServerAction(tableAction);\n }\n\n async finishTableAction(tableActionDetail, actionResult) {\n const { tableCode, actionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableRecordSelection(tableActionEvent) {\n const { tableCode, actionDetail } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject) { return; }\n this.resetError();\n const { recordId, recordData } = actionDetail;\n const tableSelectionDetail = {\n tableObject,\n tableCode,\n recordId,\n recordData\n };\n const tableEventHandlers = this.tableSelectionsStart[tableCode];\n if (tableEventHandlers) {\n const clientActionPromises = [];\n for (const tableSelectionMethod of tableEventHandlers) {\n const clientActionPromise = tableSelectionMethod(tableSelectionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerRecordSelection(tableSelectionDetail);\n }\n\n async startTableServerRecordSelection(tableSelectionDetail) {\n const { tableObject, tableCode, recordId, recordData } = tableSelectionDetail;\n if (!tableObject) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (tableObject.selectionBackend) {\n const actionSubject: any = {\n tableCode,\n actionType: this.formConfig.tableActions.rowSelection,\n actionCode: null,\n tableRecordId: recordId,\n tableRecordData: recordData\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n this.finishTableRecordSelection(tableSelectionDetail, actionResult);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n async finishTableRecordSelection(tableSelectionDetail, actionResult) {\n const { tableCode } = tableSelectionDetail;\n const tableEventHandlers = this.tableSelectionsFinish[tableCode];\n if (tableEventHandlers) {\n const clientActionPromises = [];\n for (const tableSelectionMethod of tableEventHandlers) {\n clientActionPromises.push(tableSelectionMethod(tableSelectionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableSelectionAction(tableActionEvent) {\n const { tableCode, actionCode, actionDetail } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n if (!tableObject || !actionCode) { return; }\n this.resetError();\n const { selectedRecords } = actionDetail;\n const action = tableObject.getAction(actionCode);\n if (!action) { return; }\n const tableActionDetail = {\n tableObject,\n action,\n tableCode,\n actionCode,\n selectedRecords\n };\n const tableEventHandlers = this.tableActionsStart[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerSelectionAction(tableActionDetail);\n }\n\n async startTableServerSelectionAction(tableActionDetail) {\n const { tableObject, action, tableCode, actionCode, selectedRecords } = tableActionDetail;\n if (!tableObject || !action) { return; }\n tableObject.putOnWait();\n let finish = true;\n let actionResult = null;\n if (action.backend) {\n const actionSubject = {\n tableCode,\n actionType: this.formConfig.tableActions.selection,\n actionCode,\n selectedRecords\n };\n actionResult = await this\n .requestFormAction(formActions.tableAction, actionSubject);\n finish = !this.errorOccured();\n }\n if (finish) {\n this.finishTableSelectionAction(tableActionDetail, actionResult);\n action.newState && this.changeState(action.newState);\n } else {\n this.displayTableServerError();\n }\n tableObject.freeWaiting();\n }\n\n async finishTableSelectionAction(tableActionDetail, actionResult) {\n const { tableCode, actionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[actionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n async startTableGetData(tableActionEvent) {\n const { tableCode } = tableActionEvent;\n const tableObject = this.getTable(tableCode);\n const tableActionDetail = {\n tableObject,\n tableCode\n };\n this.resetError();\n const tableEventHandlers = this.tableGetDataStart[tableCode];\n if (tableEventHandlers) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableEventHandlers) {\n const clientActionPromise = tableActionMethod(tableActionDetail);\n clientActionPromises.push(clientActionPromise);\n }\n const clientActionResults = await Promise.all(clientActionPromises);\n const continueAction = clientActionResults.reduce((total, curr) => (total && curr), true);\n if (!continueAction) {\n return;\n }\n }\n this.startTableServerGetData(tableActionDetail);\n }\n\n async startTableServerGetData(tableActionDetail) {\n const { tableObject, tableCode } = tableActionDetail;\n tableObject.putOnWait();\n const actionSubject = { tableCode };\n const actionResult = await this\n .requestFormAction(formActions.getTableData, actionSubject);\n if (this.errorOccured()) {\n this.displayTableServerError();\n } else {\n this.finishTableGetData(tableActionDetail, actionResult);\n }\n tableObject.freeWaiting();\n }\n\n async finishTableGetData(tableActionDetail, actionResult) {\n const { tableCode, tableActionCode } = tableActionDetail;\n const tableEventHandlers = this.tableActionsFinish[tableCode];\n const tableActionMethods = (tableEventHandlers) ? tableEventHandlers[tableActionCode] : null;\n if (tableActionMethods) {\n const clientActionPromises = [];\n for (const tableActionMethod of tableActionMethods) {\n clientActionPromises.push(tableActionMethod(tableActionDetail, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n checkSectionRequiredFields(sectionCode, reqFieldMessage?) {\n this.cleanErrorFields(null, sectionCode);\n const requiredFieldMessage = reqFieldMessage ?? this.formConfig.formStandardErrors.requiredField\n const numErrors = this.tagFieldsWithError(this.getRequiredEmptyFields(null,\n sectionCode), null, requiredFieldMessage);\n return (numErrors === 0);\n }\n\n validateSectionConsistency(sectionCode, reqFieldMessage?) {\n this.resetError();\n const completeFields = this.checkSectionRequiredFields(sectionCode, reqFieldMessage);\n if (!completeFields) {\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.requiredFields);\n return;\n }\n let validationError = false;\n const requiredEmptyFields = this.getRequiredEmptyFields(null, sectionCode);\n if (requiredEmptyFields.length > 0) {\n validationError = true;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.requiredFields);\n this.tagFieldsWithError(requiredEmptyFields, null,\n this.formConfig.formStandardErrors.requiredField);\n for (const fieldCode of requiredEmptyFields) {\n const requiredEmptyField = this.getField(fieldCode);\n if (requiredEmptyField && requiredEmptyField.widget\n && requiredEmptyField.widget.focus) {\n requiredEmptyField.widget.focus();\n break;\n }\n }\n }\n const validationIssueFields = this.getFieldsWithValidationIssues(null,\n sectionCode);\n if (!validationError && validationIssueFields.length > 0) {\n validationError = true;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.validationFields);\n for (const fieldCode of validationIssueFields) {\n const validationIssueField = this.getField(fieldCode);\n if (validationIssueField && validationIssueField.widget\n && validationIssueField.widget.focus) {\n validationIssueField.widget.focus();\n break;\n }\n }\n }\n return validationError;\n }\n\n copyTableRecordToFields(tableObj, mappingTable = null) {\n const tableObject = this.getTable(tableObj.tableCode);\n const tableRecord = tableObject.getTableRecord(tableObj.recordId);\n const columnNames = tableObject.columnNames;\n for (const columnName of columnNames) {\n const columnValue = tableRecord.getFieldValue(columnName) ?? '';\n const fieldCode = mappingTable?.[columnName] ?? columnName;\n this.setFieldValue(fieldCode, columnValue);\n }\n return true;\n }\n\n /**\n * Soporte registros en tablas que se editan en campos del formulario\n */\n\n defineEditionTable(tableEditionDef) {\n const { columnFieldMapping, recordCaptureFields, startCollapsed } = tableEditionDef;\n tableEditionDef.startCollapsed = (typeof startCollapsed !== 'undefined')\n ? startCollapsed : true;\n\n const fieldsMappingTable = {};\n const fieldsToClear = [];\n for (const columnMap of columnFieldMapping) {\n const [columnName, formField] = columnMap;\n fieldsMappingTable[columnName] = formField;\n fieldsToClear.push(formField);\n }\n tableEditionDef.fieldsMappingTable = fieldsMappingTable;\n tableEditionDef.fieldsToClear = fieldsToClear;\n\n const { tableName, newRecordActionName, saveRecordActionName,\n cancelSaveRecordActionName, tableEditRecordActionName, enableRecordEdition\n } = tableEditionDef;\n\n this.addActionMethodStart(newRecordActionName, () => {\n this.cleanFields(fieldsToClear, null);\n this.showFields(recordCaptureFields);\n if (!enableRecordEdition) {\n this.enableRecordEdition(tableEditionDef);\n } else {\n enableRecordEdition(tableEditionDef);\n }\n this.hideAction(newRecordActionName);\n this.showAction(cancelSaveRecordActionName);\n this.showAction(saveRecordActionName);\n return true;\n });\n const { recordEditionValidate, disableRecordEdition } = tableEditionDef;\n this.addActionMethodStart(saveRecordActionName, () => {\n return (!recordEditionValidate) ? this.recordEditionValidate(tableEditionDef)\n : recordEditionValidate(tableEditionDef);\n });\n this.addActionMethodFinish(saveRecordActionName, () => {\n if (!this.errorOccured()) {\n return (!disableRecordEdition) ? this.disableRecordEdition(tableEditionDef)\n : disableRecordEdition(tableEditionDef);\n }\n });\n this.addActionMethodStart(cancelSaveRecordActionName, () => {\n return (!disableRecordEdition) ? this.disableRecordEdition(tableEditionDef)\n : disableRecordEdition(tableEditionDef);\n });\n this.addTableActionStart(tableName, tableEditRecordActionName,\n (tblActObj) => {\n return (!enableRecordEdition)\n ? this.enableRecordEdition(tableEditionDef, tblActObj)\n : enableRecordEdition(tableEditionDef, tblActObj);\n });\n if (tableEditionDef.startCollapsed) {\n return (!tableEditionDef.disableRecordEdition)\n ? this.disableRecordEdition(tableEditionDef)\n : tableEditionDef.disableRecordEdition(tableEditionDef);\n } else {\n return (!tableEditionDef.enableRecordEdition)\n ? this.enableRecordEdition(tableEditionDef)\n : tableEditionDef.enableRecordEdition(tableEditionDef, null);\n }\n }\n\n enableRecordEdition(tableEditionDef, tableActionObject = null) {\n if (tableActionObject) {\n this.copyTableRecordToFields(tableActionObject, tableEditionDef.fieldsMappingTable);\n }\n this.showFields(tableEditionDef.recordCaptureFields);\n this.hideAction(tableEditionDef.newRecordActionName);\n this.showAction(tableEditionDef.cancelSaveRecordActionName);\n this.showAction(tableEditionDef.saveRecordActionName);\n if (tableEditionDef.fieldsToTriggerValidation\n && tableEditionDef.fieldsToTriggerValidation.length > 0) {\n for (const fieldName of tableEditionDef.fieldsToTriggerValidation) {\n this.startFieldValidation(fieldName);\n }\n }\n return true;\n }\n\n disableRecordEdition(tableDefinition) {\n this.cleanFields(tableDefinition.fieldsToClear, null);\n this.hideFields(tableDefinition.recordCaptureFields);\n this.showAction(tableDefinition.newRecordActionName);\n this.hideAction(tableDefinition.cancelSaveRecordActionName);\n this.hideAction(tableDefinition.saveRecordActionName);\n return true;\n }\n\n recordEditionValidate(tableEditionDef) {\n const { recordCaptureFields } = tableEditionDef;\n let validationOk = true;\n const requiredEmptyFields = this.getRequiredEmptyFields(recordCaptureFields, null);\n if (requiredEmptyFields.length > 0) {\n validationOk = false;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle,\n this.formConfig.formStandardErrors.requiredFields);\n this.tagFieldsWithError(requiredEmptyFields, null,\n this.formConfig.formStandardErrors.requiredField);\n }\n const validationIssueFields = this.getFieldsWithValidationIssues(recordCaptureFields, null);\n if (validationIssueFields.length > 0) {\n validationOk = false;\n this.setError(this.formConfig.formStandardErrors.typeWarning,\n this.formConfig.formStandardErrors.validationTitle, this.formConfig.formStandardErrors.validationFields);\n }\n return validationOk;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '@angular/forms';\n\nimport { BasicFormComponent } from './components/forms/basic-form';\nimport { ActionComponent } from './components/elements/action.component';\nimport { FieldComponent } from './components/elements/field.component';\nimport { ElementComponent } from './components/elements/layout/element.component';\nimport { FormErrorComponent } from './components/elements/layout/form-error.component';\nimport { FormHeaderComponent } from './components/elements/layout/form-header.component';\nimport { SectionComponent } from './components/elements/layout/section.component';\nimport { SubSectionComponent } from './components/elements/layout/sub-section.component';\nimport { LibTableFilterComponent } from './components/elements/tables/table-filter.component';\nimport { LibTableRecordActionComponent } from './components/elements/tables/table-record-action.component';\nimport { LibTableRecordFieldComponent } from './components/elements/tables/table-record-field.component';\nimport { LibTableComponent } from './components/elements/tables/table.component';\n\nconst COMPONENTS = [\n BasicFormComponent,\n ActionComponent,\n FieldComponent,\n ElementComponent,\n FormErrorComponent,\n FormHeaderComponent,\n SectionComponent,\n SubSectionComponent,\n LibTableFilterComponent,\n LibTableRecordActionComponent,\n LibTableRecordFieldComponent,\n LibTableComponent];\n\n@NgModule({\n declarations: COMPONENTS,\n imports: [\n CommonModule,\n RouterModule,\n FormsModule,\n ],\n exports: COMPONENTS\n})\nexport class TuainNgFormsLibModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["HEADER","INLINE_ACTION"],"mappings":"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"}
|