Skip to content

Commit

Permalink
Ability to configure post submission actions (#109)
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelmale authored Aug 21, 2023
1 parent 1046d66 commit 7a1f90a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 19 deletions.
15 changes: 9 additions & 6 deletions src/api/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export interface OHRIFormSchema {
readonly?: string | boolean;
inlineRendering?: 'single-line' | 'multiline' | 'automatic';
markdown?: any;
postSubmissionActions?: Array<string>;
postSubmissionActions?: Array<{ actionId: string; config?: Record<string, any> }>;
formOptions?: {
usePreviousValueDisabled: boolean;
};
Expand Down Expand Up @@ -185,11 +185,14 @@ export type RenderType =
| 'fixed-value';

export interface PostSubmissionAction {
applyAction(formSession: {
patient: fhir.Patient;
encounters: Array<OpenmrsEncounter>;
sessionMode: SessionMode;
}): void;
applyAction(
formSession: {
patient: fhir.Patient;
encounters: Array<OpenmrsEncounter>;
sessionMode: SessionMode;
},
config?: Record<string, any>,
): void;
}

// OpenMRS Type Definitions
Expand Down
17 changes: 10 additions & 7 deletions src/hooks/usePostSubmissionAction.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@ import { useEffect, useState } from 'react';
import { PostSubmissionAction } from '../api/types';
import { getPostSubmissionActionById } from '../registry/registry';

export function usePostSubmissionAction(actionIds: Array<string>) {
const [actions, setActions] = useState<Array<PostSubmissionAction>>([]);
export function usePostSubmissionAction(actionRefs: Array<{ actionId: string; config?: Record<string, any> }>) {
const [actions, setActions] = useState<Array<{ postAction: PostSubmissionAction; config: Record<string, any> }>>([]);
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;
}
15 changes: 9 additions & 6 deletions src/ohri-form.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,15 @@ const OHRIForm: React.FC<OHRIFormProps> = ({
// 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,
);
}),
);
}
Expand Down

0 comments on commit 7a1f90a

Please sign in to comment.