11// Prefetch Template Source:
22// https://build.fhir.org/ig/HL7/davinci-crd/hooks.html#prefetch
33export 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+ }
0 commit comments