From 7a1f90a061cd9472b22423b025e9ddd1b7f85b9f Mon Sep 17 00:00:00 2001 From: Samuel Male Date: Mon, 21 Aug 2023 10:00:27 +0300 Subject: [PATCH] Ability to configure post submission actions (#109) --- src/api/types.ts | 15 +++++++++------ src/hooks/usePostSubmissionAction.tsx | 17 ++++++++++------- src/ohri-form.component.tsx | 15 +++++++++------ 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/api/types.ts b/src/api/types.ts index 93e8fdf3..c79b4760 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -67,7 +67,7 @@ export interface OHRIFormSchema { readonly?: string | boolean; inlineRendering?: 'single-line' | 'multiline' | 'automatic'; markdown?: any; - postSubmissionActions?: Array; + postSubmissionActions?: Array<{ actionId: string; config?: Record }>; formOptions?: { usePreviousValueDisabled: boolean; }; @@ -185,11 +185,14 @@ export type RenderType = | 'fixed-value'; export interface PostSubmissionAction { - applyAction(formSession: { - patient: fhir.Patient; - encounters: Array; - sessionMode: SessionMode; - }): void; + applyAction( + formSession: { + patient: fhir.Patient; + encounters: Array; + sessionMode: SessionMode; + }, + config?: Record, + ): void; } // OpenMRS Type Definitions diff --git a/src/hooks/usePostSubmissionAction.tsx b/src/hooks/usePostSubmissionAction.tsx index 9f4e22db..74323fc5 100644 --- a/src/hooks/usePostSubmissionAction.tsx +++ b/src/hooks/usePostSubmissionAction.tsx @@ -2,17 +2,20 @@ import { useEffect, useState } from 'react'; import { PostSubmissionAction } from '../api/types'; import { getPostSubmissionActionById } from '../registry/registry'; -export function usePostSubmissionAction(actionIds: Array) { - const [actions, setActions] = useState>([]); +export function usePostSubmissionAction(actionRefs: Array<{ actionId: string; config?: Record }>) { + const [actions, setActions] = useState }>>([]); useEffect(() => { - let actionArray = []; - if (actionIds) { - actionIds.map(actionId => { - getPostSubmissionActionById(actionId)?.then(response => actionArray.push(response.default)); + const actionArray = []; + if (actionRefs?.length) { + actionRefs.map(ref => { + const actionId = typeof ref === 'string' ? ref : ref.actionId; + getPostSubmissionActionById(actionId)?.then(response => + actionArray.push({ postAction: response.default, config: ref.config }), + ); }); } setActions(actionArray); - }, [actionIds]); + }, [actionRefs]); return actions; } diff --git a/src/ohri-form.component.tsx b/src/ohri-form.component.tsx index 3995fbde..0048ccc7 100644 --- a/src/ohri-form.component.tsx +++ b/src/ohri-form.component.tsx @@ -201,12 +201,15 @@ const OHRIForm: React.FC = ({ // Post Submission Actions if (postSubmissionHandlers) { await Promise.all( - postSubmissionHandlers.map(handler => { - handler.applyAction({ - patient, - sessionMode, - encounters: results.map(encounterResult => encounterResult.data), - }); + postSubmissionHandlers.map(({ postAction, config }) => { + postAction.applyAction( + { + patient, + sessionMode, + encounters: results.map(encounterResult => encounterResult.data), + }, + config, + ); }), ); }