UNPKG

tuain-ng-forms-lib

Version:

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

104 lines 19.8 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; } 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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Y3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVsZW1lbnRUeXBlcyB9IGZyb20gJy4vZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQnO1xuXG5jb25zdCBIRUFERVIgPSAnSEVBREVSJztcblxuY29uc3QgYXR0cnMgPSB7XG4gIGFjdGlvbkNvZGU6IHsgbmFtZTogJ19hY3Rpb25Db2RlJywgcHJvcGFnYXRlOiAnYWN0aW9uQ29kZScgfSxcbiAgYWN0aW9uTmFtZTogeyBuYW1lOiAnX2FjdGlvbk5hbWUnLCBwcm9wYWdhdGU6ICdhY3Rpb25OYW1lJyB9LFxuICBpY29uTmFtZTogeyBuYW1lOiAnX2ljb25OYW1lJywgcHJvcGFnYXRlOiAnaWNvbk5hbWUnIH0sXG4gIGluUHJvZ3Jlc3M6IHsgbmFtZTogJ19pblByb2dyZXNzJywgcHJvcGFnYXRlOiAnaW5Qcm9ncmVzcycgfSxcbiAgcmVzdHJpY3RlZE9uRmllbGQ6IHsgbmFtZTogJ19yZXN0cmljdGVkT25GaWVsZCcsIHByb3BhZ2F0ZTogJ3Jlc3RyaWN0ZWRPbkZpZWxkJyB9LFxuICByZXN0cmljdGVkT25PcGVyYXRvcjogeyBuYW1lOiAnX3Jlc3RyaWN0ZWRPbk9wZXJhdG9yJywgcHJvcGFnYXRlOiAncmVzdHJpY3RlZE9uT3BlcmF0b3InIH0sXG4gIHJlc3RyaWN0ZWRPblZhbHVlOiB7IG5hbWU6ICdfcmVzdHJpY3RlZE9uVmFsdWUnLCBwcm9wYWdhdGU6ICdyZXN0cmljdGVkT25WYWx1ZScgfSxcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1BY3Rpb24gZXh0ZW5kcyBGb3JtRWxlbWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvbkFjdGl2YXRlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfYWN0aW9uQ29kZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2FjdGlvbk5hbWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9pY29uTmFtZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbmV3U3RhdGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfYmFja2VuZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcmVzdHJpY3RlZE9uRmllbGQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9yZXN0cmljdGVkT25PcGVyYXRvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jlc3RyaWN0ZWRPblZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihhY3Rpb25EZWZpbml0aW9uLCBmb3JtQ29uZmlnKSB7XG4gICAgc3VwZXIoYWN0aW9uRGVmaW5pdGlvbiwgZm9ybUNvbmZpZyk7XG4gICAgdGhpcy5wcm9wYWdhdGlvbkN1c3RvbUF0dHJpYnV0ZXMgPSB0aGlzLl9mb3JtQ29uZmlnPy5wcm9wYWdhdGlvbkN1c3RvbUF0dHJpYnV0ZXM/LmFjdGlvbnMgPz8gW107XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlcy5hY3Rpb247XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLmFjdGlvbkNvZGUsIGFjdGlvbkRlZmluaXRpb24uYWN0aW9uQ29kZSA/IGFjdGlvbkRlZmluaXRpb24uYWN0aW9uQ29kZS50b1N0cmluZygpIDogJycpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5hY3Rpb25OYW1lLCBhY3Rpb25EZWZpbml0aW9uLmFjdGlvblRpdGxlKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuaWNvbk5hbWUsIGFjdGlvbkRlZmluaXRpb24uaWNvbk5hbWUgfHwgdGhpcy5fYWN0aW9uQ29kZSk7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLnJlc3RyaWN0ZWRPbkZpZWxkLCBhY3Rpb25EZWZpbml0aW9uLmZpZWxkUmVzdHJpY3RlZENvZGU/LnRvU3RyaW5nKCkgPz8gbnVsbCk7XG4gICAgaWYgKHRoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkKSB7XG4gICAgICB0aGlzLnNldEF0dHIoYXR0cnMucmVzdHJpY3RlZE9uT3BlcmF0b3IsIGFjdGlvbkRlZmluaXRpb24ub3BlcmF0b3JSZXN0cmljdGVkIHx8ICcnKTtcbiAgICAgIHRoaXMuc2V0QXR0cihhdHRycy5yZXN0cmljdGVkT25WYWx1ZSwgYWN0aW9uRGVmaW5pdGlvbi52YWx1ZVJlc3RyaWN0ZWQgPz8gJycpO1xuICAgIH1cbiAgICB0aGlzLl9iYWNrZW5kID0gYWN0aW9uRGVmaW5pdGlvbj8uc2VydmVyQWN0aW9uID8/IGZhbHNlO1xuICAgIHRoaXMuX25ld1N0YXRlID0gYWN0aW9uRGVmaW5pdGlvbj8ubmV3U3RhdGU7XG4gICAgdGhpcy5zZXRDdXN0b21BdHRyaWJ1dGUoJ2xvY2F0aW9uJywgYWN0aW9uRGVmaW5pdGlvbi5wb3NpdGlvbiB8fCBIRUFERVIpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbkNvZGUoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25Db2RlOyB9XG4gIGdldCBhY3Rpb25OYW1lKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uTmFtZTsgfVxuICBnZXQgaWNvbk5hbWUoKSB7IHJldHVybiB0aGlzLl9pY29uTmFtZTsgfVxuICBnZXQgaW5Qcm9ncmVzcygpIHsgcmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3M7IH1cbiAgZ2V0IG5ld1N0YXRlKCkgeyByZXR1cm4gdGhpcy5fbmV3U3RhdGU7IH1cbiAgZ2V0IGJhY2tlbmQoKSB7IHJldHVybiB0aGlzLl9iYWNrZW5kOyB9XG4gIGdldCByZXN0cmljdGVkT25GaWVsZCgpIHsgcmV0dXJuIHRoaXMuX3Jlc3RyaWN0ZWRPbkZpZWxkOyB9XG4gIGdldCByZXN0cmljdGVkT25PcGVyYXRvcigpIHsgcmV0dXJuIHRoaXMuX3Jlc3RyaWN0ZWRPbk9wZXJhdG9yOyB9XG4gIGdldCByZXN0cmljdGVkT25WYWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3Jlc3RyaWN0ZWRPblZhbHVlOyB9XG5cbiAgc2V0IGFjdGlvbkNvZGUoYWN0aW9uQ29kZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMuYWN0aW9uQ29kZSwgYWN0aW9uQ29kZSk7IH1cbiAgc2V0IGFjdGlvbk5hbWUoYWN0aW9uTmFtZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMuYWN0aW9uTmFtZSwgYWN0aW9uTmFtZSk7IH1cbiAgc2V0IGljb25OYW1lKGljb25OYW1lKSB7IHRoaXMuc2V0QXR0cihhdHRycy5pY29uTmFtZSwgaWNvbk5hbWUpOyB9XG4gIHNldCBpblByb2dyZXNzKGluUHJvZ3Jlc3MpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmluUHJvZ3Jlc3MsIGluUHJvZ3Jlc3MpOyB9XG4gIHNldCBuZXdTdGF0ZShuZXdTdGF0ZSkgeyB0aGlzLl9uZXdTdGF0ZSwgbmV3U3RhdGU7IH1cbiAgc2V0IGJhY2tlbmQoYmFja2VuZCkgeyB0aGlzLl9iYWNrZW5kLCBiYWNrZW5kOyB9XG4gIHNldCByZXN0cmljdGVkT25GaWVsZChyZXN0cmljdGVkT25GaWVsZCkgeyB0aGlzLnNldEF0dHIoYXR0cnMucmVzdHJpY3RlZE9uRmllbGQsIHJlc3RyaWN0ZWRPbkZpZWxkKTsgfVxuICBzZXQgcmVzdHJpY3RlZE9uT3BlcmF0b3IocmVzdHJpY3RlZE9uT3BlcmF0b3IpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLnJlc3RyaWN0ZWRPbk9wZXJhdG9yLCByZXN0cmljdGVkT25PcGVyYXRvcik7IH1cbiAgc2V0IHJlc3RyaWN0ZWRPblZhbHVlKHJlc3RyaWN0ZWRPblZhbHVlKSB7IHRoaXMuc2V0QXR0cihhdHRycy5yZXN0cmljdGVkT25WYWx1ZSwgcmVzdHJpY3RlZE9uVmFsdWUpOyB9XG5cbiAgc3RhcnQoKSB7IHRoaXMuaW5Qcm9ncmVzcyA9IHRydWU7IH1cbiAgc3RvcCgpIHsgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7IH1cblxuICBvdmVycmlkZSBjb25uZWN0V2l0aFBhcmVudEZvcm0oZm9ybSwgZm9ybUNoYW5nZVN1YmplY3QpIHtcbiAgICBzdXBlci5jb25uZWN0V2l0aFBhcmVudEZvcm0oZm9ybSwgZm9ybUNoYW5nZVN1YmplY3QpO1xuICAgIGlmICh0aGlzLl9yZXN0cmljdGVkT25GaWVsZCkge1xuICAgICAgY29uc3QgcmVsYXRlZEZpZWxkID0gdGhpcy5fZm9ybS5maWVsZHM/Llt0aGlzLl9yZXN0cmljdGVkT25GaWVsZF07XG4gICAgICBpZiAocmVsYXRlZEZpZWxkKSB7XG4gICAgICAgIHJlbGF0ZWRGaWVsZC5lZGl0aW9uRmluaXNoLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnVwZGF0ZVJlc3RyaWN0ZWRWaXNpYmlsaXR5KGV2ZW50KSk7XG4gICAgICAgIHJlbGF0ZWRGaWVsZC5lZGl0aW9uUGFydGlhbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy51cGRhdGVSZXN0cmljdGVkVmlzaWJpbGl0eShldmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVJlc3RyaWN0ZWRWaXNpYmlsaXR5KGV2ZW50KSB7XG4gICAgY29uc3QgbmV3VmlzaWJsZSA9IHRoaXMuX2Fic29sdXRlVmlzaWJsZSAmJiB0aGlzLnZpZXdPblN0YXRlKHRoaXMuX2Zvcm1TdGF0ZSk7XG4gICAgKHRoaXMuX3Zpc2libGUgIT09IG5ld1Zpc2libGUpICYmIHRoaXMuc2V0VmlzaWJpbGl0eShuZXdWaXNpYmxlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpZXdPblN0YXRlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY3Rpb25WaXNpYmxlID0gKHRoaXMudmlzaWJsZVN0YXRlcyAmJiBzdGF0ZSkgPyB0aGlzLnZpc2libGVTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpIDogZmFsc2U7XG4gICAgaWYgKGFjdGlvblZpc2libGUgJiYgdGhpcy5fZm9ybSAmJiB0aGlzLl9yZXN0cmljdGVkT25GaWVsZCkge1xuICAgICAgY29uc3QgcmVsYXRlZEZpZWxkID0gdGhpcy5fZm9ybS5maWVsZHM/Llt0aGlzLl9yZXN0cmljdGVkT25GaWVsZF07XG4gICAgICBpZiAocmVsYXRlZEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSByZWxhdGVkRmllbGQudmFsdWU7XG4gICAgICAgIGlmICgodGhpcy5fcmVzdHJpY3RlZE9uT3BlcmF0b3IgPT09ICc9PScgJiYgZmllbGRWYWx1ZSAhPT0gdGhpcy5fcmVzdHJpY3RlZE9uVmFsdWUpXG4gICAgICAgICAgfHwgKHRoaXMuX3Jlc3RyaWN0ZWRPbk9wZXJhdG9yID09PSAnIT0nICYmIGZpZWxkVmFsdWUgPT09IHRoaXMuX3Jlc3RyaWN0ZWRPblZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWN0aW9uVmlzaWJsZTtcbiAgfVxuXG4gIGdldCBhY3Rpb25BY3RpdmF0ZWQoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25BY3RpdmF0ZWQ7IH1cblxuICBub3RpZnlBY3RpdmF0aW9uKCkgeyB0aGlzLl9hY3Rpb25BY3RpdmF0ZWQubmV4dCh0aGlzLl9hY3Rpb25Db2RlKTsgfVxuXG4gIHVwZGF0ZUZyb21TZXJ2ZXIocmVjZWl2ZWRBY3Rpb24pIHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiByZWNlaXZlZEFjdGlvbikge1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gJ2FjdGlvbkNvZGUnICYmIHByb3BlcnR5TmFtZSAhPT0gJ2FjdGlvbklkJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IHJlY2VpdmVkQWN0aW9uW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3IgYWN0dWFsaXphbmRvIGxhIHByb3BpZWRhZCAke3Byb3BlcnR5TmFtZX0gZGUgbGEgYWNjacOzbiAke3RoaXMuYWN0aW9uQ29kZX0uICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19