UNPKG

tuain-ng-forms-lib

Version:

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

113 lines 16.5 kB
import { Component, signal, Input, model, ChangeDetectionStrategy, inject, DestroyRef } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { ElementComponent } from './layout/element.component'; import { CUSTOM_ATTRIBUTES } from '../shared/constants'; import * as i0 from "@angular/core"; 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 { destroyRef = inject(DestroyRef); 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 = model(); field = null; 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(takeUntilDestroyed(this.destroyRef)) .subscribe({ next: (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); } }, error: (err) => console.error(`Error en propagación de atributos de campo: ${err}`) }); this.start(); } updateValue() { try { this.value.set(this.field?.value); } catch (e) { console.error(`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(); } 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, isStandalone: true, 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, changeDetection: i0.ChangeDetectionStrategy.OnPush }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FieldComponent, decorators: [{ type: Component, args: [{ standalone: true, selector: 'lib-field', template: `<ng-content></ng-content>`, changeDetection: ChangeDetectionStrategy.OnPush }] }], propDecorators: { field: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVhaW4tbmctZm9ybXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9lbGVtZW50cy9maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUV4RCxNQUFNLGtCQUFrQixHQUFHLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGNBQWM7SUFDakcsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVM7SUFDaEcsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsWUFBWTtJQUM1RixhQUFhLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU87Q0FDN0YsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7QUFRdEIsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFDMUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV4QyxXQUFXLEdBQUcsTUFB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QUNuRixlQUFlLEtBQVcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsVUFBVSxDQUFDLFNBQWMsSUFBSSxJQUFVLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RyxLQUFLLEtBQVcsQ0FBQztJQUVqQixZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksSUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdGLFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzt3R0F6RlUsY0FBYzs0RkFBZCxjQUFjLDRYQUhmLDJCQUEyQjs7NEZBRzFCLGNBQWM7a0JBTjFCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBK0JVLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgc2lnbmFsLCBJbnB1dCwgbW9kZWwsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIGluamVjdCwgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRmllbGREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9maWVsZCc7XG5pbXBvcnQgeyBFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQvZWxlbWVudC5jb21wb25lbnQnXG5pbXBvcnQgeyBDVVNUT01fQVRUUklCVVRFUyB9IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xuXG5jb25zdCBzaWduYWxlZEF0dHJpYnV0ZXMgPSBbJ2NhcHR1cmVUeXBlJywgJ2Vycm9yQ29kZScsICdlcnJvck1lc3NhZ2UnLCAnZXJyb3JUeXBlJywgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0RWRpdGFibGUnLCAnYWxpZ25tZW50JywgJ2NvZGUnLCAnaW5mbycsICdyZXF1aXJlZCcsICd0aXRsZScsICd0eXBlJywgJ2Zvcm1hdCcsICdvcHRpb25zJyxcbiAgJ2hhc0NoYW5nZWQnLCAnbWF4TGVuZ3RoJywgJ21heFZhbHVlJywgJ21pbkxlbmd0aCcsICdtaW5WYWx1ZScsICdvblZhbGlkYXRpb24nLCAnb3V0cHV0T25seScsXG4gICdwbGFjZWhvbGRlcicsICd0b29sdGlwJywgJ3ZhbGlkYXRlT25TZXJ2ZXInLCAndmlzaWJsZUxhYmVsJywgJ3Zpc2libGUnLCAnZGlzYWJsZWQnLCAndmFsdWUnLFxuXTtcblxuY29uc3QgVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgRk9DVVMgPSAnZm9jdXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdsaWItZmllbGQnLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZENvbXBvbmVudCBleHRlbmRzIEVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY2FwdHVyZVR5cGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGVycm9yQ29kZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgZXJyb3JNZXNzYWdlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBlcnJvclR5cGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGRlZmF1bHRWYWx1ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuICBkZWZhdWx0RWRpdGFibGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBhbGlnbm1lbnQgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGNvZGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIGluZm8gPSBzaWduYWw8YW55PihudWxsKTtcbiAgcmVxdWlyZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICB0aXRsZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgdHlwZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgZm9ybWF0ID0gc2lnbmFsPGFueT4obnVsbCk7XG4gIG9wdGlvbnMgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgaGFzQ2hhbmdlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIG1pbkxlbmd0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBtYXhMZW5ndGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgbWluVmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcbiAgbWF4VmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcbiAgb25WYWxpZGF0aW9uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgb3V0cHV0T25seSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHBsYWNlaG9sZGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICB0b29sdGlwID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICB2YWxpZGF0ZU9uU2VydmVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlzaWJsZUxhYmVsID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIHZhbHVlID0gbW9kZWw8YW55PigpO1xuICBASW5wdXQoKSBmaWVsZDogRmllbGREZXNjcmlwdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgdXBkYXRlUHJvcGFnYXRlZEF0dHJpYnV0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVQaWVjZUF0dHJpYnV0ZXModGhpcy5maWVsZCwgc2lnbmFsZWRBdHRyaWJ1dGVzKVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZmllbGQud2lkZ2V0ID0gdGhpcztcbiAgICB0aGlzLmZvcm1Db25maWcgPSB0aGlzLmZpZWxkPy5mb3JtQ29uZmlnO1xuICAgIHRoaXMudXBkYXRlUHJvcGFnYXRlZEF0dHJpYnV0ZXMoKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gICAgdGhpcy5yZXBsYWNlQ3VzdG9tQXR0cmlidXRlcyh0aGlzLmZpZWxkPy5jdXN0b21BdHRyaWJ1dGVzKTtcbiAgICB0aGlzLmZpZWxkPy5hdHRyaWJ1dGVDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbmFtZTogYXR0cmlidXRlLCB2YWx1ZSA9IG51bGwgfSA9IGV2ZW50ID8/IHt9O1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVBhcnRzID0gYXR0cmlidXRlPy5zcGxpdCgnLicpID8/IFtdO1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGUgPT09IFZBTFVFKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUgPT09IEZPQ1VTKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzaWduYWxlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoYXR0cmlidXRlKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQaWVjZUF0dHJpYnV0ZShzaWduYWxlZEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlUGFydHM/Lmxlbmd0aCA+IDEgJiYgYXR0cmlidXRlUGFydHM/LlswXSA9PT0gQ1VTVE9NX0FUVFJJQlVURVMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZVBhcnRzPy5bMV0gPz8gbnVsbDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VzdG9tQXR0cmlidXRlKHN1YkF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoYEVycm9yIGVuIHByb3BhZ2FjacOzbiBkZSBhdHJpYnV0b3MgZGUgY2FtcG86ICR7ZXJyfWApXG4gICAgICB9KTtcbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZS5zZXQodGhpcy5maWVsZD8udmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEV4Y2VwY2nDs24gZW4gY29tcG9uZW50ZSBkZSBjYW1wbyAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dENoYW5nZSgpOiB2b2lkIHsgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZpZWxkPy5ub3RpZnlFZGl0aW9uUGFydGlhbCgpLCA1MCk7IH1cbiAgb25DaGFuZ2VDb250ZW50KCk6IHZvaWQgeyBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZmllbGQ/Lm5vdGlmeUVkaXRpb25GaW5pc2goKSwgNTApOyB9XG4gIG9uU2hvd0luZm8oZGV0YWlsOiBhbnkgPSBudWxsKTogdm9pZCB7IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5maWVsZD8ubm90aWZ5RWRpdGlvbkRldGFpbFJlcXVlc3QoZGV0YWlsKSwgNTApOyB9XG5cbiAgZm9jdXMoKTogdm9pZCB7IH1cblxuICB1cGRhdGVPYmplY3Qod2lkZ2V0VXBkYXRlID0gdHJ1ZSk6IHZvaWQgeyB0aGlzLmZpZWxkPy5zZXRWYWx1ZSh0aGlzLnZhbHVlKCksIHdpZGdldFVwZGF0ZSk7IH1cblxuICBpbnB1dENoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVPYmplY3QoKTtcbiAgICB0aGlzLm9uQ2hhbmdlQ29udGVudCgpO1xuICB9XG5cbiAgaW5wdXRUeXBlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZU9iamVjdChmYWxzZSk7XG4gICAgdGhpcy5vbklucHV0Q2hhbmdlKCk7XG4gIH1cbn1cbiJdfQ==