UNPKG

tuain-ng-forms-lib

Version:

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

106 lines 19.9 kB
import { Subject } from 'rxjs'; import { elementTypes } from './form.constants'; import { FormElement } from './element'; const HEADER = 'HEADER'; const attrs = { actionCode: { name: '_actionCode', propagate: 'actionCode' }, actionName: { name: '_actionName', propagate: 'actionName' }, iconName: { name: '_iconName', propagate: 'iconName' }, inProgress: { name: '_inProgress', propagate: 'inProgress' }, restrictedOnField: { name: '_restrictedOnField', propagate: 'restrictedOnField' }, restrictedOnOperator: { name: '_restrictedOnOperator', propagate: 'restrictedOnOperator' }, restrictedOnValue: { name: '_restrictedOnValue', propagate: 'restrictedOnValue' }, }; export class FormAction extends FormElement { _actionActivated = new Subject(); _actionCode = ''; _actionName = ''; _iconName = ''; _inProgress = false; _newState; _backend; _restrictedOnField = null; _restrictedOnOperator = null; _restrictedOnValue = null; constructor(actionDefinition, formConfig) { super(actionDefinition, formConfig); this.propagationCustomAttributes = this._formConfig?.propagationCustomAttributes?.actions ?? []; this.elementType = elementTypes.action; this.setAttr(attrs.actionCode, actionDefinition.actionCode ? actionDefinition.actionCode.toString() : ''); this.setAttr(attrs.actionName, actionDefinition.actionTitle); this.setAttr(attrs.iconName, actionDefinition.iconName || this._actionCode); this.setAttr(attrs.restrictedOnField, actionDefinition.fieldRestrictedCode?.toString() ?? null); if (this._restrictedOnField) { this.setAttr(attrs.restrictedOnOperator, actionDefinition.operatorRestricted || ''); this.setAttr(attrs.restrictedOnValue, actionDefinition.valueRestricted ?? ''); } this._backend = actionDefinition?.serverAction ?? false; this._newState = actionDefinition?.newState; this.setCustomAttribute('location', actionDefinition.position || HEADER); } get actionCode() { return this._actionCode; } get actionName() { return this._actionName; } get iconName() { return this._iconName; } get inProgress() { return this._inProgress; } get newState() { return this._newState; } get backend() { return this._backend; } get restrictedOnField() { return this._restrictedOnField; } get restrictedOnOperator() { return this._restrictedOnOperator; } get restrictedOnValue() { return this._restrictedOnValue; } set actionCode(actionCode) { this.setAttr(attrs.actionCode, actionCode); } set actionName(actionName) { this.setAttr(attrs.actionName, actionName); } set iconName(iconName) { this.setAttr(attrs.iconName, iconName); } set inProgress(inProgress) { this.setAttr(attrs.inProgress, inProgress); } set newState(newState) { this._newState, newState; } set backend(backend) { this._backend, backend; } set restrictedOnField(restrictedOnField) { this.setAttr(attrs.restrictedOnField, restrictedOnField); } set restrictedOnOperator(restrictedOnOperator) { this.setAttr(attrs.restrictedOnOperator, restrictedOnOperator); } set restrictedOnValue(restrictedOnValue) { this.setAttr(attrs.restrictedOnValue, restrictedOnValue); } start() { this.inProgress = true; } stop() { this.inProgress = false; } connectWithParentForm(form, formChangeSubject) { super.connectWithParentForm(form, formChangeSubject); if (this._restrictedOnField) { const relatedField = this._form.fields?.[this._restrictedOnField]; if (relatedField) { relatedField.editionFinish .subscribe(event => this.updateRestrictedVisibility(event)); relatedField.editionPartial .subscribe(event => this.updateRestrictedVisibility(event)); } } } updateRestrictedVisibility(event) { const newVisible = this._absoluteVisible && this.viewOnState(this._formState); (this._visible !== newVisible) && this.setVisibility(newVisible); } viewOnState(state) { const actionVisible = (this.visibleStates && state) ? this.visibleStates.includes(state) : false; if (actionVisible && this._form && this._restrictedOnField) { const relatedField = this._form.fields?.[this._restrictedOnField]; if (relatedField) { const fieldValue = relatedField.value; if ((this._restrictedOnOperator === '==' && fieldValue !== this._restrictedOnValue) || (this._restrictedOnOperator === '!=' && fieldValue === this._restrictedOnValue)) { return false; } } } return actionVisible; } get actionActivated() { return this._actionActivated.asObservable(); } notifyActivation() { this._actionActivated.next(this._actionCode); } updateFromServer(receivedAction) { for (const propertyName in receivedAction) { if (propertyName !== 'actionCode' && propertyName !== 'actionId') { try { this[propertyName] = receivedAction[propertyName]; } catch (e) { console.log(`Error actualizando la propiedad ${propertyName} de la acción ${this.actionCode}. ${e}`); } } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVhaW4tbmctZm9ybXMtbGliL3NyYy9saWIvY2xhc3Nlcy9mb3Jtcy9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFFeEIsTUFBTSxLQUFLLEdBQUc7SUFDWixVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7SUFDNUQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFO0lBQzVELFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtJQUN0RCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7SUFDNUQsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFO0lBQ2pGLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRTtJQUMxRixpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUU7Q0FDbEYsQ0FBQTtBQUVELE1BQU0sT0FBTyxVQUFXLFNBQVEsV0FBVztJQUN4QixnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBQ2xELFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsV0FBVyxH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dCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZXMgfSBmcm9tICcuL2Zvcm0uY29uc3RhbnRzJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50JztcblxuY29uc3QgSEVBREVSID0gJ0hFQURFUic7XG5cbmNvbnN0IGF0dHJzID0ge1xuICBhY3Rpb25Db2RlOiB7IG5hbWU6ICdfYWN0aW9uQ29kZScsIHByb3BhZ2F0ZTogJ2FjdGlvbkNvZGUnIH0sXG4gIGFjdGlvbk5hbWU6IHsgbmFtZTogJ19hY3Rpb25OYW1lJywgcHJvcGFnYXRlOiAnYWN0aW9uTmFtZScgfSxcbiAgaWNvbk5hbWU6IHsgbmFtZTogJ19pY29uTmFtZScsIHByb3BhZ2F0ZTogJ2ljb25OYW1lJyB9LFxuICBpblByb2dyZXNzOiB7IG5hbWU6ICdfaW5Qcm9ncmVzcycsIHByb3BhZ2F0ZTogJ2luUHJvZ3Jlc3MnIH0sXG4gIHJlc3RyaWN0ZWRPbkZpZWxkOiB7IG5hbWU6ICdfcmVzdHJpY3RlZE9uRmllbGQnLCBwcm9wYWdhdGU6ICdyZXN0cmljdGVkT25GaWVsZCcgfSxcbiAgcmVzdHJpY3RlZE9uT3BlcmF0b3I6IHsgbmFtZTogJ19yZXN0cmljdGVkT25PcGVyYXRvcicsIHByb3BhZ2F0ZTogJ3Jlc3RyaWN0ZWRPbk9wZXJhdG9yJyB9LFxuICByZXN0cmljdGVkT25WYWx1ZTogeyBuYW1lOiAnX3Jlc3RyaWN0ZWRPblZhbHVlJywgcHJvcGFnYXRlOiAncmVzdHJpY3RlZE9uVmFsdWUnIH0sXG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtQWN0aW9uIGV4dGVuZHMgRm9ybUVsZW1lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3Rpb25BY3RpdmF0ZWQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2FjdGlvbkNvZGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9hY3Rpb25OYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfaWNvbk5hbWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9pblByb2dyZXNzID0gZmFsc2U7XG4gIHByaXZhdGUgX25ld1N0YXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2JhY2tlbmQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3Jlc3RyaWN0ZWRPbkZpZWxkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmVzdHJpY3RlZE9uT3BlcmF0b3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9yZXN0cmljdGVkT25WYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoYWN0aW9uRGVmaW5pdGlvbiwgZm9ybUNvbmZpZykge1xuICAgIHN1cGVyKGFjdGlvbkRlZmluaXRpb24sIGZvcm1Db25maWcpO1xuICAgIHRoaXMucHJvcGFnYXRpb25DdXN0b21BdHRyaWJ1dGVzID0gdGhpcy5fZm9ybUNvbmZpZz8ucHJvcGFnYXRpb25DdXN0b21BdHRyaWJ1dGVzPy5hY3Rpb25zID8/IFtdO1xuICAgIHRoaXMuZWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZXMuYWN0aW9uO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5hY3Rpb25Db2RlLCBhY3Rpb25EZWZpbml0aW9uLmFjdGlvbkNvZGUgPyBhY3Rpb25EZWZpbml0aW9uLmFjdGlvbkNvZGUudG9TdHJpbmcoKSA6ICcnKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuYWN0aW9uTmFtZSwgYWN0aW9uRGVmaW5pdGlvbi5hY3Rpb25UaXRsZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmljb25OYW1lLCBhY3Rpb25EZWZpbml0aW9uLmljb25OYW1lIHx8IHRoaXMuX2FjdGlvbkNvZGUpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5yZXN0cmljdGVkT25GaWVsZCwgYWN0aW9uRGVmaW5pdGlvbi5maWVsZFJlc3RyaWN0ZWRDb2RlPy50b1N0cmluZygpID8/IG51bGwpO1xuICAgIGlmICh0aGlzLl9yZXN0cmljdGVkT25GaWVsZCkge1xuICAgICAgdGhpcy5zZXRBdHRyKGF0dHJzLnJlc3RyaWN0ZWRPbk9wZXJhdG9yLCBhY3Rpb25EZWZpbml0aW9uLm9wZXJhdG9yUmVzdHJpY3RlZCB8fCAnJyk7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMucmVzdHJpY3RlZE9uVmFsdWUsIGFjdGlvbkRlZmluaXRpb24udmFsdWVSZXN0cmljdGVkID8/ICcnKTtcbiAgICB9XG4gICAgdGhpcy5fYmFja2VuZCA9IGFjdGlvbkRlZmluaXRpb24/LnNlcnZlckFjdGlvbiA/PyBmYWxzZTtcbiAgICB0aGlzLl9uZXdTdGF0ZSA9IGFjdGlvbkRlZmluaXRpb24/Lm5ld1N0YXRlO1xuICAgIHRoaXMuc2V0Q3VzdG9tQXR0cmlidXRlKCdsb2NhdGlvbicsIGFjdGlvbkRlZmluaXRpb24ucG9zaXRpb24gfHwgSEVBREVSKTtcbiAgfVxuXG4gIGdldCBhY3Rpb25Db2RlKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uQ29kZTsgfVxuICBnZXQgYWN0aW9uTmFtZSgpIHsgcmV0dXJuIHRoaXMuX2FjdGlvbk5hbWU7IH1cbiAgZ2V0IGljb25OYW1lKCkgeyByZXR1cm4gdGhpcy5faWNvbk5hbWU7IH1cbiAgZ2V0IGluUHJvZ3Jlc3MoKSB7IHJldHVybiB0aGlzLl9pblByb2dyZXNzOyB9XG4gIGdldCBuZXdTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuX25ld1N0YXRlOyB9XG4gIGdldCBiYWNrZW5kKCkgeyByZXR1cm4gdGhpcy5fYmFja2VuZDsgfVxuICBnZXQgcmVzdHJpY3RlZE9uRmllbGQoKSB7IHJldHVybiB0aGlzLl9yZXN0cmljdGVkT25GaWVsZDsgfVxuICBnZXQgcmVzdHJpY3RlZE9uT3BlcmF0b3IoKSB7IHJldHVybiB0aGlzLl9yZXN0cmljdGVkT25PcGVyYXRvcjsgfVxuICBnZXQgcmVzdHJpY3RlZE9uVmFsdWUoKSB7IHJldHVybiB0aGlzLl9yZXN0cmljdGVkT25WYWx1ZTsgfVxuXG4gIHNldCBhY3Rpb25Db2RlKGFjdGlvbkNvZGUpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmFjdGlvbkNvZGUsIGFjdGlvbkNvZGUpOyB9XG4gIHNldCBhY3Rpb25OYW1lKGFjdGlvbk5hbWUpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmFjdGlvbk5hbWUsIGFjdGlvbk5hbWUpOyB9XG4gIHNldCBpY29uTmFtZShpY29uTmFtZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMuaWNvbk5hbWUsIGljb25OYW1lKTsgfVxuICBzZXQgaW5Qcm9ncmVzcyhpblByb2dyZXNzKSB7IHRoaXMuc2V0QXR0cihhdHRycy5pblByb2dyZXNzLCBpblByb2dyZXNzKTsgfVxuICBzZXQgbmV3U3RhdGUobmV3U3RhdGUpIHsgdGhpcy5fbmV3U3RhdGUsIG5ld1N0YXRlOyB9XG4gIHNldCBiYWNrZW5kKGJhY2tlbmQpIHsgdGhpcy5fYmFja2VuZCwgYmFja2VuZDsgfVxuICBzZXQgcmVzdHJpY3RlZE9uRmllbGQocmVzdHJpY3RlZE9uRmllbGQpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLnJlc3RyaWN0ZWRPbkZpZWxkLCByZXN0cmljdGVkT25GaWVsZCk7IH1cbiAgc2V0IHJlc3RyaWN0ZWRPbk9wZXJhdG9yKHJlc3RyaWN0ZWRPbk9wZXJhdG9yKSB7IHRoaXMuc2V0QXR0cihhdHRycy5yZXN0cmljdGVkT25PcGVyYXRvciwgcmVzdHJpY3RlZE9uT3BlcmF0b3IpOyB9XG4gIHNldCByZXN0cmljdGVkT25WYWx1ZShyZXN0cmljdGVkT25WYWx1ZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMucmVzdHJpY3RlZE9uVmFsdWUsIHJlc3RyaWN0ZWRPblZhbHVlKTsgfVxuXG4gIHN0YXJ0KCkgeyB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlOyB9XG4gIHN0b3AoKSB7IHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlOyB9XG5cbiAgb3ZlcnJpZGUgY29ubmVjdFdpdGhQYXJlbnRGb3JtKGZvcm0sIGZvcm1DaGFuZ2VTdWJqZWN0KSB7XG4gICAgc3VwZXIuY29ubmVjdFdpdGhQYXJlbnRGb3JtKGZvcm0sIGZvcm1DaGFuZ2VTdWJqZWN0KTtcbiAgICBpZiAodGhpcy5fcmVzdHJpY3RlZE9uRmllbGQpIHtcbiAgICAgIGNvbnN0IHJlbGF0ZWRGaWVsZCA9IHRoaXMuX2Zvcm0uZmllbGRzPy5bdGhpcy5fcmVzdHJpY3RlZE9uRmllbGRdO1xuICAgICAgaWYgKHJlbGF0ZWRGaWVsZCkge1xuICAgICAgICByZWxhdGVkRmllbGQuZWRpdGlvbkZpbmlzaFxuXG4gICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnVwZGF0ZVJlc3RyaWN0ZWRWaXNpYmlsaXR5KGV2ZW50KSk7XG4gICAgICAgIHJlbGF0ZWRGaWVsZC5lZGl0aW9uUGFydGlhbFxuXG4gICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnVwZGF0ZVJlc3RyaWN0ZWRWaXNpYmlsaXR5KGV2ZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUmVzdHJpY3RlZFZpc2liaWxpdHkoZXZlbnQpIHtcbiAgICBjb25zdCBuZXdWaXNpYmxlID0gdGhpcy5fYWJzb2x1dGVWaXNpYmxlICYmIHRoaXMudmlld09uU3RhdGUodGhpcy5fZm9ybVN0YXRlKTtcbiAgICAodGhpcy5fdmlzaWJsZSAhPT0gbmV3VmlzaWJsZSkgJiYgdGhpcy5zZXRWaXNpYmlsaXR5KG5ld1Zpc2libGUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlld09uU3RhdGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFjdGlvblZpc2libGUgPSAodGhpcy52aXNpYmxlU3RhdGVzICYmIHN0YXRlKSA/IHRoaXMudmlzaWJsZVN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkgOiBmYWxzZTtcbiAgICBpZiAoYWN0aW9uVmlzaWJsZSAmJiB0aGlzLl9mb3JtICYmIHRoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkKSB7XG4gICAgICBjb25zdCByZWxhdGVkRmllbGQgPSB0aGlzLl9mb3JtLmZpZWxkcz8uW3RoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkXTtcbiAgICAgIGlmIChyZWxhdGVkRmllbGQpIHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlbGF0ZWRGaWVsZC52YWx1ZTtcbiAgICAgICAgaWYgKCh0aGlzLl9yZXN0cmljdGVkT25PcGVyYXRvciA9PT0gJz09JyAmJiBmaWVsZFZhbHVlICE9PSB0aGlzLl9yZXN0cmljdGVkT25WYWx1ZSlcbiAgICAgICAgICB8fCAodGhpcy5fcmVzdHJpY3RlZE9uT3BlcmF0b3IgPT09ICchPScgJiYgZmllbGRWYWx1ZSA9PT0gdGhpcy5fcmVzdHJpY3RlZE9uVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25WaXNpYmxlO1xuICB9XG5cbiAgZ2V0IGFjdGlvbkFjdGl2YXRlZCgpIHsgcmV0dXJuIHRoaXMuX2FjdGlvbkFjdGl2YXRlZC5hc09ic2VydmFibGUoKTsgfVxuXG4gIG5vdGlmeUFjdGl2YXRpb24oKSB7IHRoaXMuX2FjdGlvbkFjdGl2YXRlZC5uZXh0KHRoaXMuX2FjdGlvbkNvZGUpOyB9XG5cbiAgdXBkYXRlRnJvbVNlcnZlcihyZWNlaXZlZEFjdGlvbikge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHJlY2VpdmVkQWN0aW9uKSB7XG4gICAgICBpZiAocHJvcGVydHlOYW1lICE9PSAnYWN0aW9uQ29kZScgJiYgcHJvcGVydHlOYW1lICE9PSAnYWN0aW9uSWQnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gcmVjZWl2ZWRBY3Rpb25bcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciBhY3R1YWxpemFuZG8gbGEgcHJvcGllZGFkICR7cHJvcGVydHlOYW1lfSBkZSBsYSBhY2Npw7NuICR7dGhpcy5hY3Rpb25Db2RlfS4gJHtlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=