From 57d9a748158e6b78b7f93424c4a9f45dde21377c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20R=C3=B6mer?= <30902964+manuelroemer@users.noreply.github.com> Date: Thu, 27 Jan 2022 14:02:02 +0100 Subject: [PATCH] Make the offline visit type UUID configurable. --- .../openmrs-esm-patient-chart-schema.ts | 14 ++++++++++++-- packages/esm-patient-chart-app/src/offline.ts | 14 +++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/esm-patient-chart-app/src/config-schemas/openmrs-esm-patient-chart-schema.ts b/packages/esm-patient-chart-app/src/config-schemas/openmrs-esm-patient-chart-schema.ts index 75a5b66ab0..4233ea900c 100644 --- a/packages/esm-patient-chart-app/src/config-schemas/openmrs-esm-patient-chart-schema.ts +++ b/packages/esm-patient-chart-app/src/config-schemas/openmrs-esm-patient-chart-schema.ts @@ -1,3 +1,13 @@ -export const esmPatientChartSchema = {}; +import { Type } from '@openmrs/esm-framework'; -export interface ChartConfig {} +export const esmPatientChartSchema = { + offlineVisitTypeUuid: { + _type: Type.UUID, + _description: 'The UUID of the visit type to be used for the automatically created offline visits.', + _default: 'a22733fa-3501-4020-a520-da024eeff088', + }, +}; + +export interface ChartConfig { + offlineVisitTypeUuid: string; +} diff --git a/packages/esm-patient-chart-app/src/offline.ts b/packages/esm-patient-chart-app/src/offline.ts index 68f7b8a412..5b5feddbd6 100644 --- a/packages/esm-patient-chart-app/src/offline.ts +++ b/packages/esm-patient-chart-app/src/offline.ts @@ -11,10 +11,11 @@ import { subscribeConnectivity, QueueItemDescriptor, usePatient, + useConfig, } from '@openmrs/esm-framework'; import { useEffect } from 'react'; import { v4 } from 'uuid'; -import useSWR, { SWRResponse } from 'swr'; +import useSWR from 'swr'; const visitSyncType = 'visit'; const patientRegistrationSyncType = 'patient-registration'; @@ -54,11 +55,14 @@ export function setupOfflineVisitsSync() { } export function useOfflineVisitForPatient(patientUuid?: string, location?: string) { + const { offlineVisitTypeUuid } = useConfig(); + useEffect(() => { return subscribeConnectivity(async ({ online }) => { if (!online && patientUuid && location) { const offlineVisit = - (await getOfflineVisitForPatient(patientUuid)) ?? (await createOfflineVisitForPatient(patientUuid, location)); + (await getOfflineVisitForPatient(patientUuid)) ?? + (await createOfflineVisitForPatient(patientUuid, location, offlineVisitTypeUuid)); getStartedVisit.next({ mode: VisitMode.NEWVISIT, @@ -67,7 +71,7 @@ export function useOfflineVisitForPatient(patientUuid?: string, location?: strin }); } }); - }, [patientUuid, location]); + }, [patientUuid, location, offlineVisitTypeUuid]); } async function getOfflineVisitForPatient(patientUuid: string) { @@ -75,7 +79,7 @@ async function getOfflineVisitForPatient(patientUuid: string) { return offlineVisits.find((visit) => visit.patient === patientUuid); } -async function createOfflineVisitForPatient(patientUuid: string, location: string) { +async function createOfflineVisitForPatient(patientUuid: string, location: string, offlineVisitTypeUuid: string) { const patientRegistrationSyncItems = await getSynchronizationItems(patientRegistrationSyncType); const isVisitForOfflineRegisteredPatient = patientRegistrationSyncItems.some( (item) => item.fhirPatient.id === patientUuid, @@ -86,7 +90,7 @@ async function createOfflineVisitForPatient(patientUuid: string, location: strin patient: patientUuid, startDatetime: new Date(), location, - visitType: 'a22733fa-3501-4020-a520-da024eeff088', // "Offline" visit type UUID. + visitType: offlineVisitTypeUuid, }; const descriptor: QueueItemDescriptor = {