UNPKG

tuain-ng-forms-lib

Version:

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

115 lines 16.5 kB
import { Component, signal, Input, model } from '@angular/core'; import { Subject, takeUntil } from 'rxjs'; import { ElementComponent } from './layout/element.component'; import * as i0 from "@angular/core"; const CUSTOM_ATTRIBUTES = 'customAttributes'; const signaledAttributes = ['captureType', 'errorCode', 'errorMessage', 'errorType', 'defaultValue', 'defaultEditable', 'alignment', 'code', 'info', 'required', 'title', 'type', 'format', 'options', 'hasChanged', 'maxLength', 'maxValue', 'minLength', 'minValue', 'onValidation', 'outputOnly', 'placeholder', 'tooltip', 'validateOnServer', 'visibleLabel', 'visible', 'disabled', 'value', ]; const VALUE = 'value'; const FOCUS = 'focus'; export class FieldComponent extends ElementComponent { destroy$ = new Subject(); // Atributos propagados desde el campo captureType = signal(''); errorCode = signal(''); errorMessage = signal(''); errorType = signal(''); defaultValue = signal(null); defaultEditable = signal(false); alignment = signal(''); code = signal(''); info = signal(null); required = signal(false); title = signal(''); type = signal(''); format = signal(null); options = signal([]); hasChanged = signal(false); minLength = signal(0); maxLength = signal(0); minValue = signal(null); maxValue = signal(null); onValidation = signal(false); outputOnly = signal(false); placeholder = signal(''); tooltip = signal(''); validateOnServer = signal(false); visibleLabel = signal(true); // value: any; // Valor del componente relacionado con el campo (pueden diferir en formato y tipo) value = model(); // Valor del componente relacionado con el campo (pueden diferir en formato y tipo) field = null; // field = input.required<FieldDescriptor>(); updatePropagatedAttributes() { this.updatePieceAttributes(this.field, signaledAttributes); } ngOnInit() { if (!this.field) { return; } this.field.widget = this; this.formConfig = this.field?._formConfig; this.updatePropagatedAttributes(); this.updateValue(); this.replaceCustomAttributes(this.field?.customAttributes); this.field?.attributeChange .pipe(takeUntil(this.destroy$)) .subscribe(event => { const { name: attribute, value = null } = event ?? {}; const attributeParts = attribute?.split('.') ?? []; if (attribute === VALUE) { this.updateValue(); } else if (attribute === FOCUS) { this.focus(); } else if (signaledAttributes.includes(attribute)) { this.updatePieceAttribute(signaledAttributes, attribute, value); } else if (attributeParts?.length > 1 && attributeParts?.[0] === CUSTOM_ATTRIBUTES) { const subAttribute = attributeParts?.[1] ?? null; this.updateCustomAttribute(subAttribute, value); } }); this.start(); } updateValue() { try { this.value.set(this.field?.value); } catch (e) { console.log(`Excepción en componente de campo ${e}`); } } onInputChange() { setTimeout(() => this.field?.notifyEditionPartial(), 50); } onChangeContent() { setTimeout(() => this.field?.notifyEditionFinish(), 50); } onShowInfo(detail = null) { setTimeout(() => this.field?.notifyEditionDetailRequest(detail), 50); } focus() { } updateObject(widgetUpdate = true) { this.field?.setValue(this.value(), widgetUpdate); } inputChanged() { this.updateObject(); this.onChangeContent(); } inputTyped() { this.updateObject(false); this.onInputChange(); } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: FieldComponent, selector: "lib-field", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldComponent, decorators: [{ type: Component, args: [{ selector: 'lib-field', template: `<ng-content></ng-content>` }] }], propDecorators: { field: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVhaW4tbmctZm9ybXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9lbGVtZW50cy9maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFTLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTs7QUFFN0QsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQztBQUU3QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGNBQWM7SUFDakcsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVM7SUFDaEcsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsWUFBWTtJQUM1RixhQUFhLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU87Q0FDN0YsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFLdEIsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFDMUMsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdkMsc0NBQXNDO0lBQ3RDLFdBQVcsR0FBUSxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDdEMs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OUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5HLEtBQUssS0FBSyxDQUFDO0lBRVgsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RixZQUFZO1FBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBOUZVLGNBQWM7NEZBQWQsY0FBYyx3V0FGZiwyQkFBMkI7OzRGQUUxQixjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs4QkFpQ1UsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBzaWduYWwsIElucHV0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2ZpZWxkJztcbmltcG9ydCB7IEVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC9lbGVtZW50LmNvbXBvbmVudCdcblxuY29uc3QgQ1VTVE9NX0FUVFJJQlVURVMgPSAnY3VzdG9tQXR0cmlidXRlcyc7XG5cbmNvbnN0IHNpZ25hbGVkQXR0cmlidXRlcyA9IFsnY2FwdHVyZVR5cGUnLCAnZXJyb3JDb2RlJywgJ2Vycm9yTWVzc2FnZScsICdlcnJvclR5cGUnLCAnZGVmYXVsdFZhbHVlJyxcbiAgJ2RlZmF1bHRFZGl0YWJsZScsICdhbGlnbm1lbnQnLCAnY29kZScsICdpbmZvJywgJ3JlcXVpcmVkJywgJ3RpdGxlJywgJ3R5cGUnLCAnZm9ybWF0JywgJ29wdGlvbnMnLFxuICAnaGFzQ2hhbmdlZCcsICdtYXhMZW5ndGgnLCAnbWF4VmFsdWUnLCAnbWluTGVuZ3RoJywgJ21pblZhbHVlJywgJ29uVmFsaWRhdGlvbicsICdvdXRwdXRPbmx5JyxcbiAgJ3BsYWNlaG9sZGVyJywgJ3Rvb2x0aXAnLCAndmFsaWRhdGVPblNlcnZlcicsICd2aXNpYmxlTGFiZWwnLCAndmlzaWJsZScsICdkaXNhYmxlZCcsICd2YWx1ZScsXG5dO1xuXG5jb25zdCBWQUxVRSA9ICd2YWx1ZSc7XG5jb25zdCBGT0NVUyA9ICdmb2N1cyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZmllbGQnLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29tcG9uZW50IGV4dGVuZHMgRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIEF0cmlidXRvcyBwcm9wYWdhZG9zIGRlc2RlIGVsIGNhbXBvXG4gIGNhcHR1cmVUeXBlOiBhbnkgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGVycm9yQ29kZTogYW55ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBlcnJvck1lc3NhZ2U6IGFueSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgZXJyb3JUeXBlOiBhbnkgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGRlZmF1bHRWYWx1ZTogYW55ID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIGRlZmF1bHRFZGl0YWJsZTogYW55ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgYWxpZ25tZW50OiBhbnkgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGNvZGU6IGFueSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgaW5mbzogYW55ID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIHJlcXVpcmVkOiBhbnkgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICB0aXRsZTogYW55ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICB0eXBlOiBhbnkgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGZvcm1hdDogYW55ID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIG9wdGlvbnM6IGFueSA9IHNpZ25hbDxhbnlbXT4oW10pO1xuICBoYXNDaGFuZ2VkOiBhbnkgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBtaW5MZW5ndGg6IGFueSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBtYXhMZW5ndGg6IGFueSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBtaW5WYWx1ZTogYW55ID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIG1heFZhbHVlOiBhbnkgPSBzaWduYWw8YW55PihudWxsKTtcbiAgb25WYWxpZGF0aW9uOiBhbnkgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBvdXRwdXRPbmx5OiBhbnkgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwbGFjZWhvbGRlcjogYW55ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICB0b29sdGlwOiBhbnkgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHZhbGlkYXRlT25TZXJ2ZXI6IGFueSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHZpc2libGVMYWJlbDogYW55ID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIC8vIHZhbHVlOiBhbnk7ICAvLyBWYWxvciBkZWwgY29tcG9uZW50ZSByZWxhY2lvbmFkbyBjb24gZWwgY2FtcG8gKHB1ZWRlbiBkaWZlcmlyIGVuIGZvcm1hdG8geSB0aXBvKVxuICB2YWx1ZSA9IG1vZGVsPGFueT4oKTsgIC8vIFZhbG9yIGRlbCBjb21wb25lbnRlIHJlbGFjaW9uYWRvIGNvbiBlbCBjYW1wbyAocHVlZGVuIGRpZmVyaXIgZW4gZm9ybWF0byB5IHRpcG8pXG4gIEBJbnB1dCgpIGZpZWxkOiBGaWVsZERlc2NyaXB0b3IgfCBudWxsID0gbnVsbDtcbiAgLy8gZmllbGQgPSBpbnB1dC5yZXF1aXJlZDxGaWVsZERlc2NyaXB0b3I+KCk7XG5cbiAgdXBkYXRlUHJvcGFnYXRlZEF0dHJpYnV0ZXMoKSB7XG4gICAgdGhpcy51cGRhdGVQaWVjZUF0dHJpYnV0ZXModGhpcy5maWVsZCwgc2lnbmFsZWRBdHRyaWJ1dGVzKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZpZWxkKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZmllbGQud2lkZ2V0ID0gdGhpcztcbiAgICB0aGlzLmZvcm1Db25maWcgPSB0aGlzLmZpZWxkPy5fZm9ybUNvbmZpZztcbiAgICB0aGlzLnVwZGF0ZVByb3BhZ2F0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIHRoaXMucmVwbGFjZUN1c3RvbUF0dHJpYnV0ZXModGhpcy5maWVsZD8uY3VzdG9tQXR0cmlidXRlcyk7XG4gICAgdGhpcy5maWVsZD8uYXR0cmlidXRlQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyBuYW1lOiBhdHRyaWJ1dGUsIHZhbHVlID0gbnVsbCB9ID0gZXZlbnQgPz8ge307XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZVBhcnRzID0gYXR0cmlidXRlPy5zcGxpdCgnLicpID8/IFtdO1xuICAgICAgICBpZiAoYXR0cmlidXRlID09PSBWQUxVRSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUgPT09IEZPQ1VTKSB7XG4gICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHNpZ25hbGVkQXR0cmlidXRlcy5pbmNsdWRlcyhhdHRyaWJ1dGUpKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVQaWVjZUF0dHJpYnV0ZShzaWduYWxlZEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZVBhcnRzPy5sZW5ndGggPiAxICYmIGF0dHJpYnV0ZVBhcnRzPy5bMF0gPT09IENVU1RPTV9BVFRSSUJVVEVTKSB7XG4gICAgICAgICAgY29uc3Qgc3ViQXR0cmlidXRlID0gYXR0cmlidXRlUGFydHM/LlsxXSA/PyBudWxsO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ3VzdG9tQXR0cmlidXRlKHN1YkF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZSgpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZS5zZXQodGhpcy5maWVsZD8udmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBFeGNlcGNpw7NuIGVuIGNvbXBvbmVudGUgZGUgY2FtcG8gJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2UoKSB7IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5maWVsZD8ubm90aWZ5RWRpdGlvblBhcnRpYWwoKSwgNTApOyB9XG4gIG9uQ2hhbmdlQ29udGVudCgpIHsgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZpZWxkPy5ub3RpZnlFZGl0aW9uRmluaXNoKCksIDUwKTsgfVxuICBvblNob3dJbmZvKGRldGFpbCA9IG51bGwpIHsgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZpZWxkPy5ub3RpZnlFZGl0aW9uRGV0YWlsUmVxdWVzdChkZXRhaWwpLCA1MCk7IH1cblxuICBmb2N1cygpIHsgfVxuXG4gIHVwZGF0ZU9iamVjdCh3aWRnZXRVcGRhdGUgPSB0cnVlKSB7IHRoaXMuZmllbGQ/LnNldFZhbHVlKHRoaXMudmFsdWUoKSwgd2lkZ2V0VXBkYXRlKTsgfVxuXG4gIGlucHV0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZU9iamVjdCgpO1xuICAgIHRoaXMub25DaGFuZ2VDb250ZW50KCk7XG4gIH1cblxuICBpbnB1dFR5cGVkKCkge1xuICAgIHRoaXMudXBkYXRlT2JqZWN0KGZhbHNlKTtcbiAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19