Skip to content

Commit b27affd

Browse files
committed
have the prefetch pharmacy setting work
1 parent 8e2c00f commit b27affd

2 files changed

Lines changed: 27 additions & 27 deletions

File tree

src/PrefetchTemplate.js

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
// Prefetch Template Source:
22
// https://build.fhir.org/ig/HL7/davinci-crd/hooks.html#prefetch
33
export class PrefetchTemplate {
4-
static generatePrefetchMap(includePharmacy = true, pharmacyId = 'pharm0111') {
4+
static generatePrefetchMap(settings = null) {
5+
// If no settings provided, use defaults from data.js
6+
const includePharmacy = settings?.includePharmacyInPreFetch ??
7+
headerDefinitions.includePharmacyInPreFetch.default;
8+
const pharmacyId = 'pharm0111';
9+
510
const prefetchMap = new Map();
611

712
const PRACTITIONER_PREFETCH = new PrefetchTemplate('{{context.userId}}');
8-
913
const REQUEST_PREFETCH = new PrefetchTemplate(
1014
'MedicationRequest/{{context.medications.MedicationRequest.id}}'
1115
);
1216
const PATIENT_PREFETCH = new PrefetchTemplate('{{context.patientId}}');
13-
1417
const ALL_REQUESTS_PREFETCH = new PrefetchTemplate(
1518
'MedicationRequest?subject={{context.patientId}}&_include=MedicationRequest:medication'
1619
);
@@ -21,7 +24,7 @@ export class PrefetchTemplate {
2124
prefetchMap.set('patient', PATIENT_PREFETCH);
2225
prefetchMap.set('medicationRequests', ALL_REQUESTS_PREFETCH);
2326

24-
// Optional pharmacy prefetch (only if explicitly requested and pharmacyId provided)
27+
// Optional pharmacy prefetch based on settings
2528
if (includePharmacy && pharmacyId) {
2629
const PHARMACY_PREFETCH = new PrefetchTemplate(`HealthcareService/${pharmacyId}`);
2730
prefetchMap.set('pharmacy', PHARMACY_PREFETCH);
@@ -55,23 +58,30 @@ export class PrefetchTemplate {
5558
requestBundle,
5659
patientReference,
5760
userReference,
61+
settings = null,
5862
...prefetchKeys
5963
) {
64+
const prefetchMap = PrefetchTemplate.generatePrefetchMap(settings);
65+
const paramElementMap = PrefetchTemplate.generateParamElementMap();
66+
6067
var resolvedQueries = new Map();
6168
for (var i = 0; i < prefetchKeys.length; i++) {
6269
var prefetchKey = prefetchKeys[i];
70+
if (!prefetchKey || !prefetchMap.has(prefetchKey)) continue;
6371
var query = prefetchMap.get(prefetchKey).getQuery();
6472
// Regex source: https://regexland.com/all-between-specified-characters/
6573
var parametersToFill = query.match(/(?<={{).*?(?=}})/gs);
6674
var resolvedQuery = query.slice();
75+
6776
if (parametersToFill) {
6877
for (var j = 0; j < parametersToFill.length; j++) {
6978
var unresolvedParameter = parametersToFill[j];
7079
var resolvedParameter;
7180
if (requestBundle) {
7281
resolvedParameter = PrefetchTemplate.resolveParameter(
7382
unresolvedParameter,
74-
requestBundle
83+
requestBundle,
84+
paramElementMap
7585
);
7686
} else {
7787
if (unresolvedParameter === 'context.patientId') {
@@ -108,8 +118,9 @@ export class PrefetchTemplate {
108118
}
109119
}
110120

111-
static resolveParameter(unresolvedParameter, requestBundle) {
121+
static resolveParameter(unresolvedParameter, requestBundle, paramElementMap) {
112122
const paramField = paramElementMap.get(unresolvedParameter);
123+
if (!paramField) return null;
113124
const resolvedParameter = PrefetchTemplate.getProp(requestBundle, paramField);
114125
return resolvedParameter;
115126
}
@@ -123,7 +134,4 @@ export class PrefetchTemplate {
123134
getQuery() {
124135
return this.query;
125136
}
126-
}
127-
128-
const prefetchMap = PrefetchTemplate.generatePrefetchMap();
129-
const paramElementMap = PrefetchTemplate.generateParamElementMap();
137+
}

src/components/SMARTBox/PatientBox.jsx

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { useEffect, useState } from 'react';
1+
import { useEffect, useState, useContext } from 'react';
22
import { getAge, getDrugCodeFromMedicationRequest } from '../../util/fhir';
3+
import { SettingsContext } from '../../containers/ContextProvider/SettingsProvider';
34
import './smart.css';
45
import { Button } from '@mui/material';
56
import Tooltip from '@mui/material/Tooltip';
@@ -18,6 +19,8 @@ import {
1819
} from '../../util/util';
1920

2021
const PatientBox = props => {
22+
const [globalState] = useContext(SettingsContext);
23+
2124
const [state, setState] = useState({
2225
request: '',
2326
deviceRequests: {},
@@ -167,27 +170,16 @@ const PatientBox = props => {
167170
const fetchResources = queries => {
168171
let requests = [];
169172
callback('prefetchCompleted', false);
170-
console.log('🔍 PHARMACY DEBUG - All queries to fetch:', queries); // ADD THIS
171-
172173
queries.forEach((query, queryKey) => {
173-
console.log(`🔍 PHARMACY DEBUG - Processing ${queryKey}: ${query}`); // ADD THIS
174174
const urlQuery = '/' + query;
175175
requests.push(
176176
client
177177
.request(urlQuery)
178178
.then(response => {
179-
console.log(`🔍 PHARMACY DEBUG - SUCCESS for ${queryKey}:`, response); // ADD THIS
180179
return response;
181180
})
182-
.catch(error => {
183-
console.log(`🔍 PHARMACY DEBUG - FAILED for ${queryKey}:`, error); // ADD THIS
184-
return null; // Return null so Promise.all doesn't fail completely
185-
})
186181
.then(resource => {
187-
if (resource) {
188-
console.log(`🔍 PHARMACY DEBUG - Calling callbackMap for ${queryKey}`); // ADD THIS
189-
callbackMap('prefetchedResources', queryKey, resource);
190-
}
182+
callbackMap('prefetchedResources', queryKey, resource);
191183
})
192184
);
193185
});
@@ -212,11 +204,11 @@ const PatientBox = props => {
212204
request,
213205
patientReference,
214206
userReference,
215-
'pharm0111',
207+
globalState,
216208
'request',
217209
'patient',
218210
'practitioner',
219-
'pharmacy'
211+
globalState.includePharmacyInPreFetch ? 'pharmacy' : undefined
220212
);
221213
fetchResources(queries);
222214

@@ -230,11 +222,11 @@ const PatientBox = props => {
230222
request,
231223
patientReference,
232224
userReference,
233-
'pharm0111',
225+
globalState,
234226
'patient',
235227
'practitioner',
236228
'medicationRequests',
237-
'pharmacy'
229+
globalState.includePharmacyInPreFetch ? 'pharmacy' : undefined
238230
);
239231
fetchResources(queries);
240232
}

0 commit comments

Comments
 (0)