@openmrs/esm-form-engine-lib 2.1.0-pre.1594 → 2.1.0-pre.1597
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.
package/package.json
CHANGED
@@ -64,30 +64,40 @@ function evaluateFieldDependents(field: FormField, values: any, context: FormCon
|
|
64
64
|
mode: sessionMode,
|
65
65
|
patient,
|
66
66
|
},
|
67
|
-
)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
67
|
+
)
|
68
|
+
.then((result) => {
|
69
|
+
setValue(dependent.id, result);
|
70
|
+
// validate calculated value
|
71
|
+
const { errors, warnings } = validateFieldValue(dependent, result, context.formFieldValidators, {
|
72
|
+
formFields,
|
73
|
+
values,
|
74
|
+
expressionContext: { patient, mode: sessionMode },
|
75
|
+
});
|
76
|
+
if (!dependent.meta.submission) {
|
77
|
+
dependent.meta.submission = {};
|
78
|
+
}
|
79
|
+
dependent.meta.submission.errors = errors;
|
80
|
+
dependent.meta.submission.warnings = warnings;
|
81
|
+
if (!errors.length) {
|
82
|
+
context.formFieldAdapters[dependent.type].transformFieldValue(dependent, result, context);
|
83
|
+
}
|
84
|
+
updateFormField(dependent);
|
85
|
+
})
|
86
|
+
.catch((error) => {
|
87
|
+
reportError(error, 'Error evaluating calculate expression');
|
74
88
|
});
|
75
|
-
if (!dependent.meta.submission) {
|
76
|
-
dependent.meta.submission = {};
|
77
|
-
}
|
78
|
-
dependent.meta.submission.errors = errors;
|
79
|
-
dependent.meta.submission.warnings = warnings;
|
80
|
-
if (!errors.length) {
|
81
|
-
context.formFieldAdapters[dependent.type].transformFieldValue(dependent, result, context);
|
82
|
-
}
|
83
|
-
updateFormField(dependent);
|
84
|
-
}).catch((error) => {
|
85
|
-
reportError(error, 'Error evaluating calculate expression');
|
86
|
-
});
|
87
89
|
}
|
88
90
|
// evaluate hide
|
89
91
|
if (dependent.hide) {
|
90
|
-
evaluateHide(
|
92
|
+
evaluateHide(
|
93
|
+
{ value: dependent, type: 'field' },
|
94
|
+
formFields,
|
95
|
+
values,
|
96
|
+
sessionMode,
|
97
|
+
patient,
|
98
|
+
evaluateExpression,
|
99
|
+
updateFormField,
|
100
|
+
);
|
91
101
|
}
|
92
102
|
// evaluate disabled
|
93
103
|
if (typeof dependent.disabled === 'object' && dependent.disabled.disableWhenExpression) {
|
@@ -197,12 +207,8 @@ function evaluateFieldDependents(field: FormField, values: any, context: FormCon
|
|
197
207
|
sessionMode,
|
198
208
|
patient,
|
199
209
|
evaluateExpression,
|
210
|
+
updateFormField,
|
200
211
|
);
|
201
|
-
if (isTrue(section.isHidden)) {
|
202
|
-
section.questions.forEach((field) => {
|
203
|
-
field.isParentHidden = true;
|
204
|
-
});
|
205
|
-
}
|
206
212
|
shouldUpdateForm = true;
|
207
213
|
break;
|
208
214
|
}
|
@@ -214,14 +220,15 @@ function evaluateFieldDependents(field: FormField, values: any, context: FormCon
|
|
214
220
|
if (field.pageDependents) {
|
215
221
|
field.pageDependents?.forEach((dep) => {
|
216
222
|
const dependent = formJson.pages.find((f) => f.label == dep);
|
217
|
-
evaluateHide(
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
223
|
+
evaluateHide(
|
224
|
+
{ value: dependent, type: 'page' },
|
225
|
+
formFields,
|
226
|
+
values,
|
227
|
+
sessionMode,
|
228
|
+
patient,
|
229
|
+
evaluateExpression,
|
230
|
+
updateFormField,
|
231
|
+
);
|
225
232
|
shouldUpdateForm = true;
|
226
233
|
});
|
227
234
|
}
|
@@ -109,7 +109,15 @@ export const useEvaluateFormFieldExpressions = (
|
|
109
109
|
useEffect(() => {
|
110
110
|
factoryContext.formJson?.pages?.forEach((page) => {
|
111
111
|
if (page.hide) {
|
112
|
-
evaluateHide(
|
112
|
+
evaluateHide(
|
113
|
+
{ value: page, type: 'page' },
|
114
|
+
formFields,
|
115
|
+
formValues,
|
116
|
+
sessionMode,
|
117
|
+
patient,
|
118
|
+
evaluateExpression,
|
119
|
+
null,
|
120
|
+
);
|
113
121
|
} else {
|
114
122
|
page.isHidden = false;
|
115
123
|
}
|
@@ -122,6 +130,7 @@ export const useEvaluateFormFieldExpressions = (
|
|
122
130
|
sessionMode,
|
123
131
|
patient,
|
124
132
|
evaluateExpression,
|
133
|
+
null,
|
125
134
|
);
|
126
135
|
} else {
|
127
136
|
section.isHidden = false;
|
package/src/utils/form-helper.ts
CHANGED
@@ -95,6 +95,7 @@ export function evaluateHide(
|
|
95
95
|
sessionMode: SessionMode,
|
96
96
|
patient: fhir.Patient,
|
97
97
|
expressionRunnerFn,
|
98
|
+
updateFormFieldFn: (field: FormField) => void | null,
|
98
99
|
) {
|
99
100
|
const { value, type } = node;
|
100
101
|
const isHidden = expressionRunnerFn(value['hide']?.hideWhenExpression, node, allFields, allValues, {
|
@@ -111,15 +112,20 @@ export function evaluateHide(
|
|
111
112
|
if (type == 'page') {
|
112
113
|
value['sections'].forEach((section) => {
|
113
114
|
section.isParentHidden = isHidden;
|
114
|
-
cascadeVisibilityToChildFields(isHidden, section, allFields);
|
115
|
+
cascadeVisibilityToChildFields(isHidden, section, allFields, updateFormFieldFn);
|
115
116
|
});
|
116
117
|
}
|
117
118
|
if (type == 'section') {
|
118
|
-
cascadeVisibilityToChildFields(isHidden, value, allFields);
|
119
|
+
cascadeVisibilityToChildFields(isHidden, value, allFields, updateFormFieldFn);
|
119
120
|
}
|
120
121
|
}
|
121
122
|
|
122
|
-
function cascadeVisibilityToChildFields(
|
123
|
+
function cascadeVisibilityToChildFields(
|
124
|
+
visibility: boolean,
|
125
|
+
section: FormSection,
|
126
|
+
allFields: Array<FormField>,
|
127
|
+
updateFormFieldFn: (field: FormField) => void,
|
128
|
+
) {
|
123
129
|
const candidateIds = section.questions.map((q) => q.id);
|
124
130
|
allFields
|
125
131
|
.filter((field) => candidateIds.includes(field.id))
|
@@ -130,6 +136,7 @@ function cascadeVisibilityToChildFields(visibility: boolean, section: FormSectio
|
|
130
136
|
member.isParentHidden = visibility;
|
131
137
|
});
|
132
138
|
}
|
139
|
+
updateFormFieldFn?.(field);
|
133
140
|
});
|
134
141
|
}
|
135
142
|
|