@openmrs/esm-form-engine-lib 4.2.2-pre.2543 → 4.2.2-pre.2550

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.
Files changed (35) hide show
  1. package/dist/components/processor-factory/form-processor-factory.component.js +111 -39
  2. package/dist/components/renderer/custom-hooks-renderer.component.js +2 -2
  3. package/dist/form-engine.component.js +5 -3
  4. package/dist/hooks/useFormFieldValidators.js +22 -12
  5. package/dist/hooks/useFormFieldValueAdapters.js +22 -15
  6. package/dist/hooks/useFormFields.js +35 -42
  7. package/dist/hooks/useInitialValues.js +12 -5
  8. package/dist/hooks/useProcessorDependencies.js +2 -2
  9. package/dist/processors/encounter/encounter-form-processor.js +10 -20
  10. package/dist/processors/form-processor.js +4 -1
  11. package/dist/src/components/processor-factory/form-processor-factory.component.d.ts.map +1 -1
  12. package/dist/src/components/renderer/custom-hooks-renderer.component.d.ts +5 -8
  13. package/dist/src/components/renderer/custom-hooks-renderer.component.d.ts.map +1 -1
  14. package/dist/src/form-engine.component.d.ts.map +1 -1
  15. package/dist/src/hooks/useFormFieldValidators.d.ts.map +1 -1
  16. package/dist/src/hooks/useFormFieldValueAdapters.d.ts.map +1 -1
  17. package/dist/src/hooks/useFormFields.d.ts.map +1 -1
  18. package/dist/src/hooks/useInitialValues.d.ts.map +1 -1
  19. package/dist/src/hooks/useProcessorDependencies.d.ts +2 -2
  20. package/dist/src/hooks/useProcessorDependencies.d.ts.map +1 -1
  21. package/dist/src/processors/encounter/encounter-form-processor.d.ts +6 -3
  22. package/dist/src/processors/encounter/encounter-form-processor.d.ts.map +1 -1
  23. package/dist/src/processors/form-processor.d.ts +21 -2
  24. package/dist/src/processors/form-processor.d.ts.map +1 -1
  25. package/package.json +1 -1
  26. package/src/components/processor-factory/form-processor-factory.component.tsx +151 -35
  27. package/src/components/renderer/custom-hooks-renderer.component.tsx +6 -8
  28. package/src/form-engine.component.tsx +6 -4
  29. package/src/hooks/useFormFieldValidators.ts +23 -13
  30. package/src/hooks/useFormFieldValueAdapters.ts +23 -16
  31. package/src/hooks/useFormFields.ts +28 -41
  32. package/src/hooks/useInitialValues.ts +15 -6
  33. package/src/hooks/useProcessorDependencies.ts +4 -3
  34. package/src/processors/encounter/encounter-form-processor.ts +12 -21
  35. package/src/processors/form-processor.ts +27 -1
@@ -24,7 +24,7 @@ import {
24
24
  import { evaluateAsyncExpression, type FormNode } from '../../utils/expression-runner';
25
25
  import { extractErrorMessagesFromResponse } from '../../utils/error-utils';
26
26
  import { extractObsValueAndDisplay } from '../../utils/form-helper';
27
- import { FormProcessor } from '../form-processor';
27
+ import { FormProcessor, type FormProcessorContextSetters } from '../form-processor';
28
28
  import { getPreviousEncounter, saveEncounter } from '../../api';
29
29
  import { hasRendering } from '../../utils/common-utils';
30
30
  import { isEmpty } from '../../validators/form-validator';
@@ -50,19 +50,14 @@ function useCustomHooks(context: Partial<FormProcessorContextProps>) {
50
50
  data: { encounter, patientPrograms, encounterRole },
51
51
  isLoading,
52
52
  error: null,
53
- updateContext: (setContext: React.Dispatch<React.SetStateAction<FormProcessorContextProps>>) => {
54
- setContext((context) => {
55
- context.processor.domainObjectValue = encounter as OpenmrsResource;
56
- return {
57
- ...context,
58
- domainObjectValue: encounter as OpenmrsResource,
59
- customDependencies: {
60
- ...context.customDependencies,
61
- patientPrograms: patientPrograms,
62
- defaultEncounterRole: encounterRole,
63
- },
64
- };
65
- });
53
+ updateContext: (_setContext, { setDomainObjectValue, setCustomDependencies }) => {
54
+ context.processor.domainObjectValue = encounter as OpenmrsResource;
55
+ setDomainObjectValue(encounter as OpenmrsResource);
56
+ setCustomDependencies((previous) => ({
57
+ ...previous,
58
+ patientPrograms: patientPrograms,
59
+ defaultEncounterRole: encounterRole,
60
+ }));
66
61
  },
67
62
  };
68
63
  }
@@ -344,16 +339,12 @@ export class EncounterFormProcessor extends FormProcessor {
344
339
 
345
340
  async loadDependencies(
346
341
  context: FormContextProps,
347
- setContext: React.Dispatch<React.SetStateAction<FormProcessorContextProps>>,
342
+ _setContext: React.Dispatch<React.SetStateAction<FormProcessorContextProps>>,
343
+ { setPreviousDomainObjectValue }: FormProcessorContextSetters,
348
344
  ) {
349
345
  const { patient, formJson } = context;
350
346
  const encounter = await getPreviousEncounter(patient?.id, formJson.encounterType);
351
- setContext((context) => {
352
- return {
353
- ...context,
354
- previousDomainObjectValue: encounter,
355
- };
356
- });
347
+ setPreviousDomainObjectValue(encounter);
357
348
  return context;
358
349
  }
359
350
 
@@ -4,12 +4,33 @@ import { type ValueAndDisplay, type FormField, type FormSchema, type FormProcess
4
4
 
5
5
  export type FormProcessorConstructor = new (...args: ConstructorParameters<typeof FormProcessor>) => FormProcessor;
6
6
 
7
+ /**
8
+ * The setters a processor uses to feed its results back into the processor context. These are the
9
+ * only three properties it can change; the rest of {@link FormProcessorContextProps} is derived by
10
+ * the FormProcessorFactory. They supersede the `setContext` passed alongside them, which is shaped
11
+ * like a `setState` over the whole context but silently discards everything else.
12
+ */
13
+ export interface FormProcessorContextSetters {
14
+ setDomainObjectValue: (value: OpenmrsResource) => void;
15
+ setPreviousDomainObjectValue: (value: OpenmrsResource) => void;
16
+ setCustomDependencies: (
17
+ dependencies: Record<string, any> | ((previous: Record<string, any>) => Record<string, any>),
18
+ ) => void;
19
+ }
20
+
7
21
  export type GetCustomHooksResponse = {
8
22
  useCustomHooks: (context: Partial<FormProcessorContextProps>) => {
9
23
  data: any;
10
24
  isLoading: boolean;
11
25
  error: any;
12
- updateContext: (setContext: React.Dispatch<React.SetStateAction<FormProcessorContextProps>>) => void;
26
+ /**
27
+ * Called once the hook has finished loading, to merge its results into the processor context.
28
+ * `setContext` is deprecated; use `setters`.
29
+ */
30
+ updateContext: (
31
+ setContext: React.Dispatch<React.SetStateAction<FormProcessorContextProps>>,
32
+ setters: FormProcessorContextSetters,
33
+ ) => void;
13
34
  };
14
35
  };
15
36
 
@@ -25,9 +46,14 @@ export abstract class FormProcessor {
25
46
  return this.domainObjectValue;
26
47
  }
27
48
 
49
+ /**
50
+ * Loads whatever the processor needs before the form can render, merging the results into the
51
+ * processor context. `setContext` is deprecated; use `setters`.
52
+ */
28
53
  async loadDependencies(
29
54
  context: Partial<FormProcessorContextProps>,
30
55
  setContext: React.Dispatch<React.SetStateAction<FormProcessorContextProps>>,
56
+ setters: FormProcessorContextSetters,
31
57
  ): Promise<Record<string, any>> {
32
58
  return Promise.resolve({});
33
59
  }