tuain-ng-forms-lib 12.0.77 → 12.0.78

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.
@@ -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/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/form.constants.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/element.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/table/column.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/action.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/classes/forms/subsection.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/section.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() state: 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.state) && this.visibleOnRestriction();\n }\n\n get disabled() {\n return !(this.action?.enabledOn(this.state));\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { FieldDescriptor } from '../../classes/forms/field';\n\nconst VALUE = 'value';\nconst FOCUS = 'focus';\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 minValue: any;\n maxValue: 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() state: 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 [fieldAttr1, compAttr1] = mapping[index];\n const compAttr = compAttr1.toString();\n const fieldAttr = fieldAttr1.toString();\n const attributeValue = this.field?.[fieldAttr]\n this.dafaultProcessFieldChange(compAttr, attributeValue);\n this.processFieldChange(compAttr, attributeValue);\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 this.dafaultProcessFieldChange(compAttr, value);\n this.processFieldChange(compAttr, value);\n });\n }\n this.start();\n }\n\n dafaultProcessFieldChange(attribute: string, value?: any) {\n if (attribute === VALUE) {\n this.updateValue();\n } else if (attribute === FOCUS) {\n this.focus();\n } else {\n this[attribute] = value;\n }\n }\n\n processFieldChange(attribute: string, value?: any) { }\n start() { }\n focus() { }\n\n updateObject() {\n this.field.setValue(this.value);\n }\n\n inputChanged() {\n this.field.setValue(this.value);\n this.onChangeContent();\n }\n\n inputTyped() {\n this.field.setValue(this.value);\n this.onInputChange();\n }\n\n updateValue() {\n this.value = this.field.getValue();\n }\n\n onInputChange() {\n setTimeout(() => this.field.notifyEditionPartial(), 50);\n }\n\n onChangeContent() {\n setTimeout(() => this.field.notifyEditionFinish(), 50);\n }\n\n onShowInfo(detail = null) {\n setTimeout(() => this.field.notifyEditionDetailRequest(detail), 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.state);\n }\n\n get disabled() {\n return !this.field?.enabledOn(this.state);\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() state: 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.state);\n }\n\n get disabled() {\n return !this.element?.enabledOn(this.state);\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() section: 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","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, ChangeDetectionStrategy } from '@angular/core';\nimport { TableRecordData } from '../../../classes/forms/table/row-data';\nimport { TableActionEvent } from '../../../classes/forms/table/table';\nimport { RecordTable, TableEvent } from '../../../classes/forms/table/table';\n\nconst changeViewAttributes = ['visibleRecords', 'currentPage', 'recordsPerPage'];\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 globalFilterString: string = '';\n\n // Atributos sincronizados del objeto\n code: any;\n columns: any;\n currentPage: number = 1;\n globalSearch: boolean = false;\n visibleRecords: any[];\n selectedRecords: any[] = [];\n recordsPerPage: any;\n totalRecordsNumber: number = 0;\n allSelected: boolean = false;\n layout: string;\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() table: RecordTable;\n @Input() tableRecords: TableRecordData[];\n @Input() disabled: boolean;\n @Input() state: string;\n @Input() waiting: boolean;\n\n ngOnInit() {\n if (this.table) {\n this.formConfig = this.table?._formConfig;\n this.tableFieldStyles = this.formConfig.tableFieldStyles;\n this.selectable = this.table.selectable;\n this.hasActions = this.table.hasActions();\n this.inlineActions = this.table.getActions(this.formConfig.tableActions.inline);\n this.globalActions = this.table.getActions(this.formConfig.tableActions.global);\n this.selectionActions = this.table.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 [tableAttrRaw, compAttrRaw] = mapping[index];\n const tableAttr = tableAttrRaw.toString();\n const compAttr = compAttrRaw.toString();\n this.syncAttribute(compAttr, this.table[tableAttr]);\n }\n // Subscripción a cambios en atributos\n this.table.attributeChange.subscribe(event => {\n const { name: tableAttr, value } = event;\n const compAttr = this.formConfig.componentTableAttrMap[tableAttr];\n this.syncAttribute(compAttr, value);\n });\n }\n this.start();\n }\n\n start() { }\n tableGlobalAction(actionCode: string) { this.table.notifyGlobalAction(actionCode); }\n tableSelectionAction(actionCode: string) { this.table.notifySelectionAction(actionCode); }\n tableActionSelected(actionEvent: TableActionEvent) { this.table.notifyInlineAction(actionEvent); }\n tableSelectionToggle(recordId) { this.table.notifyRecordSelection(recordId); }\n toggleSelectAll() { return (this.allSelected) ? this.table.unSelectAll() : this.table.selectAll(); }\n globalFilterCompleted() { this.changePage(1); }\n changePage(requestedPage) { this.table.changePage(requestedPage); }\n tableColumnSort(columnName, direction = null) { this.table.sort(columnName, direction ?? 'ascend'); }\n globalFilterChanged() { this.table.setGlobalFilterString(this.globalFilterString?.trim() ?? ''); }\n\n syncAttribute(name, value) {\n try {\n this[name] = value;\n return true;\n } catch {\n return false;\n }\n }\n\n filterHasChanged(column, values) {\n this.table.addColumnFilter(column.fieldCode, values);\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: 'G',\n L: 'L',\n GE: 'GE',\n LE: 'LE',\n EQ: 'EQ',\n NEQ: 'NEQ',\n HAS: 'HAS',\n NOTHAS: 'NOTHAS',\n BETWEEN: 'BETWEEN',\n IN: 'IN',\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 elementType: string;\n customAttributes: any;\n\n constructor(elementDefinition: any, formConfig: any) {\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.customAttributes = elementDefinition?.customAttributes ?? {};\n }\n\n getCustomAttribute(name: string): string { return this.customAttributes?.[name] ?? null; }\n setCustomAttribute(name: string, value: string): void { if (name) { this.customAttributes[name] = value; } }\n matchAttribute(name: string, value: string): boolean { return this.customAttributes?.[name] === value; }\n\n isField(): boolean { return this.elementType === elementTypes.field; }\n isAction(): boolean { return this.elementType === elementTypes.action; }\n isTable(): boolean { return this.elementType === elementTypes.table; }\n\n setVisibleStates(newStates: any): void {\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): void {\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: string): boolean { return (this.visibleStates && state) ? this.visibleStates.includes(state) : false; }\n enabledOnState(state: string): boolean { return (this.enabledStates && state) ? this.enabledStates.includes(state) : false; }\n\n /**\n * @deprecated Utilizar viewOnState\n */\n supportState(state: string): boolean { return this.viewOnState(state); }\n\n /**\n * @deprecated Utilizar viewOnState\n */\n supportMode(state: string): boolean { return this.viewOnState(state); }\n\n get visible(): boolean { return (this._isForced) ? this._visibleForced : this._visible; }\n set visible(visible: boolean) { this.setVisibility(visible); }\n\n visibleOn(state: string): boolean {\n return this.visible && this.viewOnState(state);\n }\n\n enabledOn(state: string): boolean {\n return !this.disabled && this.enabledOnState(state);\n }\n\n setVisibility(visible: boolean, forced: boolean = null): void {\n this._visible = visible && true;\n if (forced != null) {\n this._isForced = forced;\n }\n }\n\n show(forced?: boolean): void {\n this._visible = true;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = true;\n }\n }\n\n hide(forced?: boolean): void {\n this._visible = false;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = false;\n }\n }\n\n enable(): void { this.disabled = false; }\n disable(): void { this.disabled = true; }\n\n get enabled(): boolean { return !this.disabled; }\n get editable(): boolean { return !this.disabled; }\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\n restrictedOnField: string;\n restrictedOnOperator: string;\n restrictedOnValue: string;\n customValidation: 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.setCustomAttribute('location', actionDefinition.position || HEADER);\n this.backend = actionDefinition?.serverAction ?? false;\n this.newState = actionDefinition?.newState;\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 yn from 'yn';\nimport { elementTypes, NO_ERROR } from './form.constants';\nimport { FormElement } from './element';\nimport { isNgTemplate } from '@angular/compiler';\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: '_value',\n minValue: '_minValue',\n maxValue: '_maxValue',\n maxLength: '_maxLength',\n onValidation: '_onValidation',\n focus: 'focus',\n intrinsicErrorMessage: '_intrinsicErrorMessage',\n code: 'fieldCode',\n info: 'fieldInfo',\n defaultValue: 'defaultValue',\n defaultEditable: 'defaultEditable',\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 interface DetailEvent {\n code: string;\n detail: any;\n}\n\nexport interface FieldOption {\n fieldOptionValue: string;\n fieldOptionId: string;\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<DetailEvent>();\n private readonly _attributeChange = new Subject<any>();\n\n private validateOnServer: boolean;\n\n private _value: any;\n private _focus: boolean;\n\n private _minValue: any;\n private _maxValue: any;\n private _maxLength: number;\n _onValidation: boolean;\n _intrinsicErrorMessage: string;\n\n fieldCode: string;\n fieldInfo: string;\n defaultValue: string;\n defaultEditable: boolean;\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: FieldOption[];\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\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 get info() { return this.fieldInfo; }\n\n get validating() { return this._onValidation; }\n set validating(isValidating: boolean) { this.setAttr(fldAttr.onValidation, isValidating); }\n\n focus() { this.setAttr(fldAttr.focus, true); }\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\n getRequired() { return this.required; }\n setRequired(required: boolean) { this.required = required; }\n\n get required(): boolean { 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 if (intrinsicValidation && fieldValue && this._minValue && fieldValue < this._minValue) {\n intrinsicValidation = false;\n this.setError('99', 'Campo con valor inferior al mínimo');\n }\n if (intrinsicValidation && fieldValue && this._maxValue && fieldValue > this._maxValue) {\n intrinsicValidation = false;\n this.setError('99', 'Campo con valor superior al máximo');\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(detail: any) {\n const detailEvent: DetailEvent = {\n code: this.fieldCode,\n detail,\n };\n this._detailRequest.next(detailEvent);\n }\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 setLabel(label) { this.setAttr(fldAttr.title, label); }\n clean() { this.setValue(this.defaultValue || ''); this.resetError(); }\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 get empty(): boolean { return this.isEmpty(); }\n\n isEmpty(): boolean {\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(): any {\n if (this.fieldType === this._formConfig.fieldTypes.boolean\n || this.fieldType === this._formConfig.fieldTypes.check) {\n return yn(this._value);\n }\n return this._value;\n }\n\n getOptionText() {\n return this.fieldOptions?.find(item => item.fieldOptionId === this._value)?.fieldOptionValue ?? null;\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 setMinValue(inputMinValue) {\n let minValue = inputMinValue;\n if (this.fieldType === this._formConfig.fieldTypes.date) {\n minValue = new Date(minValue);\n }\n this.setAttr(fldAttr.minValue, minValue);\n }\n\n setMaxValue(inputMaxValue) {\n let maxValue = inputMaxValue;\n if (this.fieldType === this._formConfig.fieldTypes.date) {\n maxValue = new Date(maxValue);\n }\n this.setAttr(fldAttr.maxValue, maxValue);\n }\n\n getFieldOptions(): FieldOption[] {\n return this.fieldOptions.map(option => {\n const optionCopy: FieldOption = { ...option };\n return optionCopy;\n });\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._value) {\n if (this.fieldType === this._formConfig.fieldTypes.array && Array.isArray(this._value)) {\n const fieldValue = this._value?.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._value);\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 }\n }\n\n setValue(newValue, widgetUpdate = true) {\n if (typeof newValue === UNDEFINED || newValue === null) {\n return true;\n }\n let newFinalValue;\n if (this.fieldType === this._formConfig.fieldTypes.boolean\n || this.fieldType === this._formConfig.fieldTypes.check) {\n newFinalValue = yn(newValue);\n } else if (this.fieldType === this._formConfig.fieldTypes.array\n || this.fieldType === this._formConfig.fieldTypes.map) {\n if (newValue === null || newValue === '') {\n newFinalValue = [];\n } else if (Array.isArray(newValue)) {\n newFinalValue = newValue;\n } else {\n newFinalValue = newValue.toString().split(',');\n }\n } else {\n newFinalValue = newValue;\n }\n if (this._value !== newFinalValue) {\n this.setChanged(true);\n if (widgetUpdate) {\n this.setAttr(fldAttr.value, newFinalValue);\n } else {\n this._value = newFinalValue;\n }\n }\n return true;\n }\n}\n","export interface FilterDef {\n operators: string[];\n options: any[];\n}\n\nexport interface FilterSetup {\n fieldCode: string;\n operator: string;\n values: any[];\n}\nexport 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 sortDirections: string[];\n customAttributes: any;\n // Filtros\n filterVisible: boolean = false;\n filterDef: FilterDef;\n filterSetup: FilterSetup;\n\n constructor(recTableColReceived, formConfig) {\n this._formConfig = formConfig;\n this.filterDef = null;\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.sortDirections = (this.sortable) ? ['ascend', 'descend'] : [null];\n this.fieldFormat = recTableColReceived.format || '';\n this.customAttributes = recTableColReceived?.customAttributes ?? {};\n }\n }\n\n hideFilter() {\n this.filterVisible = false;\n }\n\n addFilterDefinition(filterDefinition) {\n this.filterDef = {\n operators: filterDefinition.operators,\n options: filterDefinition.options ?? null,\n };\n }\n\n get filterDefinition() {\n return this.filterDef;\n }\n\n addFilter(columnValues, operator) {\n this.filterSetup = {\n fieldCode: this.fieldCode,\n operator: operator ?? this.filterDef.operators[0],\n values: columnValues,\n }\n }\n\n get filter() {\n return this.filterSetup;\n }\n\n removeFilter() {\n this.filterSetup = null;\n }\n\n get options() {\n if (this.filterDef?.operators?.length === 1 && this.filterDef?.operators[0] === 'IN') {\n return this.filterDef?.options;\n }\n return null;\n }\n\n serSortDirections(ascend: boolean, descend: boolean) {\n this.sortDirections = [];\n if (ascend) {\n this.sortDirections.unshift('ascend');\n }\n if (descend) {\n this.sortDirections.unshift('descend');\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","import { RecordTableColumn } from './column';\nimport { operators } from '../form.constants';\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 this.recordData[fieldCode] = fieldValue ?? '';\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 this.recordData[fieldCode] = fieldValue ?? '';\n });\n }\n }\n\n toggleSelect() { this.selected = !this.selected; }\n select() { this.selected = true; }\n unselect() { this.selected = false; }\n\n get recordIdKey() {\n return (typeof this.recordId === 'object')\n ? JSON.stringify(this.recordId) : this.recordId;\n }\n\n getFieldValue(fieldCode): any {\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(columnFilters) {\n if (!columnFilters || columnFilters.length === 0) {\n return true;\n }\n for (const condition of columnFilters) {\n const { fieldCode, operator, values } = condition;\n if (this.recordData.hasOwnProperty(fieldCode)) {\n const fieldValue = this.recordData[fieldCode];\n const stringValue = fieldValue.toString().toUpperCase();\n if (operator === operators.G && fieldValue <= values[0]) {\n return false;\n }\n if (operator === operators.L && fieldValue >= values[0]) {\n return false;\n }\n if (operator === operators.GE && fieldValue < values[0]) {\n return false;\n }\n if (operator === operators.LE && fieldValue > values[0]) {\n return false;\n }\n if (operator === operators.IN && !values.includes(fieldValue)) {\n return false;\n }\n if (operator === operators.EQ) {\n return fieldValue === values[0];\n }\n if (operator === operators.NEQ && fieldValue === values[0]) {\n return false;\n }\n if (operator === operators.HAS && !stringValue.includes(values[0].toString().toUpperCase())) {\n return false;\n }\n if (operator === operators.NOTHAS && stringValue.includes(values[0].toString().toUpperCase())) {\n return false;\n }\n if (operator === operators.BETWEEN && (fieldValue < values[0] || fieldValue > values[1])) {\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 { 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 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 private _tableColumnObj = {};\n private _appendPages: boolean;\n private _actions: TableAction[];\n private _actionsObj = {};\n\n // Mecanismos de filtrado nueva versión\n private globalFilterStrings: string[] = [];\n private selectedRecords: any;\n private globalSearch: boolean;\n private restrictedId: any;\n private layout: string;\n\n tableRecords: TableRecordData[];\n tableRecordObj = {};\n visibleRecords: TableRecordData[];\n columns: RecordTableColumn[];\n selectable: boolean;\n selectionBackend: boolean;\n selectionField: string;\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 sortable: boolean;\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 this.columns = [];\n this._tableColumnObj = {};\n this._actions = [];\n this._actionsObj = {};\n this.tableRecords = [];\n this.globalSearch = false;\n this.restrictedId = null;\n\n this.tableTitle = tableReceived.tableTitle;\n this._appendPages = tableReceived?.append ?? false;\n this.selectable = tableReceived?.selectable ?? false;\n this.selectionBackend = tableReceived?.selectionBackend ?? false;\n this.sortable = tableReceived?.sortable ?? false;\n\n this.setAttr('allSelected', false);\n this.setAttr('tableCode', tableReceived.tableCode);\n this.setAttr('clientPaging', tableReceived?.clientPaging ?? true);\n this.setAttr('globalSearch', tableReceived?.simpleFilter ?? false);\n this.setAttr('sorting', { columnName: '', direction: '' });\n this.setAttr('recordsPerPage', formConfig.defaultRecordsPerPage);\n this.setAttr('layout', '');\n\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 this.selectionField = (this.selectable) ? tableReceived?.selectionField : null;\n // Filtros predefinidos en el formulario\n if (tableReceived.filters) {\n for (let index = 0; index < tableReceived.filters.length; index++) {\n this.addFilterDefinition(tableReceived.filters[index].fieldCode, tableReceived.filters[index]);\n }\n }\n }\n\n get columnNames() { return Object.keys(this._tableColumnObj); }\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 getLayout() { return this.layout; }\n setLayout(layout) { this.setAttr('layout', layout); }\n hasActions() { return (this._actions.length > 0); }\n getSelectedRecords() { return this.tableRecords.filter(rec => rec.selected).map(rec => rec.recordId); }\n activateGlobalSearch() { this.globalSearch = true; }\n inactivateGlobalSearch() { this.globalSearch = false; }\n columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }\n putOnWait() { this.waiting = true; }\n freeWaiting() { this.waiting = false; }\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 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 return null;\n }\n\n clean() {\n this.tableRecords = [];\n this.unSelectAll();\n this.tableRecordObj = {};\n this.updateVisibleRecords();\n }\n\n selectAll() {\n this.setAttr('allSelected', true);\n this.tableRecords.forEach(record => record.select());\n this.setAttr('selectedRecords', this.getSelectedRecords());\n return true;\n\n }\n\n unSelectAll() {\n this.setAttr('allSelected', false);\n this.tableRecords.forEach(record => record.unselect());\n this.setAttr('selectedRecords', this.getSelectedRecords());\n return true;\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, this.selectionField);\n const recordIdKey = recordReceived.recordIdKey;\n newRecords.push(recordReceived);\n newRecordsObj[recordIdKey] = recordReceived;\n }\n this.tableRecords = newRecords;\n this.setAttr('selectedRecords', this.getSelectedRecords());\n this.tableRecordObj = newRecordsObj;\n this.updateVisibleRecords();\n }\n\n appendRecords(records) { this.setTableRecords(records, true); }\n replaceRecords(records) { this.setTableRecords(records, false); }\n\n changePage(requestedPage) {\n if (this.clientPaging) {\n this.setAttr('currentPage', requestedPage);\n this.updateVisibleRecords();\n } else {\n this.notifyGetDataAction(requestedPage);\n }\n }\n\n updateVisibleRecords() {\n // updateView const changeViewAttributes = ['currentPage', 'recordsPerPage', 'sorting'];\n let visibleRecords: any[];\n if (this.clientPaging) {\n let filteredRecords = this.getFilteredRecords();\n this.setAttr('totalRecordsNumber', filteredRecords.length);\n visibleRecords = filteredRecords.slice((this.currentPage - 1) * this.recordsPerPage,\n (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage);\n } else {\n visibleRecords = this.tableRecords;\n }\n this.setAttr('visibleRecords', visibleRecords);\n }\n\n updateFromServer(tableReceived) {\n this.requestedPage = 1;\n this.clean();\n this.visible = tableReceived?.visible || true;\n this.totalPages = tableReceived.totalPages || 1;\n this.recordsNumber = tableReceived.recordsNumber;\n this.setAttr('currentPage', +tableReceived?.currentPage ?? 1);\n this.setAttr('recordsPerPage', +tableReceived.recordsPerPage);\n this.setAttr('totalRecordsNumber', (this.clientPaging) ? tableReceived.tableRecords.length : +tableReceived.totalRecordsNumber);\n this.setAttr('sorting', {\n columnName: tableReceived.sortingColumn || '',\n direction: tableReceived.sortingDirection || ''\n });\n this.waiting = false;\n if (this._appendPages) {\n this.replaceRecords(tableReceived.tableRecords);\n } else {\n this.appendRecords(tableReceived.tableRecords);\n }\n this.updateVisibleRecords();\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 setFilterById(id) {\n if (this.restrictedId === id) { return; }\n this.restrictedId = id;\n this.updateVisibleRecords();\n }\n\n cleanIdFilter() {\n if (this.restrictedId === null) { return; }\n this.restrictedId = null;\n this.updateVisibleRecords();\n }\n\n setGlobalFilterString(text) {\n this.globalFilterStrings = text.split(' ').filter(t => t && t.trim().length > 0).map(t => t.trim()) ?? [];\n if (this.clientPaging) {\n this.changePage(1);\n }\n }\n\n addFilterDefinition(columnName, filterDefinition) {\n const tableColumn = this.columnDefinition(columnName);\n tableColumn && tableColumn.addFilterDefinition(filterDefinition);\n }\n\n getFilteredRecords() {\n let filteredRecords = this.tableRecords;\n if (this.restrictedId) {\n filteredRecords = filteredRecords.filter(record => record.recordId === this.restrictedId);\n }\n if (this.globalFilterStrings.length > 0) {\n filteredRecords = filteredRecords.filter(record => record.hasPattern(this.globalFilterStrings));\n }\n const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);\n if (columnFilters.length > 0) {\n filteredRecords = filteredRecords.filter(record => record.hasCondition(columnFilters));\n }\n return filteredRecords;\n }\n\n getColumnFilter(columnName: string) {\n const tableColumn = this.columnDefinition(columnName);\n return tableColumn?.filter ?? null;\n }\n\n addColumnFilter(columnName: string, columnValues: any | any[], operator: string = null) {\n const tableColumn = this.columnDefinition(columnName);\n const columnFilterDefinition = tableColumn?.filterDefinition ?? null;\n if (!columnFilterDefinition) {\n return null;\n }\n tableColumn && tableColumn.addFilter(columnValues, operator);\n this.updateVisibleRecords();\n }\n\n removeColumnFilter(columnName: string) {\n const tableColumn = this.columnDefinition(columnName);\n tableColumn && tableColumn.removeFilter();\n this.updateVisibleRecords();\n }\n\n get currentFilter() {\n const compactFilter: any = {\n simpleFilterWords: this.globalFilterStrings,\n advancedFilter: [],\n };\n const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);\n for (let index = 0; index < columnFilters.length; index++) {\n const columnFilter = columnFilters[index];\n compactFilter.advancedFilter.push({\n fieldCode: columnFilter.fieldCode,\n operator: columnFilter.operator,\n fieldValue1: columnFilter.values[0],\n fieldValue2: columnFilter.values[1],\n });\n }\n return compactFilter;\n }\n\n // Ordenamiento de registros local\n\n sort(columnName, direction) {\n this.setRequiredOrder(columnName, direction);\n if (this.clientPaging) {\n this.localSortData()\n } else {\n this.notifyGetDataAction();\n }\n }\n\n setRequiredOrder(columnField, direction = null) {\n this.setAttr('sorting', {\n columnName: columnField,\n direction: (direction === 'ascend') ? TABLE_SORT_ASCENDING : TABLE_SORT_DESCENDING,\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.unSelectAll();\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 { FormAction } from './action';\nimport { 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.getField(code);\n arrayToAdd = this.subSectionFields;\n break;\n case elementTypes.table:\n elementObject = formObject.getTable(code);\n arrayToAdd = this.subSectionTables;\n break;\n case elementTypes.action:\n elementObject = formObject.getAction(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 getActions(): FormAction[] {\n return this.subSectionActions;\n }\n\n getActionNames(): string[] {\n return this.subSectionActions.map(action => action.actionCode);\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 { FormAction } from './action';\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 customAttributes: any;\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 this.customAttributes = sectionReceived?.customAttributes ?? null;\n }\n\n getCustomAttribute(name) { return this.customAttributes?.[name] ?? null; }\n setCustomAttribute(name, value) { return name && (this.customAttributes[name] = value); }\n matchAttribute(name, value) { return this.customAttributes?.[name] === value; }\n\n get code() { return this.sectionCode; }\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 getActions(): FormAction[] {\n let actionArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n actionArray = actionArray.concat(subSection.getActions());\n }\n }\n return actionArray;\n }\n\n getActionNames(): string[] {\n let actionArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n actionArray = actionArray.concat(subSection.getActionNames());\n }\n }\n return actionArray;\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 { FormAction } from './action';\nimport { FieldDescriptor, FieldOption } from './field';\nimport { RecordTable } from './table/table';\nimport { RecordFormSection } from './section';\nimport { RecordFormSubSection } from './subsection';\nimport { NO_ERROR, HEADER } from './form.constants';\nimport { TableRecordData } from './table/row-data';\n\nconst ACTIVE = 'active';\nconst SHOW = 'show';\nconst HIDE = 'hide';\nconst ENABLE = 'enable';\nconst DISABLE = 'disable';\nconst CLEAN = 'clean';\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 interface FieldPayload {\n fieldCode: string;\n fieldValue: any;\n editable: boolean;\n visible: boolean;\n required: boolean;\n fieldOptions: string,\n}\n\nexport interface TablePayload {\n tableCode: string;\n visible: boolean;\n currentPage: number;\n requestedPage: number;\n recordsPerPage: number;\n currentFilter: any,\n sortingColumn: string;\n sortingDirection: string;\n}\n\ninterface FormPayload {\n fields: FieldPayload[],\n tables: TablePayload[],\n}\n\nexport class FormStructureAndData {\n state: string;\n _name: string;\n _formConfig: any;\n private _title: string;\n private _stateFlow: StateFlow;\n private _fieldArray: FieldDescriptor[];\n private _fields = {};\n private _actionArray: FormAction[];\n private _actions = {};\n private _tableArray: RecordTable[];\n private _tables = {};\n private _sectionArray: RecordFormSection[];\n private _sections = {};\n private _immutableData = {};\n private _extraInfo = {};\n private _exclusiveSectionsByAttr = {};\n\n constructor(definitionReceived, formConfig) {\n this._formConfig = formConfig;\n this.state = '';\n this._actionArray = [];\n this._fieldArray = [];\n this._tableArray = [];\n this._sectionArray = [];\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._actionArray.push(globalAction);\n this._actions[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._fieldArray.push(fieldToAdd);\n this._fields[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._tableArray.push(tableToAdd);\n this._tables[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._sectionArray.push(sectionToAdd);\n this._sections[sectionCode] = sectionToAdd;\n }\n }\n }\n }\n\n getTitle(): string { return this._title; }\n setTitle(title: string): void { this._title = title; }\n get name(): string { return this._name; }\n set name(name) { this._name = name; }\n\n // Estados\n get defaultState(): string { return this._stateFlow.defaultState; }\n supportState(state: string): boolean { return this._stateFlow.states?.includes(state); }\n supportMode(state: string): boolean { return this.supportState(state); }\n get states(): any[] { return this._stateFlow.states; }\n\n getCurrentState(): string { return this.state; }\n\n changeState(newState: string): boolean {\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?: string): void {\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 // immutable Data\n getImmutableElement(name: string): any { return this._immutableData?.[name]?.value ?? null; }\n set immutableData(immutableData) { Object.assign(this._immutableData, immutableData); }\n get immutableData(): any { return JSON.parse(JSON.stringify(this._immutableData)); }\n\n // extra Info\n getExtraInfo(name: string): any { return this._extraInfo?.[name]?.value ?? null; }\n set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }\n get extraInfo(): any { return JSON.parse(JSON.stringify(this._extraInfo)); }\n\n // Fields\n get fields(): any { return this._fields; }\n get fieldNames(): string[] { return this.getFieldNames(); }\n getFields(): FieldDescriptor[] { return this._fieldArray; }\n getFieldNames(): string[] { return this._fieldArray.map(field => field.fieldCode); }\n getField(code: string): FieldDescriptor { return (code && this._fields?.[code]) ? this._fields[code] : null; }\n enableField(code: string): void { this.getField(code)?.enable(); }\n disableField(code: string): void { this.getField(code)?.disable(); }\n getFieldValue(code: string): any { return this.getField(code)?.getValue(); }\n getFieldOptionText(code: string): any { return this.getField(code)?.getOptionText(); }\n getFieldOptions(code: string): FieldOption[] { return this.getField(code)?.getFieldOptions() ?? null; }\n setFieldValue(code: string, value: any): any { this.getField(code)?.setValue(value); }\n setFieldError(code: string, errorCode: string, message: string, type: string = 'error'): any { this.getField(code)?.setError(errorCode, message, type); }\n setFieldIntrinsicErrorMessage(code: string, message: string): any { this.getField(code)?.setIntrinsicErrorMessage(message); }\n setFieldRequired(code: string, required: boolean): any { this.getField(code)?.setRequired(required); }\n setFieldErrorMessage(code: string, message: string): any { this.getField(code)?.setErrorMessage(message); }\n\n setFieldOptions(code: string, optionsArray: any[], idAttribute: string, nameAttribute: string): any {\n const field = this.getField(code);\n if (field && optionsArray?.length > 0) {\n const fieldOptions = optionsArray.map(item => ({\n fieldOptionId: item[idAttribute],\n fieldOptionValue: item[nameAttribute]\n }));\n field.setFieldOptions(fieldOptions);\n }\n }\n\n getFieldSet(filter, inputCodes: string[] | string, secCode?: string, subCode?: string): string[] {\n let codes = null;\n if (typeof inputCodes === 'string' && inputCodes) {\n codes = [inputCodes];\n } else if (Array.isArray(inputCodes) && inputCodes.length > 0) {\n codes = inputCodes;\n } else if (secCode && !subCode) {\n codes = this.getSection(secCode)?.getFieldNames() ?? [];\n } else if (secCode && subCode) {\n codes = this.getSubSection(secCode, subCode)?.getFieldNames() ?? [];\n } else {\n codes = this.getFieldNames();\n }\n return (filter) ? codes.filter(fld => filter(this.getField(fld))) : codes;\n }\n\n applyOnFields(processFunc, inputCodes?: string[] | string, secCode?: string, subCode?: string): number {\n if (!processFunc) { return 0; }\n const codes = this.getFieldSet(null, inputCodes, secCode, subCode);\n let processedFields = 0;\n for (const code of codes) {\n const field = this.getField(code);\n if (field) {\n try {\n processFunc(field);\n processedFields += 1;\n } catch (e) {\n console.log(`Error procesando funcion en campo ${field}: ${e}`);\n }\n }\n }\n return processedFields;\n }\n\n enableFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.enable(), codes, secCode, subCode);\n }\n\n showFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.show(), codes, secCode, subCode);\n }\n\n hideFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.hide(), codes, secCode, subCode);\n }\n\n showLabelFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.showLablel(), codes, secCode, subCode);\n }\n\n hideLabelFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.hideLabel(), codes, secCode, subCode);\n }\n\n disableFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.disable(), codes, secCode, subCode);\n }\n\n cleanFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.clean(), codes, secCode, subCode);\n }\n\n tagFieldsWithError(message: string, codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.setErrorMessage(message), codes, secCode, subCode);\n }\n\n cleanErrorFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.tagFieldsWithError('', codes, secCode, subCode);\n }\n\n tagEmptyRequiredFields(message: string, codes = null, secCode?: string, subCode?: string): boolean {\n return this.tagFieldsWithError(message, this.getRequiredEmptyFields(codes, secCode, subCode)) > 0;\n }\n\n getRequiredFields(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => fld.required, codes, secCode, subCode);\n }\n\n getRequiredEmptyFields(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => fld.required && fld.empty, codes, secCode, subCode);\n }\n\n getChangedFields(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => !fld.outputOnly && fld.hasChanged(), codes, secCode, subCode);\n }\n\n getFieldsWithValidationIssues(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => fld.errorCode !== NO_ERROR, codes, secCode, subCode);\n }\n\n getFieldsValues(inputCodes?: string[] | string, secCode?: string, subCode?: string): any {\n const codes = this.getFieldSet(null, inputCodes, secCode, subCode);\n const resultObject = {};\n for (let index = 0; index < codes.length; index++) {\n const code = codes[index];\n if (code) {\n resultObject[code] = this._fields?.[code]?.getValue() ?? null;\n }\n }\n return resultObject;\n }\n\n // Acciones\n get actions() { return this._actions; }\n\n getActionsByAttribute(name: string, value): FormAction[] { return this._actionArray.filter(actionItem => actionItem.matchAttribute(name, value)); }\n getActions(): FormAction[] { return this._actionArray; }\n getAction(code: string): FormAction { return (code && this._actions?.[code]) ? this._actions[code] : null; }\n showActions(codes: string[] | string): void { return this.execOnActions(codes, SHOW); }\n hideActions(codes: string[] | string): void { return this.execOnActions(codes, HIDE); }\n enableActions(codes: string[] | string): void { return this.execOnActions(codes, ENABLE); }\n disableActions(codes: string[] | string): void { return this.execOnActions(codes, DISABLE); }\n\n execOnActions(codes: string[] | string, functionName: string): void {\n const actionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\n if (!functionName || actionCodes.length === 0) { return; }\n actionCodes.forEach(code => {\n const action = this.getAction(code);\n action?.[functionName]?.();\n });\n }\n\n // Tablas\n get tables(): any { return this.tables; }\n getTables(): RecordTable[] { return this._tableArray; }\n getTable(code: string): RecordTable { return (code && this._tables?.[code]) ? this._tables[code] : null; }\n getTableRecord(code: string, id: string): TableRecordData { return this.getTable(code)?.getTableRecord(id) }\n\n enableTables(codes: string[] | string): void { return this.execOnTables(codes, ENABLE); }\n disableTables(codes: string[] | string): void { return this.execOnTables(codes, DISABLE); }\n showTables(codes: string[] | string): void { return this.execOnTables(codes, SHOW); }\n hideTables(codes: string[] | string): void { return this.execOnTables(codes, HIDE); }\n cleanTables(codes: string[] | string): void { return this.execOnTables(codes, CLEAN); }\n\n execOnTables(codes: string[] | string, functionName: string) {\n const tableCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\n if (!functionName || tableCodes.length === 0) { return; }\n tableCodes.forEach(code => {\n const table = this.getTable(code);\n table?.[functionName]?.();\n });\n }\n\n // Secciones\n get sections(): any { return this._sections; }\n getSections(): RecordFormSection[] { return this._sectionArray; }\n getSectionsByAttribute(name, value): RecordFormSection[] { return this._sectionArray.filter(item => item.matchAttribute(name, value)); }\n get sectionTitles(): string[] { return this._sectionArray.map(formSection => formSection.sectionTitle); }\n get visibleSections(): RecordFormSection[] { return this._sectionArray.filter(sec => sec.visible); }\n getSection(code: string): RecordFormSection { return (code && this._sections?.[code]) ? this._sections[code] : null; }\n showSections(codes: string[] | string): void { this.execOnSections(codes, SHOW); }\n hideSections(codes: string[] | string): void { this.execOnSections(codes, HIDE); }\n activeSection(): string { return this._exclusiveSectionsByAttr[ACTIVE]; }\n getSubSection(code: string, subCode): RecordFormSubSection { return this.getSection(code)?.getSubsection(subCode) ?? null; }\n showSubSections(code: string, subCodes: string[] | string): void { return this.execOnSubSections(code, subCodes, SHOW); }\n hideSubSections(code: string, subCodes: string[] | string): void { return this.execOnSubSections(code, subCodes, HIDE); }\n getSectionActions(code): FormAction[] { return this.getSection(code)?.getActions() ?? null; }\n getSectionActionNames(code): string[] { return this.getSection(code)?.getActionNames() ?? null; }\n\n activateSection(code: string): void {\n if (code === this._exclusiveSectionsByAttr[ACTIVE]) { return; }\n this.getSection(this.activeSection())?.inactivate();\n this.getSection(code)?.activate();\n this._exclusiveSectionsByAttr[ACTIVE] = code;\n }\n\n execOnSections(codes: string[] | string, functionName: string): void {\n const sectionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\n if (!functionName || sectionCodes.length === 0) { return; }\n sectionCodes.forEach(code => {\n const section = this.getSection(code);\n section?.[functionName]?.();\n });\n }\n\n execOnSubSections(code: string, subNames: string[] | string, functionName: string): void {\n const subCodes = (Array.isArray(subNames)) ? subNames : (subNames ? [subNames] : []);\n const section = this.getSection(code);\n if (!functionName || !section || subCodes.length === 0) { return; }\n for (const subCode of subCodes) {\n const subSection = this.getSubSection(code, subCode);\n subSection?.[functionName]?.();\n }\n }\n\n /**\n * Métodos propios de gestión del formulario\n */\n\n cleanData(): void {\n for (const field of this._fieldArray) {\n field.setValue(field.defaultValue);\n }\n for (const table of this._tableArray) {\n table.clean();\n }\n }\n\n getPayload(): any {\n const formData: FormPayload = {\n fields: [],\n tables: [],\n };\n formData.fields = this.getFields().filter(fld => !fld.outputOnly)\n .map(fld => {\n const fieldPayload: FieldPayload = {\n fieldCode: fld.fieldCode,\n fieldValue: fld.getValue(),\n editable: !fld.disabled,\n visible: fld.visible,\n required: fld.required,\n fieldOptions: '',\n }\n return fieldPayload;\n });\n\n formData.tables = this.getTables().map(tbl => {\n const tablePayload: TablePayload = {\n tableCode: tbl.tableCode,\n visible: tbl.visible,\n currentPage: tbl.currentPage,\n requestedPage: tbl.requestedPage,\n recordsPerPage: tbl.recordsPerPage,\n currentFilter: tbl.currentFilter,\n sortingColumn: tbl.sorting.columnName,\n sortingDirection: tbl.sorting.direction,\n };\n return tablePayload\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 updatedForm.fields = storedForm?.fields ?? {};\n updatedForm.extra = storedForm?.extra ?? {};\n if (formInfo.fields) {\n Object.assign(updatedForm.fields, formInfo.fields);\n }\n if (formInfo.extra) {\n Object.assign(updatedForm.extra, formInfo.extra);\n }\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, HEADER } from '../../classes/forms/form.constants';\nimport { FormAction } from '../../classes/forms/action';\nimport { FieldDescriptor, FieldOption } from '../../classes/forms/field';\nimport { RecordTable } from '../../classes/forms/table/table';\nimport { RecordFormSection } from '../../classes/forms/section';\nimport { RecordFormSubSection } from '../../classes/forms/subsection';\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 private _formStructure: FormStructureAndData = null;\n private _controlToken: string = null;\n private _originToken: string;\n private _formRoute: string;\n private _definitionObtained: boolean = false;\n // Eventos de acciones y campos\n private _formSectionsActivate: any = {};\n private _formSectionsInactivate: any = {};\n private _formActionsStart: any = {};\n private _formActionsFinish: any = {};\n private _fieldInputValidation: any = {};\n private _fieldValidationsStart: any = {};\n private _fieldValidationsFinish: any = {};\n // Callback de acciones de tablas\n private _tableSelectionsStart: any = {};\n private _tableSelectionsFinish: any = {};\n private _tableActionsStart: any = {};\n private _tableActionsFinish: any = {};\n private _tableGetDataStart: any = {};\n private _tableGetDataFinish: any = {};\n\n protected inputDataFields: any = {};\n protected extraData: any = {};\n protected _eventEmiter: LibEventManagerService;\n\n\n formConfig: any;\n name: string;\n formSubject: string;\n _errorType: string = '';\n errorCode: string = '';\n errorMessage: string = '';\n errorDetail: string = '';\n visible: boolean = false;\n\n fields: any;\n actions: any;\n sections: any;\n busy: boolean = false;\n\n getTitle() { return this._formStructure?.getTitle(); }\n setTitle(title: string) { return this._formStructure?.setTitle(title); }\n cleanData() { return this._formStructure?.cleanData(); }\n getCurrentState() { return this._formStructure?.getCurrentState(); }\n supportState(state: string) { return this._formStructure?.supportState(state); }\n changeState(state) { return this._formStructure?.changeState(state); }\n getStates() { return this._formStructure?.states; }\n getImmutableElement(name: string) { return this._formStructure?.getImmutableElement(name); }\n getExtraInfo(name: string) { return this._formStructure?.getExtraInfo(name); }\n getFields() { return this._formStructure?.getFields(); }\n getFieldNames() { return this._formStructure?.getFieldNames(); }\n getField(code: string) { return this._formStructure?.getField(code); }\n enableField(code: string) { return this._formStructure?.enableField(code); }\n disableField(code: string) { return this._formStructure?.disableField(code); }\n getFieldValue(code: string): any { return this._formStructure?.getFieldValue(code); }\n getFieldOptionText(code: string): any { return this._formStructure?.getFieldOptionText(code); }\n getFieldsValues(codes: string[]) { return this._formStructure?.getFieldsValues(codes); }\n getFieldOptions(code: string): FieldOption[] { return this._formStructure?.getFieldOptions(code); }\n setFieldValue(code: string, value: any) { return this._formStructure?.setFieldValue(code, value); }\n setFieldRequired(code: string, required: boolean) { return this._formStructure?.setFieldRequired(code, required); }\n setFieldErrorMessage(code: string, errorMessage: string) { return this._formStructure?.setFieldErrorMessage(code, errorMessage); }\n setFieldError(code: string, errorCode: string, message: string, type?: string) { return this._formStructure?.setFieldError(code, errorCode, message, type); }\n setFieldIntrinsicErrorMessage(code: string, message: string) {\n return this._formStructure?.setFieldIntrinsicErrorMessage(code, message);\n }\n setFieldOptions(code, optionsArray, idAttribute, nameAttribute) {\n return this._formStructure?.setFieldOptions(code, optionsArray, idAttribute, nameAttribute);\n }\n getFieldSet(filterFunc?, codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getFieldSet(filterFunc, codes, secCode, subCode);\n }\n applyOnFields(processFunc, codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.applyOnFields(processFunc, codes, secCode, subCode);\n }\n applyProcessToAllFields(processFunc) {\n return this._formStructure?.applyOnFields(processFunc);\n }\n cleanFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.cleanFields(codes, secCode, subCode);\n }\n getRequiredFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getRequiredFields(codes, secCode, subCode);\n }\n getRequiredEmptyFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getRequiredEmptyFields(codes, secCode, subCode);\n }\n getChangedFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getChangedFields(codes, secCode, subCode);\n }\n getFieldsWithValidationIssues(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getFieldsWithValidationIssues(codes, secCode, subCode);\n }\n tagFieldsWithError(errorMessage, codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.tagFieldsWithError(errorMessage, codes, secCode, subCode);\n }\n cleanErrorFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.cleanErrorFields(codes, secCode, subCode);\n }\n showLabelFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.showLabelFields(codes, secCode, subCode);\n }\n hideLabelFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.hideLabelFields(codes, secCode, subCode);\n }\n enableFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.enableFields(codes, secCode, subCode);\n }\n disableFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.disableFields(codes, secCode, subCode);\n }\n /**\n * @deprecated Use enableFields\n */\n enableEditFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this.enableFields(codes, secCode, subCode);\n }\n /**\n * @deprecated Use disableFields\n */\n disableEditFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this.disableFields(codes, secCode, subCode);\n }\n showFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.showFields(codes, secCode, subCode);\n }\n hideFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.hideFields(codes, secCode, subCode);\n }\n getActionsByAttribute(name: string, value) {\n return this._formStructure?.getActionsByAttribute(name, value);\n }\n getHeaderActions() {\n return this._formStructure?.getActionsByAttribute('location', HEADER);\n }\n getAction(actionCode: string): FormAction {\n return this._formStructure?.getAction(actionCode);\n }\n showActions(actionArray): void {\n return this._formStructure?.showActions(actionArray);\n }\n hideActions(actionArray): void {\n return this._formStructure?.hideActions(actionArray);\n }\n enableActions(actionArray): void {\n return this._formStructure?.enableActions(actionArray);\n }\n disableActions(actionArray): void {\n return this._formStructure?.disableActions(actionArray);\n }\n showAction(code: string): void {\n return this._formStructure?.showActions(code);\n }\n hideAction(code: string): void {\n return this._formStructure?.hideActions(code);\n }\n enableAction(code: string): void {\n return this._formStructure?.enableActions(code);\n }\n disableAction(code: string): void {\n return this._formStructure?.disableActions(code);\n }\n getSections(): RecordFormSection[] {\n return this._formStructure?.getSections();\n }\n activateSection(code): void {\n return this._formStructure?.activateSection(code);\n }\n getSectionsTitles(): string[] {\n return this._formStructure?.getSections().map(sec => sec.title);\n }\n getSection(code: string): RecordFormSection {\n return this._formStructure?.getSection(code);\n }\n showSection(code: string): void {\n return this._formStructure?.showSections(code);\n }\n hideSection(code: string): void {\n return this._formStructure?.hideSections(code);\n }\n showSections(codes: string[] | string): void {\n return this._formStructure?.showSections(codes);\n }\n hideSections(codes: string[] | string): void {\n return this._formStructure?.hideSections(codes);\n }\n getSubSection(code: string, subCode: string): RecordFormSubSection {\n return this._formStructure?.getSubSection(code, subCode);\n }\n showSubSection(code: string, subCode: string): void {\n return this._formStructure?.showSubSections(code, subCode);\n }\n hideSubSection(code: string, subCode: string): void {\n return this._formStructure?.hideSubSections(code, subCode);\n }\n showSubSections(code: string, subCodes: string[] | string): void {\n return this._formStructure?.showSubSections(code, subCodes);\n }\n hideSubSections(code: string, subCodes: string[] | string): void {\n return this._formStructure?.hideSubSections(code, subCodes);\n }\n getSectionActions(code: string): FormAction[] {\n return this._formStructure?.getSectionActions(code);\n }\n getSectionActionNames(code: string): string[] {\n return this._formStructure?.getSectionActionNames(code);\n }\n\n getTables() {\n return this._formStructure?.getTables();\n }\n showTables(codes: string[] | string) {\n return this._formStructure?.showTables(codes);\n }\n hideTables(codes: string[] | string) {\n return this._formStructure?.hideTables(codes);\n }\n cleanTables(codes: string[] | string) {\n return this._formStructure?.cleanTables(codes);\n }\n getTable(code: string) {\n return this._formStructure?.getTable(code);\n }\n showTable(code: string) {\n return this._formStructure?.showTables(code);\n }\n hideTable(code: string) {\n return this._formStructure?.hideTables(code);\n }\n cleanTable(code: string) {\n return this._formStructure?.getTable(code)?.clean();\n }\n getTableRecord(code: string, recordId: any) {\n return this._formStructure?.getTableRecord(code, recordId);\n }\n\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 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.sections = null;\n this._controlToken = null;\n this.inputDataFields = {};\n this._definitionObtained = false;\n // Se limpian los manejadores de eventos\n this.visible = 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 formVisible(): boolean { return this.visible; }\n get formManager() { return this; }\n get formCode(): string { return this.name; }\n set formCode(name: string) { this.name = name; }\n get inServerProcess() { return this.busy; }\n get form(): FormStructureAndData { return this._formStructure; }\n\n get state(): string { return this._formStructure?.state; }\n get currentState(): string { return this._formStructure?.state; }\n set currentState(state: string) { this._formStructure.changeState(state); }\n get immutableData(): any { return this._formStructure?.immutableData }\n get extraInfo(): any { return this._formStructure?.extraInfo }\n get visibleSections(): RecordFormSection[] { return this._formStructure?.visibleSections; }\n\n get formRoute(): string { return this._formRoute; }\n set formRoute(route: string) { this._formRoute = route; }\n\n get subject(): string { return this.formSubject; }\n\n // Métodos virtuales\n customPreProcessing() { }\n customFormStart() { }\n displayActionServerError() { }\n displayValidationServerError() { }\n displayTableServerError() { }\n showFieldInfo(fieldCode?: string, detail?: any) { }\n showModalDialog(title, body, options, callback?, params?) { }\n openUploadDialog(title, body, options, callback?, params?) { }\n\n /**\n * @deprecated Use supportState\n */\n supportMode(state: string): boolean { return this.supportState(state); }\n\n /**\n * @deprecated Use getField\n */\n getFieldObject(code: string): FieldDescriptor { return this.getField(code); }\n\n /**\n * @deprecated Use getAction\n */\n getActionObject(code: string): FormAction { return this.getAction(code); }\n\n /**\n * @deprecated Use getTable\n */\n getTableObject(code: string): RecordTable { return this.getTable(code); }\n\n /**\n * @deprecated Use getSection\n */\n getSectionObject(code: string): RecordFormSection { return this.getSection(code); }\n\n /**\n * @deprecated Use changeState\n */\n changeFormMode(state: string): boolean { return this.changeState(state); }\n\n /**\n * @deprecated Use subject\n */\n getFormSubject(): string { return this.subject; }\n /**\n * @deprecated Use subject\n */\n getSubject(): string { return this.formSubject; }\n /**\n * @deprecated Use subject\n */\n getformSubject(): string { return this.getSubject(); }\n\n\n numSections(): number { return this._formStructure?.sections.length; }\n\n subscribeAppEvent(eventName: string, callback): void {\n this._eventEmiter.subscribe(eventName, callback);\n }\n\n openForm(name: string, data = null, backData = null, cleanStack = false): void {\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.state;\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(): boolean { return this._originToken !== null }\n goBack(): void { return this.formManagerService.backTo(); }\n goBackForm(): void { return this.goBack(); }\n getOriginDetail(): any { return this.formManagerService.getFormInfo(this._originToken); }\n\n setError(errorType: string, errorMessage: string, errorDetail: string): void {\n this._errorType = errorType || '';\n this.errorMessage = errorMessage || '';\n this.errorDetail = errorDetail || '';\n }\n\n resetError(): void { this.setError(null, null, null); }\n getErrorType(): string { return this._errorType; }\n getErrorMessage(): string { return this.errorMessage; }\n getErrorDetail(): string { return this.errorDetail; }\n getErrorCode(): string { return this._errorType; }\n\n getFormParameter(name: string): string {\n return (name) ? (this.extraData?.[name] ?? null) : null;\n }\n\n preocessInputParams(params: any): string {\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 null;\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(): void {\n const formSections = this._formStructure.sections;\n const sectionNames = Object.keys(formSections);\n for (let index = 0; index < sectionNames.length; index++) {\n const sectionName = sectionNames[index];\n const section = formSections[sectionName];\n section.activation.subscribe(code => this.launchSectionActivation(code));\n section.inactivation.subscribe(code => this.launchSectionInactivation(code));\n }\n }\n\n subscribeFieldsSubjects(): void {\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(event => this.showFieldInfo(event.code, event.detail));\n });\n }\n }\n\n subscribeActionSubjects(): void {\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(): void {\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): Promise<void> {\n let initialState: string = 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.sections = this._formStructure.sections;\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.visible = true;\n this.subscribeSectionActivation();\n this.subscribeFieldsSubjects();\n this.subscribeActionSubjects();\n this.subscribeTableSubjects();\n this.customFormStart();\n }\n\n checkErrorRecordReceived(recordResponse: any): boolean {\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 return true;\n }\n\n errorOccured(): boolean {\n return (this.errorCode !== NO_ERROR);\n }\n\n /**\n * Soporte manejo de eventos de formulario\n */\n\n async requestFormAction(actionCode: string, actionSubject: any = {}): Promise<any> {\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: any) {\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.getAction(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.getField(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.getTable(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(codes: string[] | string, callbackMethod) {\n const sectionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const sectionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const actionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const actionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(code: string) {\n const sectionObject = this._formStructure.getSection(code);\n if (!sectionObject) { return; }\n const clientSectionMethods = this._formSectionsActivate[code];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async launchSectionInactivation(code: string) {\n const sectionObject = this._formStructure.getSection(code);\n if (!sectionObject) { return; }\n const clientSectionMethods = this._formSectionsInactivate[code];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async startAction(code: string) {\n const actionObject = this.getAction(code);\n if (!actionObject) { return; }\n this.resetError();\n actionObject.start();\n const clientActionMethods = this._formActionsStart[code];\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(action, actionResult) {\n const finishActionMethods = this._formActionsFinish[action.actionCode];\n if (finishActionMethods) {\n const clientActionPromises = [];\n for (const clientActionMethod of finishActionMethods) {\n clientActionPromises.push(clientActionMethod(action, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n completeGlobalAction(action: any) {\n return this.startServerAction(action);\n }\n\n /**\n * Manejadores de eventos para validaciones sobre campos\n */\n\n addFieldInputValidation(codes: string[] | string, callbackMethod) {\n const fieldSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const fieldSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const fieldSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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.getField(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: string | FieldDescriptor) {\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: any, validationResult: boolean) {\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: string) {\n return this.startServerFieldValidation(fieldCode);\n }\n\n /**\n * Manejadores de eventos para acciones sobre Tablas\n */\n\n addTableActionStart(code: string, actionCode: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getAction(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableActionsStart[code]) {\n tableEventHandlers = this._tableActionsStart[code];\n } else {\n tableEventHandlers = {};\n this._tableActionsStart[code] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableActionFinish(code: string, actionCode: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getAction(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableActionsFinish[code]) {\n tableEventHandlers = this._tableActionsFinish[code];\n } else {\n tableEventHandlers = {};\n this._tableActionsFinish[code] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableSelectionStart(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this._tableSelectionsStart[code]) {\n tableEventHandlers = this._tableSelectionsStart[code];\n } else {\n tableEventHandlers = [];\n this._tableSelectionsStart[code] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableSelectionFinish(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this._tableSelectionsFinish[code]) {\n tableEventHandlers = this._tableSelectionsFinish[code];\n } else {\n tableEventHandlers = [];\n this._tableSelectionsFinish[code] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataStart(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableGetDataStart[code]) {\n tableEventHandlers = this._tableGetDataStart[code];\n } else {\n tableEventHandlers = [];\n this._tableGetDataStart[code] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataFinish(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableGetDataFinish[code]) {\n tableEventHandlers = this._tableGetDataFinish[code];\n } else {\n tableEventHandlers = {};\n this._tableGetDataFinish[code] = tableEventHandlers;\n }\n tableEventHandlers[GET_DATA_ACTION] = callbackMethod;\n }\n\n async startTableGlobalAction(tableActionEvent: any) {\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: any) {\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: any, 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: any) {\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: any) {\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: any) {\n return this.startTableServerAction(tableAction);\n }\n\n async finishTableAction(tableActionDetail: any, 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: any) {\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: any) {\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: any, 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: any) {\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: any) {\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: any, 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: any) {\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: any) {\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: any, 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: string, 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: string, 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 requiredEmptyField?.focus();\n break;\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 validationIssueField.focus();\n break;\n }\n }\n return validationError;\n }\n\n copyTableRecordToFields(tableObj: any, mappingTable: any = 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","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 { 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 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":["INLINE_ACTION","HEADER"],"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/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/form.constants.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/element.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/table/column.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/table/action.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/classes/forms/subsection.ts","../../../projects/tuain-ng-forms-lib/src/lib/classes/forms/section.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() state: 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.state) && this.visibleOnRestriction();\n }\n\n get disabled() {\n return !(this.action?.enabledOn(this.state));\n }\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { FieldDescriptor } from '../../classes/forms/field';\n\nconst VALUE = 'value';\nconst FOCUS = 'focus';\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 minValue: any;\n maxValue: 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() state: 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 [fieldAttr1, compAttr1] = mapping[index];\n const compAttr = compAttr1.toString();\n const fieldAttr = fieldAttr1.toString();\n const attributeValue = this.field?.[fieldAttr]\n this.dafaultProcessFieldChange(compAttr, attributeValue);\n this.processFieldChange(compAttr, attributeValue);\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 this.dafaultProcessFieldChange(compAttr, value);\n this.processFieldChange(compAttr, value);\n });\n }\n this.start();\n }\n\n dafaultProcessFieldChange(attribute: string, value?: any) {\n if (attribute === VALUE) {\n this.updateValue();\n } else if (attribute === FOCUS) {\n this.focus();\n } else {\n this[attribute] = value;\n }\n }\n\n processFieldChange(attribute: string, value?: any) { }\n start() { }\n focus() { }\n\n updateObject() {\n this.field.setValue(this.value);\n }\n\n inputChanged() {\n this.field.setValue(this.value);\n this.onChangeContent();\n }\n\n inputTyped() {\n this.field.setValue(this.value);\n this.onInputChange();\n }\n\n updateValue() {\n this.value = this.field.getValue();\n }\n\n onInputChange() {\n setTimeout(() => this.field.notifyEditionPartial(), 50);\n }\n\n onChangeContent() {\n setTimeout(() => this.field.notifyEditionFinish(), 50);\n }\n\n onShowInfo(detail = null) {\n setTimeout(() => this.field.notifyEditionDetailRequest(detail), 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.state);\n }\n\n get disabled() {\n return !this.field?.enabledOn(this.state);\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() state: 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.state);\n }\n\n get disabled() {\n return !this.element?.enabledOn(this.state);\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() section: 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","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, ChangeDetectionStrategy } from '@angular/core';\nimport { TableRecordData } from '../../../classes/forms/table/row-data';\nimport { TableActionEvent } from '../../../classes/forms/table/table';\nimport { RecordTable, TableEvent } from '../../../classes/forms/table/table';\n\nconst changeViewAttributes = ['visibleRecords', 'currentPage', 'recordsPerPage'];\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 globalFilterString: string = '';\n\n // Atributos sincronizados del objeto\n code: any;\n columns: any;\n currentPage: number = 1;\n globalSearch: boolean = false;\n visibleRecords: any[];\n selectedRecords: any[] = [];\n recordsPerPage: any;\n totalRecordsNumber: number = 0;\n allSelected: boolean = false;\n layout: string;\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() table: RecordTable;\n @Input() tableRecords: TableRecordData[];\n @Input() disabled: boolean;\n @Input() state: string;\n @Input() waiting: boolean;\n\n ngOnInit() {\n if (this.table) {\n this.formConfig = this.table?._formConfig;\n this.tableFieldStyles = this.formConfig.tableFieldStyles;\n this.selectable = this.table.selectable;\n this.hasActions = this.table.hasActions();\n this.inlineActions = this.table.getActions(this.formConfig.tableActions.inline);\n this.globalActions = this.table.getActions(this.formConfig.tableActions.global);\n this.selectionActions = this.table.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 [tableAttrRaw, compAttrRaw] = mapping[index];\n const tableAttr = tableAttrRaw.toString();\n const compAttr = compAttrRaw.toString();\n this.syncAttribute(compAttr, this.table[tableAttr]);\n }\n // Subscripción a cambios en atributos\n this.table.attributeChange.subscribe(event => {\n const { name: tableAttr, value } = event;\n const compAttr = this.formConfig.componentTableAttrMap[tableAttr];\n this.syncAttribute(compAttr, value);\n });\n }\n this.start();\n }\n\n start() { }\n tableGlobalAction(actionCode: string) { this.table.notifyGlobalAction(actionCode); }\n tableSelectionAction(actionCode: string) { this.table.notifySelectionAction(actionCode); }\n tableActionSelected(actionEvent: TableActionEvent) { this.table.notifyInlineAction(actionEvent); }\n tableSelectionToggle(recordId) { this.table.notifyRecordSelection(recordId); }\n toggleSelectAll() { return (this.allSelected) ? this.table.unSelectAll() : this.table.selectAll(); }\n globalFilterCompleted() { this.changePage(1); }\n changePage(requestedPage) { this.table.changePage(requestedPage); }\n tableColumnSort(columnName, direction = null) { this.table.sort(columnName, direction ?? 'ascend'); }\n globalFilterChanged() { this.table.setGlobalFilterString(this.globalFilterString?.trim() ?? ''); }\n\n syncAttribute(name, value) {\n try {\n this[name] = value;\n return true;\n } catch {\n return false;\n }\n }\n\n filterHasChanged(column, values) {\n this.table.addColumnFilter(column.fieldCode, values);\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: 'G',\n L: 'L',\n GE: 'GE',\n LE: 'LE',\n EQ: 'EQ',\n NEQ: 'NEQ',\n HAS: 'HAS',\n NOTHAS: 'NOTHAS',\n BETWEEN: 'BETWEEN',\n IN: 'IN',\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 elementType: string;\n customAttributes: any;\n\n constructor(elementDefinition: any, formConfig: any) {\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.customAttributes = elementDefinition?.customAttributes ?? {};\n }\n\n getCustomAttribute(name: string): string { return this.customAttributes?.[name] ?? null; }\n setCustomAttribute(name: string, value: string): void { if (name) { this.customAttributes[name] = value; } }\n matchAttribute(name: string, value: string): boolean { return this.customAttributes?.[name] === value; }\n\n isField(): boolean { return this.elementType === elementTypes.field; }\n isAction(): boolean { return this.elementType === elementTypes.action; }\n isTable(): boolean { return this.elementType === elementTypes.table; }\n\n setVisibleStates(newStates: any): void {\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): void {\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: string): boolean { return (this.visibleStates && state) ? this.visibleStates.includes(state) : false; }\n enabledOnState(state: string): boolean { return (this.enabledStates && state) ? this.enabledStates.includes(state) : false; }\n\n /**\n * @deprecated Utilizar viewOnState\n */\n supportState(state: string): boolean { return this.viewOnState(state); }\n\n /**\n * @deprecated Utilizar viewOnState\n */\n supportMode(state: string): boolean { return this.viewOnState(state); }\n\n get visible(): boolean { return (this._isForced) ? this._visibleForced : this._visible; }\n set visible(visible: boolean) { this.setVisibility(visible); }\n\n visibleOn(state: string): boolean {\n return this.visible && this.viewOnState(state);\n }\n\n enabledOn(state: string): boolean {\n return !this.disabled && this.enabledOnState(state);\n }\n\n setVisibility(visible: boolean, forced: boolean = null): void {\n this._visible = visible && true;\n if (forced != null) {\n this._isForced = forced;\n }\n }\n\n show(forced?: boolean): void {\n this._visible = true;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = true;\n }\n }\n\n hide(forced?: boolean): void {\n this._visible = false;\n if (forced !== null) {\n this._isForced = forced;\n this._visibleForced = false;\n }\n }\n\n enable(): void { this.disabled = false; }\n disable(): void { this.disabled = true; }\n\n get enabled(): boolean { return !this.disabled; }\n get editable(): boolean { return !this.disabled; }\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\n restrictedOnField: string;\n restrictedOnOperator: string;\n restrictedOnValue: string;\n customValidation: 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.setCustomAttribute('location', actionDefinition.position || HEADER);\n this.backend = actionDefinition?.serverAction ?? false;\n this.newState = actionDefinition?.newState;\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 yn from 'yn';\nimport { elementTypes, NO_ERROR } from './form.constants';\nimport { FormElement } from './element';\nimport { isNgTemplate } from '@angular/compiler';\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: '_value',\n minValue: '_minValue',\n maxValue: '_maxValue',\n maxLength: '_maxLength',\n onValidation: '_onValidation',\n focus: 'focus',\n intrinsicErrorMessage: '_intrinsicErrorMessage',\n code: 'fieldCode',\n info: 'fieldInfo',\n defaultValue: 'defaultValue',\n defaultEditable: 'defaultEditable',\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 interface DetailEvent {\n code: string;\n detail: any;\n}\n\nexport interface FieldOption {\n fieldOptionValue: string;\n fieldOptionId: string;\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<DetailEvent>();\n private readonly _attributeChange = new Subject<any>();\n\n private validateOnServer: boolean;\n\n private _value: any;\n private _focus: boolean;\n\n private _minValue: any;\n private _maxValue: any;\n private _maxLength: number;\n _onValidation: boolean;\n _intrinsicErrorMessage: string;\n\n fieldCode: string;\n fieldInfo: string;\n defaultValue: string;\n defaultEditable: boolean;\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: FieldOption[];\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\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 get info() { return this.fieldInfo; }\n\n get validating() { return this._onValidation; }\n set validating(isValidating: boolean) { this.setAttr(fldAttr.onValidation, isValidating); }\n\n focus() { this.setAttr(fldAttr.focus, true); }\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\n getRequired() { return this.required; }\n setRequired(required: boolean) { this.required = required; }\n\n get required(): boolean { 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 if (intrinsicValidation && fieldValue && this._minValue && fieldValue < this._minValue) {\n intrinsicValidation = false;\n this.setError('99', 'Campo con valor inferior al mínimo');\n }\n if (intrinsicValidation && fieldValue && this._maxValue && fieldValue > this._maxValue) {\n intrinsicValidation = false;\n this.setError('99', 'Campo con valor superior al máximo');\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(detail: any) {\n const detailEvent: DetailEvent = {\n code: this.fieldCode,\n detail,\n };\n this._detailRequest.next(detailEvent);\n }\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 setLabel(label) { this.setAttr(fldAttr.title, label); }\n clean() { this.setValue(this.defaultValue || ''); this.resetError(); }\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 get empty(): boolean { return this.isEmpty(); }\n\n isEmpty(): boolean {\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(): any {\n if (this.fieldType === this._formConfig.fieldTypes.boolean\n || this.fieldType === this._formConfig.fieldTypes.check) {\n return yn(this._value);\n }\n return this._value;\n }\n\n getOptionText() {\n return this.fieldOptions?.find(item => item.fieldOptionId === this._value)?.fieldOptionValue ?? null;\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 setMinValue(inputMinValue) {\n let minValue = inputMinValue;\n if (this.fieldType === this._formConfig.fieldTypes.date) {\n minValue = new Date(minValue);\n }\n this.setAttr(fldAttr.minValue, minValue);\n }\n\n setMaxValue(inputMaxValue) {\n let maxValue = inputMaxValue;\n if (this.fieldType === this._formConfig.fieldTypes.date) {\n maxValue = new Date(maxValue);\n }\n this.setAttr(fldAttr.maxValue, maxValue);\n }\n\n getFieldOptions(): FieldOption[] {\n return this.fieldOptions.map(option => {\n const optionCopy: FieldOption = { ...option };\n return optionCopy;\n });\n }\n\n\n setFieldOptions(newOptions) {\n if ((!this._formConfig.captureTypesWithOptions.includes(this.captureType))\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._value) {\n if (this.fieldType === this._formConfig.fieldTypes.array && Array.isArray(this._value)) {\n const fieldValue = this._value?.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._value);\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 }\n }\n\n setValue(newValue, widgetUpdate = true) {\n if (typeof newValue === UNDEFINED || newValue === null) {\n return true;\n }\n let newFinalValue;\n if (this.fieldType === this._formConfig.fieldTypes.boolean\n || this.fieldType === this._formConfig.fieldTypes.check) {\n newFinalValue = yn(newValue);\n } else if (this.fieldType === this._formConfig.fieldTypes.array\n || this.fieldType === this._formConfig.fieldTypes.map) {\n if (newValue === null || newValue === '') {\n newFinalValue = [];\n } else if (Array.isArray(newValue)) {\n newFinalValue = newValue;\n } else {\n newFinalValue = newValue.toString().split(',');\n }\n } else {\n newFinalValue = newValue;\n }\n if (this._value !== newFinalValue) {\n this.setChanged(true);\n if (widgetUpdate) {\n this.setAttr(fldAttr.value, newFinalValue);\n } else {\n this._value = newFinalValue;\n }\n }\n return true;\n }\n}\n","export interface FilterDef {\n operators: string[];\n options: any[];\n}\n\nexport interface FilterSetup {\n fieldCode: string;\n operator: string;\n values: any[];\n}\nexport 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 sortDirections: string[];\n customAttributes: any;\n // Filtros\n filterVisible: boolean = false;\n filterDef: FilterDef;\n filterSetup: FilterSetup;\n\n constructor(recTableColReceived, formConfig) {\n this._formConfig = formConfig;\n this.filterDef = null;\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.sortDirections = (this.sortable) ? ['ascend', 'descend'] : [null];\n this.fieldFormat = recTableColReceived.format || '';\n this.customAttributes = recTableColReceived?.customAttributes ?? {};\n }\n }\n\n hideFilter() {\n this.filterVisible = false;\n }\n\n addFilterDefinition(filterDefinition) {\n this.filterDef = {\n operators: filterDefinition.operators,\n options: filterDefinition.options ?? null,\n };\n }\n\n get filterDefinition() {\n return this.filterDef;\n }\n\n addFilter(columnValues, operator) {\n this.filterSetup = {\n fieldCode: this.fieldCode,\n operator: operator ?? this.filterDef.operators[0],\n values: columnValues,\n }\n }\n\n get filter() {\n return this.filterSetup;\n }\n\n removeFilter() {\n this.filterSetup = null;\n }\n\n get options() {\n if (this.filterDef?.operators?.length === 1 && this.filterDef?.operators[0] === 'IN') {\n return this.filterDef?.options;\n }\n return null;\n }\n\n serSortDirections(ascend: boolean, descend: boolean) {\n this.sortDirections = [];\n if (ascend) {\n this.sortDirections.unshift('ascend');\n }\n if (descend) {\n this.sortDirections.unshift('descend');\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","import { RecordTableColumn } from './column';\nimport { operators } from '../form.constants';\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 this.recordData[fieldCode] = fieldValue ?? '';\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 this.recordData[fieldCode] = fieldValue ?? '';\n });\n }\n }\n\n toggleSelect() { this.selected = !this.selected; }\n select() { this.selected = true; }\n unselect() { this.selected = false; }\n\n get recordIdKey() {\n return (typeof this.recordId === 'object')\n ? JSON.stringify(this.recordId) : this.recordId;\n }\n\n getFieldValue(fieldCode): any {\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(columnFilters) {\n if (!columnFilters || columnFilters.length === 0) {\n return true;\n }\n for (const condition of columnFilters) {\n const { fieldCode, operator, values } = condition;\n if (this.recordData.hasOwnProperty(fieldCode)) {\n const fieldValue = this.recordData[fieldCode];\n const stringValue = fieldValue.toString().toUpperCase();\n if (operator === operators.G && fieldValue <= values[0]) {\n return false;\n }\n if (operator === operators.L && fieldValue >= values[0]) {\n return false;\n }\n if (operator === operators.GE && fieldValue < values[0]) {\n return false;\n }\n if (operator === operators.LE && fieldValue > values[0]) {\n return false;\n }\n if (operator === operators.IN && !values.includes(fieldValue)) {\n return false;\n }\n if (operator === operators.EQ) {\n return fieldValue === values[0];\n }\n if (operator === operators.NEQ && fieldValue === values[0]) {\n return false;\n }\n if (operator === operators.HAS && !stringValue.includes(values[0].toString().toUpperCase())) {\n return false;\n }\n if (operator === operators.NOTHAS && stringValue.includes(values[0].toString().toUpperCase())) {\n return false;\n }\n if (operator === operators.BETWEEN && (fieldValue < values[0] || fieldValue > values[1])) {\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 { 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 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 private _tableColumnObj = {};\n private _appendPages: boolean;\n private _actions: TableAction[];\n private _actionsObj = {};\n\n // Mecanismos de filtrado nueva versión\n private globalFilterStrings: string[] = [];\n private selectedRecords: any;\n private globalSearch: boolean;\n private restrictedId: any;\n private layout: string;\n\n tableRecords: TableRecordData[];\n tableRecordObj = {};\n visibleRecords: TableRecordData[];\n columns: RecordTableColumn[];\n selectable: boolean;\n selectionBackend: boolean;\n selectionField: string;\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 sortable: boolean;\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 this.columns = [];\n this._tableColumnObj = {};\n this._actions = [];\n this._actionsObj = {};\n this.tableRecords = [];\n this.globalSearch = false;\n this.restrictedId = null;\n\n this.tableTitle = tableReceived.tableTitle;\n this._appendPages = tableReceived?.append ?? false;\n this.selectable = tableReceived?.selectable ?? false;\n this.selectionBackend = tableReceived?.selectionBackend ?? false;\n this.sortable = tableReceived?.sortable ?? false;\n\n this.setAttr('allSelected', false);\n this.setAttr('tableCode', tableReceived.tableCode);\n this.setAttr('clientPaging', tableReceived?.clientPaging ?? true);\n this.setAttr('globalSearch', tableReceived?.simpleFilter ?? false);\n this.setAttr('sorting', { columnName: '', direction: '' });\n this.setAttr('recordsPerPage', formConfig.defaultRecordsPerPage);\n this.setAttr('layout', '');\n\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 this.selectionField = (this.selectable) ? tableReceived?.selectionField : null;\n // Filtros predefinidos en el formulario\n if (tableReceived.filters) {\n for (let index = 0; index < tableReceived.filters.length; index++) {\n this.addFilterDefinition(tableReceived.filters[index].fieldCode, tableReceived.filters[index]);\n }\n }\n }\n\n get columnNames() { return Object.keys(this._tableColumnObj); }\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 getLayout() { return this.layout; }\n setLayout(layout) { this.setAttr('layout', layout); }\n hasActions() { return (this._actions.length > 0); }\n getSelectedRecords() { return this.tableRecords.filter(rec => rec.selected).map(rec => rec.recordId); }\n activateGlobalSearch() { this.globalSearch = true; }\n inactivateGlobalSearch() { this.globalSearch = false; }\n columnDefinition(fieldCode) { return this._tableColumnObj[fieldCode]; }\n putOnWait() { this.waiting = true; }\n freeWaiting() { this.waiting = false; }\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 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 return null;\n }\n\n clean() {\n this.tableRecords = [];\n this.unSelectAll();\n this.tableRecordObj = {};\n this.updateVisibleRecords();\n }\n\n selectAll() {\n this.setAttr('allSelected', true);\n this.tableRecords.forEach(record => record.select());\n this.setAttr('selectedRecords', this.getSelectedRecords());\n return true;\n\n }\n\n unSelectAll() {\n this.setAttr('allSelected', false);\n this.tableRecords.forEach(record => record.unselect());\n this.setAttr('selectedRecords', this.getSelectedRecords());\n return true;\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, this.selectionField);\n const recordIdKey = recordReceived.recordIdKey;\n newRecords.push(recordReceived);\n newRecordsObj[recordIdKey] = recordReceived;\n }\n this.tableRecords = newRecords;\n this.setAttr('selectedRecords', this.getSelectedRecords());\n this.tableRecordObj = newRecordsObj;\n this.updateVisibleRecords();\n }\n\n appendRecords(records) { this.setTableRecords(records, true); }\n replaceRecords(records) { this.setTableRecords(records, false); }\n\n changePage(requestedPage) {\n if (this.clientPaging) {\n this.setAttr('currentPage', requestedPage);\n this.updateVisibleRecords();\n } else {\n this.notifyGetDataAction(requestedPage);\n }\n }\n\n updateVisibleRecords() {\n // updateView const changeViewAttributes = ['currentPage', 'recordsPerPage', 'sorting'];\n let visibleRecords: any[];\n if (this.clientPaging) {\n let filteredRecords = this.getFilteredRecords();\n this.setAttr('totalRecordsNumber', filteredRecords.length);\n visibleRecords = filteredRecords.slice((this.currentPage - 1) * this.recordsPerPage,\n (this.currentPage - 1) * this.recordsPerPage + this.recordsPerPage);\n } else {\n visibleRecords = this.tableRecords;\n }\n this.setAttr('visibleRecords', visibleRecords);\n }\n\n updateFromServer(tableReceived) {\n this.requestedPage = 1;\n this.clean();\n this.visible = tableReceived?.visible || true;\n this.totalPages = tableReceived.totalPages || 1;\n this.recordsNumber = tableReceived.recordsNumber;\n this.setAttr('currentPage', +tableReceived?.currentPage ?? 1);\n this.setAttr('recordsPerPage', +tableReceived.recordsPerPage);\n this.setAttr('totalRecordsNumber', (this.clientPaging) ? tableReceived.tableRecords.length : +tableReceived.totalRecordsNumber);\n this.setAttr('sorting', {\n columnName: tableReceived.sortingColumn || '',\n direction: tableReceived.sortingDirection || ''\n });\n this.waiting = false;\n if (this._appendPages) {\n this.replaceRecords(tableReceived.tableRecords);\n } else {\n this.appendRecords(tableReceived.tableRecords);\n }\n this.updateVisibleRecords();\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 setFilterById(id) {\n if (this.restrictedId === id) { return; }\n this.restrictedId = id;\n this.updateVisibleRecords();\n }\n\n cleanIdFilter() {\n if (this.restrictedId === null) { return; }\n this.restrictedId = null;\n this.updateVisibleRecords();\n }\n\n setGlobalFilterString(text) {\n this.globalFilterStrings = text.split(' ').filter(t => t && t.trim().length > 0).map(t => t.trim()) ?? [];\n if (this.clientPaging) {\n this.changePage(1);\n }\n }\n\n addFilterDefinition(columnName, filterDefinition) {\n const tableColumn = this.columnDefinition(columnName);\n tableColumn && tableColumn.addFilterDefinition(filterDefinition);\n }\n\n getFilteredRecords() {\n let filteredRecords = this.tableRecords;\n if (this.restrictedId) {\n filteredRecords = filteredRecords.filter(record => record.recordId === this.restrictedId);\n }\n if (this.globalFilterStrings.length > 0) {\n filteredRecords = filteredRecords.filter(record => record.hasPattern(this.globalFilterStrings));\n }\n const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);\n if (columnFilters.length > 0) {\n filteredRecords = filteredRecords.filter(record => record.hasCondition(columnFilters));\n }\n return filteredRecords;\n }\n\n getColumnFilter(columnName: string) {\n const tableColumn = this.columnDefinition(columnName);\n return tableColumn?.filter ?? null;\n }\n\n addColumnFilter(columnName: string, columnValues: any | any[], operator: string = null) {\n const tableColumn = this.columnDefinition(columnName);\n const columnFilterDefinition = tableColumn?.filterDefinition ?? null;\n if (!columnFilterDefinition) {\n return null;\n }\n tableColumn && tableColumn.addFilter(columnValues, operator);\n this.updateVisibleRecords();\n }\n\n removeColumnFilter(columnName: string) {\n const tableColumn = this.columnDefinition(columnName);\n tableColumn && tableColumn.removeFilter();\n this.updateVisibleRecords();\n }\n\n get currentFilter() {\n const compactFilter: any = {\n simpleFilterWords: this.globalFilterStrings,\n advancedFilter: [],\n };\n const columnFilters = this.columns.filter(column => column.filter).map(column => column.filter);\n for (let index = 0; index < columnFilters.length; index++) {\n const columnFilter = columnFilters[index];\n compactFilter.advancedFilter.push({\n fieldCode: columnFilter.fieldCode,\n operator: columnFilter.operator,\n fieldValue1: columnFilter.values[0],\n fieldValue2: columnFilter.values[1],\n });\n }\n return compactFilter;\n }\n\n // Ordenamiento de registros local\n\n sort(columnName, direction) {\n this.setRequiredOrder(columnName, direction);\n if (this.clientPaging) {\n this.localSortData()\n } else {\n this.notifyGetDataAction();\n }\n }\n\n setRequiredOrder(columnField, direction = null) {\n this.setAttr('sorting', {\n columnName: columnField,\n direction: (direction === 'ascend') ? TABLE_SORT_ASCENDING : TABLE_SORT_DESCENDING,\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.unSelectAll();\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 { FormAction } from './action';\nimport { 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.getField(code);\n arrayToAdd = this.subSectionFields;\n break;\n case elementTypes.table:\n elementObject = formObject.getTable(code);\n arrayToAdd = this.subSectionTables;\n break;\n case elementTypes.action:\n elementObject = formObject.getAction(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 getActions(): FormAction[] {\n return this.subSectionActions;\n }\n\n getActionNames(): string[] {\n return this.subSectionActions.map(action => action.actionCode);\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 { FormAction } from './action';\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 customAttributes: any;\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 this.customAttributes = sectionReceived?.customAttributes ?? null;\n }\n\n getCustomAttribute(name) { return this.customAttributes?.[name] ?? null; }\n setCustomAttribute(name, value) { return name && (this.customAttributes[name] = value); }\n matchAttribute(name, value) { return this.customAttributes?.[name] === value; }\n\n get code() { return this.sectionCode; }\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 getActions(): FormAction[] {\n let actionArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n actionArray = actionArray.concat(subSection.getActions());\n }\n }\n return actionArray;\n }\n\n getActionNames(): string[] {\n let actionArray = [];\n if (this.subSections && this.subSections.length > 0) {\n for (const subSection of this.subSections) {\n actionArray = actionArray.concat(subSection.getActionNames());\n }\n }\n return actionArray;\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 { FormAction } from './action';\nimport { FieldDescriptor, FieldOption } from './field';\nimport { RecordTable } from './table/table';\nimport { RecordFormSection } from './section';\nimport { RecordFormSubSection } from './subsection';\nimport { NO_ERROR, HEADER } from './form.constants';\nimport { TableRecordData } from './table/row-data';\n\nconst ACTIVE = 'active';\nconst SHOW = 'show';\nconst HIDE = 'hide';\nconst ENABLE = 'enable';\nconst DISABLE = 'disable';\nconst CLEAN = 'clean';\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 interface FieldPayload {\n fieldCode: string;\n fieldValue: any;\n editable: boolean;\n visible: boolean;\n required: boolean;\n fieldOptions: string,\n}\n\nexport interface TablePayload {\n tableCode: string;\n visible: boolean;\n currentPage: number;\n requestedPage: number;\n recordsPerPage: number;\n currentFilter: any,\n sortingColumn: string;\n sortingDirection: string;\n}\n\ninterface FormPayload {\n fields: FieldPayload[],\n tables: TablePayload[],\n}\n\nexport class FormStructureAndData {\n state: string;\n _name: string;\n _formConfig: any;\n private _title: string;\n private _stateFlow: StateFlow;\n private _fieldArray: FieldDescriptor[];\n private _fields = {};\n private _actionArray: FormAction[];\n private _actions = {};\n private _tableArray: RecordTable[];\n private _tables = {};\n private _sectionArray: RecordFormSection[];\n private _sections = {};\n private _immutableData = {};\n private _extraInfo = {};\n private _exclusiveSectionsByAttr = {};\n\n constructor(definitionReceived, formConfig) {\n this._formConfig = formConfig;\n this.state = '';\n this._actionArray = [];\n this._fieldArray = [];\n this._tableArray = [];\n this._sectionArray = [];\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._actionArray.push(globalAction);\n this._actions[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._fieldArray.push(fieldToAdd);\n this._fields[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._tableArray.push(tableToAdd);\n this._tables[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._sectionArray.push(sectionToAdd);\n this._sections[sectionCode] = sectionToAdd;\n }\n }\n }\n }\n\n getTitle(): string { return this._title; }\n setTitle(title: string): void { this._title = title; }\n get name(): string { return this._name; }\n set name(name) { this._name = name; }\n\n // Estados\n get defaultState(): string { return this._stateFlow.defaultState; }\n supportState(state: string): boolean { return this._stateFlow.states?.includes(state); }\n supportMode(state: string): boolean { return this.supportState(state); }\n get states(): any[] { return this._stateFlow.states; }\n\n getCurrentState(): string { return this.state; }\n\n changeState(newState: string): boolean {\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?: string): void {\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 // immutable Data\n getImmutableElement(name: string): any { return this._immutableData?.[name]?.value ?? null; }\n set immutableData(immutableData) { Object.assign(this._immutableData, immutableData); }\n get immutableData(): any { return JSON.parse(JSON.stringify(this._immutableData)); }\n\n // extra Info\n getExtraInfo(name: string): any { return this._extraInfo?.[name]?.value ?? null; }\n set extraInfo(extraInfo) { Object.assign(this._extraInfo, extraInfo); }\n get extraInfo(): any { return JSON.parse(JSON.stringify(this._extraInfo)); }\n\n // Fields\n get fields(): any { return this._fields; }\n get fieldNames(): string[] { return this.getFieldNames(); }\n getFields(): FieldDescriptor[] { return this._fieldArray; }\n getFieldNames(): string[] { return this._fieldArray.map(field => field.fieldCode); }\n getField(code: string): FieldDescriptor { return (code && this._fields?.[code]) ? this._fields[code] : null; }\n enableField(code: string): void { this.getField(code)?.enable(); }\n disableField(code: string): void { this.getField(code)?.disable(); }\n getFieldValue(code: string): any { return this.getField(code)?.getValue(); }\n getFieldOptionText(code: string): any { return this.getField(code)?.getOptionText(); }\n getFieldOptions(code: string): FieldOption[] { return this.getField(code)?.getFieldOptions() ?? null; }\n setFieldValue(code: string, value: any): any { this.getField(code)?.setValue(value); }\n setFieldError(code: string, errorCode: string, message: string, type: string = 'error'): any { this.getField(code)?.setError(errorCode, message, type); }\n setFieldIntrinsicErrorMessage(code: string, message: string): any { this.getField(code)?.setIntrinsicErrorMessage(message); }\n setFieldRequired(code: string, required: boolean): any { this.getField(code)?.setRequired(required); }\n setFieldErrorMessage(code: string, message: string): any { this.getField(code)?.setErrorMessage(message); }\n\n setFieldOptions(code: string, optionsArray: any[], idAttribute: string, nameAttribute: string): any {\n const field = this.getField(code);\n if (field && optionsArray?.length > 0) {\n const fieldOptions = optionsArray.map(item => ({\n fieldOptionId: item[idAttribute],\n fieldOptionValue: item[nameAttribute]\n }));\n field.setFieldOptions(fieldOptions);\n }\n }\n\n getFieldSet(filter, inputCodes: string[] | string, secCode?: string, subCode?: string): string[] {\n let codes = null;\n if (typeof inputCodes === 'string' && inputCodes) {\n codes = [inputCodes];\n } else if (Array.isArray(inputCodes) && inputCodes.length > 0) {\n codes = inputCodes;\n } else if (secCode && !subCode) {\n codes = this.getSection(secCode)?.getFieldNames() ?? [];\n } else if (secCode && subCode) {\n codes = this.getSubSection(secCode, subCode)?.getFieldNames() ?? [];\n } else {\n codes = this.getFieldNames();\n }\n return (filter) ? codes.filter(fld => filter(this.getField(fld))) : codes;\n }\n\n applyOnFields(processFunc, inputCodes?: string[] | string, secCode?: string, subCode?: string): number {\n if (!processFunc) { return 0; }\n const codes = this.getFieldSet(null, inputCodes, secCode, subCode);\n let processedFields = 0;\n for (const code of codes) {\n const field = this.getField(code);\n if (field) {\n try {\n processFunc(field);\n processedFields += 1;\n } catch (e) {\n console.log(`Error procesando funcion en campo ${field}: ${e}`);\n }\n }\n }\n return processedFields;\n }\n\n enableFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.enable(), codes, secCode, subCode);\n }\n\n showFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.show(), codes, secCode, subCode);\n }\n\n hideFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.hide(), codes, secCode, subCode);\n }\n\n showLabelFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.showLablel(), codes, secCode, subCode);\n }\n\n hideLabelFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.hideLabel(), codes, secCode, subCode);\n }\n\n disableFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.disable(), codes, secCode, subCode);\n }\n\n cleanFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.clean(), codes, secCode, subCode);\n }\n\n tagFieldsWithError(message: string, codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.applyOnFields(fld => fld.setErrorMessage(message), codes, secCode, subCode);\n }\n\n cleanErrorFields(codes?: string[] | string, secCode?: string, subCode?: string): number {\n return this.tagFieldsWithError('', codes, secCode, subCode);\n }\n\n tagEmptyRequiredFields(message: string, codes = null, secCode?: string, subCode?: string): boolean {\n return this.tagFieldsWithError(message, this.getRequiredEmptyFields(codes, secCode, subCode)) > 0;\n }\n\n getRequiredFields(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => fld.required, codes, secCode, subCode);\n }\n\n getRequiredEmptyFields(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => fld.required && fld.empty, codes, secCode, subCode);\n }\n\n getChangedFields(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => !fld.outputOnly && fld.hasChanged(), codes, secCode, subCode);\n }\n\n getFieldsWithValidationIssues(codes?: string[] | string, secCode?: string, subCode?: string): string[] {\n return this.getFieldSet(fld => fld.errorCode !== NO_ERROR, codes, secCode, subCode);\n }\n\n getFieldsValues(inputCodes?: string[] | string, secCode?: string, subCode?: string): any {\n const codes = this.getFieldSet(null, inputCodes, secCode, subCode);\n const resultObject = {};\n for (let index = 0; index < codes.length; index++) {\n const code = codes[index];\n if (code) {\n resultObject[code] = this._fields?.[code]?.getValue() ?? null;\n }\n }\n return resultObject;\n }\n\n // Acciones\n get actions() { return this._actions; }\n\n getActionsByAttribute(name: string, value): FormAction[] { return this._actionArray.filter(actionItem => actionItem.matchAttribute(name, value)); }\n getActions(): FormAction[] { return this._actionArray; }\n getAction(code: string): FormAction { return (code && this._actions?.[code]) ? this._actions[code] : null; }\n showActions(codes: string[] | string): void { return this.execOnActions(codes, SHOW); }\n hideActions(codes: string[] | string): void { return this.execOnActions(codes, HIDE); }\n enableActions(codes: string[] | string): void { return this.execOnActions(codes, ENABLE); }\n disableActions(codes: string[] | string): void { return this.execOnActions(codes, DISABLE); }\n\n execOnActions(codes: string[] | string, functionName: string): void {\n const actionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\n if (!functionName || actionCodes.length === 0) { return; }\n actionCodes.forEach(code => {\n const action = this.getAction(code);\n action?.[functionName]?.();\n });\n }\n\n // Tablas\n get tables(): any { return this.tables; }\n getTables(): RecordTable[] { return this._tableArray; }\n getTable(code: string): RecordTable { return (code && this._tables?.[code]) ? this._tables[code] : null; }\n getTableRecord(code: string, id: string): TableRecordData { return this.getTable(code)?.getTableRecord(id) }\n\n enableTables(codes: string[] | string): void { return this.execOnTables(codes, ENABLE); }\n disableTables(codes: string[] | string): void { return this.execOnTables(codes, DISABLE); }\n showTables(codes: string[] | string): void { return this.execOnTables(codes, SHOW); }\n hideTables(codes: string[] | string): void { return this.execOnTables(codes, HIDE); }\n cleanTables(codes: string[] | string): void { return this.execOnTables(codes, CLEAN); }\n\n execOnTables(codes: string[] | string, functionName: string) {\n const tableCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\n if (!functionName || tableCodes.length === 0) { return; }\n tableCodes.forEach(code => {\n const table = this.getTable(code);\n table?.[functionName]?.();\n });\n }\n\n // Secciones\n get sections(): any { return this._sections; }\n getSections(): RecordFormSection[] { return this._sectionArray; }\n getSectionsByAttribute(name, value): RecordFormSection[] { return this._sectionArray.filter(item => item.matchAttribute(name, value)); }\n get sectionTitles(): string[] { return this._sectionArray.map(formSection => formSection.sectionTitle); }\n get visibleSections(): RecordFormSection[] { return this._sectionArray.filter(sec => sec.visible); }\n getSection(code: string): RecordFormSection { return (code && this._sections?.[code]) ? this._sections[code] : null; }\n showSections(codes: string[] | string): void { this.execOnSections(codes, SHOW); }\n hideSections(codes: string[] | string): void { this.execOnSections(codes, HIDE); }\n activeSection(): string { return this._exclusiveSectionsByAttr[ACTIVE]; }\n getSubSection(code: string, subCode): RecordFormSubSection { return this.getSection(code)?.getSubsection(subCode) ?? null; }\n showSubSections(code: string, subCodes: string[] | string): void { return this.execOnSubSections(code, subCodes, SHOW); }\n hideSubSections(code: string, subCodes: string[] | string): void { return this.execOnSubSections(code, subCodes, HIDE); }\n getSectionActions(code): FormAction[] { return this.getSection(code)?.getActions() ?? null; }\n getSectionActionNames(code): string[] { return this.getSection(code)?.getActionNames() ?? null; }\n\n activateSection(code: string): void {\n if (code === this._exclusiveSectionsByAttr[ACTIVE]) { return; }\n this.getSection(this.activeSection())?.inactivate();\n this.getSection(code)?.activate();\n this._exclusiveSectionsByAttr[ACTIVE] = code;\n }\n\n execOnSections(codes: string[] | string, functionName: string): void {\n const sectionCodes = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\n if (!functionName || sectionCodes.length === 0) { return; }\n sectionCodes.forEach(code => {\n const section = this.getSection(code);\n section?.[functionName]?.();\n });\n }\n\n execOnSubSections(code: string, subNames: string[] | string, functionName: string): void {\n const subCodes = (Array.isArray(subNames)) ? subNames : (subNames ? [subNames] : []);\n const section = this.getSection(code);\n if (!functionName || !section || subCodes.length === 0) { return; }\n for (const subCode of subCodes) {\n const subSection = this.getSubSection(code, subCode);\n subSection?.[functionName]?.();\n }\n }\n\n /**\n * Métodos propios de gestión del formulario\n */\n\n cleanData(): void {\n for (const field of this._fieldArray) {\n field.setValue(field.defaultValue);\n }\n for (const table of this._tableArray) {\n table.clean();\n }\n }\n\n getPayload(): any {\n const formData: FormPayload = {\n fields: [],\n tables: [],\n };\n formData.fields = this.getFields().filter(fld => !fld.outputOnly)\n .map(fld => {\n const fieldPayload: FieldPayload = {\n fieldCode: fld.fieldCode,\n fieldValue: fld.getValue(),\n editable: !fld.disabled,\n visible: fld.visible,\n required: fld.required,\n fieldOptions: '',\n }\n return fieldPayload;\n });\n\n formData.tables = this.getTables().map(tbl => {\n const tablePayload: TablePayload = {\n tableCode: tbl.tableCode,\n visible: tbl.visible,\n currentPage: tbl.currentPage,\n requestedPage: tbl.requestedPage,\n recordsPerPage: tbl.recordsPerPage,\n currentFilter: tbl.currentFilter,\n sortingColumn: tbl.sorting.columnName,\n sortingDirection: tbl.sorting.direction,\n };\n return tablePayload\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 updatedForm.fields = storedForm?.fields ?? {};\n updatedForm.extra = storedForm?.extra ?? {};\n if (formInfo.fields) {\n Object.assign(updatedForm.fields, formInfo.fields);\n }\n if (formInfo.extra) {\n Object.assign(updatedForm.extra, formInfo.extra);\n }\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, HEADER } from '../../classes/forms/form.constants';\nimport { FormAction } from '../../classes/forms/action';\nimport { FieldDescriptor, FieldOption } from '../../classes/forms/field';\nimport { RecordTable } from '../../classes/forms/table/table';\nimport { RecordFormSection } from '../../classes/forms/section';\nimport { RecordFormSubSection } from '../../classes/forms/subsection';\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 private _formStructure: FormStructureAndData = null;\n private _controlToken: string = null;\n private _originToken: string;\n private _formRoute: string;\n private _definitionObtained: boolean = false;\n // Eventos de acciones y campos\n private _formSectionsActivate: any = {};\n private _formSectionsInactivate: any = {};\n private _formActionsStart: any = {};\n private _formActionsFinish: any = {};\n private _fieldInputValidation: any = {};\n private _fieldValidationsStart: any = {};\n private _fieldValidationsFinish: any = {};\n // Callback de acciones de tablas\n private _tableSelectionsStart: any = {};\n private _tableSelectionsFinish: any = {};\n private _tableActionsStart: any = {};\n private _tableActionsFinish: any = {};\n private _tableGetDataStart: any = {};\n private _tableGetDataFinish: any = {};\n\n protected inputDataFields: any = {};\n protected extraData: any = {};\n protected _eventEmiter: LibEventManagerService;\n\n\n formConfig: any;\n name: string;\n formSubject: string;\n _errorType: string = '';\n errorCode: string = '';\n errorMessage: string = '';\n errorDetail: string = '';\n visible: boolean = false;\n\n fields: any;\n actions: any;\n sections: any;\n busy: boolean = false;\n\n getTitle() { return this._formStructure?.getTitle(); }\n setTitle(title: string) { return this._formStructure?.setTitle(title); }\n cleanData() { return this._formStructure?.cleanData(); }\n getCurrentState() { return this._formStructure?.getCurrentState(); }\n supportState(state: string) { return this._formStructure?.supportState(state); }\n changeState(state) { return this._formStructure?.changeState(state); }\n getStates() { return this._formStructure?.states; }\n getImmutableElement(name: string) { return this._formStructure?.getImmutableElement(name); }\n getExtraInfo(name: string) { return this._formStructure?.getExtraInfo(name); }\n getFields() { return this._formStructure?.getFields(); }\n getFieldNames() { return this._formStructure?.getFieldNames(); }\n getField(code: string) { return this._formStructure?.getField(code); }\n enableField(code: string) { return this._formStructure?.enableField(code); }\n disableField(code: string) { return this._formStructure?.disableField(code); }\n getFieldValue(code: string): any { return this._formStructure?.getFieldValue(code); }\n getFieldOptionText(code: string): any { return this._formStructure?.getFieldOptionText(code); }\n getFieldsValues(codes: string[]) { return this._formStructure?.getFieldsValues(codes); }\n getFieldOptions(code: string): FieldOption[] { return this._formStructure?.getFieldOptions(code); }\n setFieldValue(code: string, value: any) { return this._formStructure?.setFieldValue(code, value); }\n setFieldRequired(code: string, required: boolean) { return this._formStructure?.setFieldRequired(code, required); }\n setFieldErrorMessage(code: string, errorMessage: string) { return this._formStructure?.setFieldErrorMessage(code, errorMessage); }\n setFieldError(code: string, errorCode: string, message: string, type?: string) { return this._formStructure?.setFieldError(code, errorCode, message, type); }\n setFieldIntrinsicErrorMessage(code: string, message: string) {\n return this._formStructure?.setFieldIntrinsicErrorMessage(code, message);\n }\n setFieldOptions(code, optionsArray, idAttribute, nameAttribute) {\n return this._formStructure?.setFieldOptions(code, optionsArray, idAttribute, nameAttribute);\n }\n getFieldSet(filterFunc?, codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getFieldSet(filterFunc, codes, secCode, subCode);\n }\n applyOnFields(processFunc, codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.applyOnFields(processFunc, codes, secCode, subCode);\n }\n applyProcessToAllFields(processFunc) {\n return this._formStructure?.applyOnFields(processFunc);\n }\n cleanFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.cleanFields(codes, secCode, subCode);\n }\n getRequiredFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getRequiredFields(codes, secCode, subCode);\n }\n getRequiredEmptyFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getRequiredEmptyFields(codes, secCode, subCode);\n }\n getChangedFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getChangedFields(codes, secCode, subCode);\n }\n getFieldsWithValidationIssues(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.getFieldsWithValidationIssues(codes, secCode, subCode);\n }\n tagFieldsWithError(errorMessage, codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.tagFieldsWithError(errorMessage, codes, secCode, subCode);\n }\n cleanErrorFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.cleanErrorFields(codes, secCode, subCode);\n }\n showLabelFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.showLabelFields(codes, secCode, subCode);\n }\n hideLabelFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.hideLabelFields(codes, secCode, subCode);\n }\n enableFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.enableFields(codes, secCode, subCode);\n }\n disableFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.disableFields(codes, secCode, subCode);\n }\n /**\n * @deprecated Use enableFields\n */\n enableEditFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this.enableFields(codes, secCode, subCode);\n }\n /**\n * @deprecated Use disableFields\n */\n disableEditFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this.disableFields(codes, secCode, subCode);\n }\n showFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.showFields(codes, secCode, subCode);\n }\n hideFields(codes?: string[] | string, secCode?: string, subCode?: string) {\n return this._formStructure?.hideFields(codes, secCode, subCode);\n }\n getActionsByAttribute(name: string, value) {\n return this._formStructure?.getActionsByAttribute(name, value);\n }\n getHeaderActions() {\n return this._formStructure?.getActionsByAttribute('location', HEADER);\n }\n getAction(actionCode: string): FormAction {\n return this._formStructure?.getAction(actionCode);\n }\n showActions(actionArray): void {\n return this._formStructure?.showActions(actionArray);\n }\n hideActions(actionArray): void {\n return this._formStructure?.hideActions(actionArray);\n }\n enableActions(actionArray): void {\n return this._formStructure?.enableActions(actionArray);\n }\n disableActions(actionArray): void {\n return this._formStructure?.disableActions(actionArray);\n }\n showAction(code: string): void {\n return this._formStructure?.showActions(code);\n }\n hideAction(code: string): void {\n return this._formStructure?.hideActions(code);\n }\n enableAction(code: string): void {\n return this._formStructure?.enableActions(code);\n }\n disableAction(code: string): void {\n return this._formStructure?.disableActions(code);\n }\n getSections(): RecordFormSection[] {\n return this._formStructure?.getSections();\n }\n activateSection(code): void {\n return this._formStructure?.activateSection(code);\n }\n getSectionsTitles(): string[] {\n return this._formStructure?.getSections().map(sec => sec.title);\n }\n getSection(code: string): RecordFormSection {\n return this._formStructure?.getSection(code);\n }\n showSection(code: string): void {\n return this._formStructure?.showSections(code);\n }\n hideSection(code: string): void {\n return this._formStructure?.hideSections(code);\n }\n showSections(codes: string[] | string): void {\n return this._formStructure?.showSections(codes);\n }\n hideSections(codes: string[] | string): void {\n return this._formStructure?.hideSections(codes);\n }\n getSubSection(code: string, subCode: string): RecordFormSubSection {\n return this._formStructure?.getSubSection(code, subCode);\n }\n showSubSection(code: string, subCode: string): void {\n return this._formStructure?.showSubSections(code, subCode);\n }\n hideSubSection(code: string, subCode: string): void {\n return this._formStructure?.hideSubSections(code, subCode);\n }\n showSubSections(code: string, subCodes: string[] | string): void {\n return this._formStructure?.showSubSections(code, subCodes);\n }\n hideSubSections(code: string, subCodes: string[] | string): void {\n return this._formStructure?.hideSubSections(code, subCodes);\n }\n getSectionActions(code: string): FormAction[] {\n return this._formStructure?.getSectionActions(code);\n }\n getSectionActionNames(code: string): string[] {\n return this._formStructure?.getSectionActionNames(code);\n }\n\n getTables() {\n return this._formStructure?.getTables();\n }\n showTables(codes: string[] | string) {\n return this._formStructure?.showTables(codes);\n }\n hideTables(codes: string[] | string) {\n return this._formStructure?.hideTables(codes);\n }\n cleanTables(codes: string[] | string) {\n return this._formStructure?.cleanTables(codes);\n }\n getTable(code: string) {\n return this._formStructure?.getTable(code);\n }\n showTable(code: string) {\n return this._formStructure?.showTables(code);\n }\n hideTable(code: string) {\n return this._formStructure?.hideTables(code);\n }\n cleanTable(code: string) {\n return this._formStructure?.getTable(code)?.clean();\n }\n getTableRecord(code: string, recordId: any) {\n return this._formStructure?.getTableRecord(code, recordId);\n }\n\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 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.sections = null;\n this._controlToken = null;\n this.inputDataFields = {};\n this._definitionObtained = false;\n // Se limpian los manejadores de eventos\n this.visible = 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 formVisible(): boolean { return this.visible; }\n get formManager() { return this; }\n get formCode(): string { return this.name; }\n set formCode(name: string) { this.name = name; }\n get inServerProcess() { return this.busy; }\n get form(): FormStructureAndData { return this._formStructure; }\n\n get state(): string { return this._formStructure?.state; }\n get currentState(): string { return this._formStructure?.state; }\n set currentState(state: string) { this._formStructure.changeState(state); }\n get immutableData(): any { return this._formStructure?.immutableData }\n get extraInfo(): any { return this._formStructure?.extraInfo }\n get visibleSections(): RecordFormSection[] { return this._formStructure?.visibleSections; }\n\n get formRoute(): string { return this._formRoute; }\n set formRoute(route: string) { this._formRoute = route; }\n\n get subject(): string { return this.formSubject; }\n\n // Métodos virtuales\n customPreProcessing() { }\n customFormStart() { }\n displayActionServerError() { }\n displayValidationServerError() { }\n displayTableServerError() { }\n showFieldInfo(fieldCode?: string, detail?: any) { }\n showModalDialog(title, body, options, callback?, params?) { }\n openUploadDialog(title, body, options, callback?, params?) { }\n\n /**\n * @deprecated Use supportState\n */\n supportMode(state: string): boolean { return this.supportState(state); }\n\n /**\n * @deprecated Use getField\n */\n getFieldObject(code: string): FieldDescriptor { return this.getField(code); }\n\n /**\n * @deprecated Use getAction\n */\n getActionObject(code: string): FormAction { return this.getAction(code); }\n\n /**\n * @deprecated Use getTable\n */\n getTableObject(code: string): RecordTable { return this.getTable(code); }\n\n /**\n * @deprecated Use getSection\n */\n getSectionObject(code: string): RecordFormSection { return this.getSection(code); }\n\n /**\n * @deprecated Use changeState\n */\n changeFormMode(state: string): boolean { return this.changeState(state); }\n\n /**\n * @deprecated Use subject\n */\n getFormSubject(): string { return this.subject; }\n /**\n * @deprecated Use subject\n */\n getSubject(): string { return this.formSubject; }\n /**\n * @deprecated Use subject\n */\n getformSubject(): string { return this.getSubject(); }\n\n\n numSections(): number { return this._formStructure?.sections.length; }\n\n subscribeAppEvent(eventName: string, callback): void {\n this._eventEmiter.subscribe(eventName, callback);\n }\n\n openForm(name: string, data = null, backData = null, cleanStack = false): void {\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.state;\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(): boolean { return this._originToken !== null }\n goBack(): void { return this.formManagerService.backTo(); }\n goBackForm(): void { return this.goBack(); }\n getOriginDetail(): any { return this.formManagerService.getFormInfo(this._originToken); }\n\n setError(errorType: string, errorMessage: string, errorDetail: string): void {\n this._errorType = errorType || '';\n this.errorMessage = errorMessage || '';\n this.errorDetail = errorDetail || '';\n }\n\n resetError(): void { this.setError(null, null, null); }\n getErrorType(): string { return this._errorType; }\n getErrorMessage(): string { return this.errorMessage; }\n getErrorDetail(): string { return this.errorDetail; }\n getErrorCode(): string { return this._errorType; }\n\n getFormParameter(name: string): string {\n return (name) ? (this.extraData?.[name] ?? null) : null;\n }\n\n preocessInputParams(params: any): string {\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 null;\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(): void {\n const formSections = this._formStructure.sections;\n const sectionNames = Object.keys(formSections);\n for (let index = 0; index < sectionNames.length; index++) {\n const sectionName = sectionNames[index];\n const section = formSections[sectionName];\n section.activation.subscribe(code => this.launchSectionActivation(code));\n section.inactivation.subscribe(code => this.launchSectionInactivation(code));\n }\n }\n\n subscribeFieldsSubjects(): void {\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(event => this.showFieldInfo(event.code, event.detail));\n });\n }\n }\n\n subscribeActionSubjects(): void {\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(): void {\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): Promise<void> {\n let initialState: string = 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.sections = this._formStructure.sections;\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.visible = true;\n this.subscribeSectionActivation();\n this.subscribeFieldsSubjects();\n this.subscribeActionSubjects();\n this.subscribeTableSubjects();\n this.customFormStart();\n }\n\n checkErrorRecordReceived(recordResponse: any): boolean {\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 return true;\n }\n\n errorOccured(): boolean {\n return (this.errorCode !== NO_ERROR);\n }\n\n /**\n * Soporte manejo de eventos de formulario\n */\n\n async requestFormAction(actionCode: string, actionSubject: any = {}): Promise<any> {\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: any) {\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.getAction(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.getField(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.getTable(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(codes: string[] | string, callbackMethod) {\n const sectionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const sectionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const actionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const actionSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(code: string) {\n const sectionObject = this._formStructure.getSection(code);\n if (!sectionObject) { return; }\n const clientSectionMethods = this._formSectionsActivate[code];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async launchSectionInactivation(code: string) {\n const sectionObject = this._formStructure.getSection(code);\n if (!sectionObject) { return; }\n const clientSectionMethods = this._formSectionsInactivate[code];\n if (clientSectionMethods) {\n for (const clientSectionMethod of clientSectionMethods) {\n clientSectionMethod(sectionObject);\n }\n }\n }\n\n async startAction(code: string) {\n const actionObject = this.getAction(code);\n if (!actionObject) { return; }\n this.resetError();\n actionObject.start();\n const clientActionMethods = this._formActionsStart[code];\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(action, actionResult) {\n const finishActionMethods = this._formActionsFinish[action.actionCode];\n if (finishActionMethods) {\n const clientActionPromises = [];\n for (const clientActionMethod of finishActionMethods) {\n clientActionPromises.push(clientActionMethod(action, actionResult));\n }\n await Promise.all(clientActionPromises);\n }\n }\n\n completeGlobalAction(action: any) {\n return this.startServerAction(action);\n }\n\n /**\n * Manejadores de eventos para validaciones sobre campos\n */\n\n addFieldInputValidation(codes: string[] | string, callbackMethod) {\n const fieldSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const fieldSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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(codes: string[] | string, callbackMethod) {\n const fieldSet = (Array.isArray(codes)) ? codes : (codes ? [codes] : []);\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.getField(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: string | FieldDescriptor) {\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: any, validationResult: boolean) {\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: string) {\n return this.startServerFieldValidation(fieldCode);\n }\n\n /**\n * Manejadores de eventos para acciones sobre Tablas\n */\n\n addTableActionStart(code: string, actionCode: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getAction(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableActionsStart[code]) {\n tableEventHandlers = this._tableActionsStart[code];\n } else {\n tableEventHandlers = {};\n this._tableActionsStart[code] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableActionFinish(code: string, actionCode: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n const inlineActionObject = tableObject.getAction(actionCode);\n if (!inlineActionObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableActionsFinish[code]) {\n tableEventHandlers = this._tableActionsFinish[code];\n } else {\n tableEventHandlers = {};\n this._tableActionsFinish[code] = tableEventHandlers;\n }\n if (!tableEventHandlers[actionCode]) {\n tableEventHandlers[actionCode] = [];\n }\n tableEventHandlers[actionCode].push(callbackMethod);\n }\n\n addTableSelectionStart(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this._tableSelectionsStart[code]) {\n tableEventHandlers = this._tableSelectionsStart[code];\n } else {\n tableEventHandlers = [];\n this._tableSelectionsStart[code] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableSelectionFinish(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) { return; }\n let tableEventHandlers = null;\n if (this._tableSelectionsFinish[code]) {\n tableEventHandlers = this._tableSelectionsFinish[code];\n } else {\n tableEventHandlers = [];\n this._tableSelectionsFinish[code] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataStart(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableGetDataStart[code]) {\n tableEventHandlers = this._tableGetDataStart[code];\n } else {\n tableEventHandlers = [];\n this._tableGetDataStart[code] = tableEventHandlers;\n }\n tableEventHandlers.push(callbackMethod);\n }\n\n addTableGetDataFinish(code: string, callbackMethod) {\n const tableObject = this.getTable(code);\n if (!tableObject) {\n return;\n }\n let tableEventHandlers = null;\n if (this._tableGetDataFinish[code]) {\n tableEventHandlers = this._tableGetDataFinish[code];\n } else {\n tableEventHandlers = {};\n this._tableGetDataFinish[code] = tableEventHandlers;\n }\n tableEventHandlers[GET_DATA_ACTION] = callbackMethod;\n }\n\n async startTableGlobalAction(tableActionEvent: any) {\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: any) {\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: any, 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: any) {\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: any) {\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: any) {\n return this.startTableServerAction(tableAction);\n }\n\n async finishTableAction(tableActionDetail: any, 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: any) {\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: any) {\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: any, 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: any) {\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: any) {\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: any, 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: any) {\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: any) {\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: any, 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: string, 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: string, 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 requiredEmptyField?.focus();\n break;\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 validationIssueField.focus();\n break;\n }\n }\n return validationError;\n }\n\n copyTableRecordToFields(tableObj: any, mappingTable: any = 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","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 { 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 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":["INLINE_ACTION","HEADER"],"mappings":"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"}