@medplum/react-hooks 5.1.38 → 5.1.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- "use strict";var ve=Object.defineProperty;var Sn=Object.getOwnPropertyDescriptor;var xn=Object.getOwnPropertyNames;var bn=Object.prototype.hasOwnProperty;var En=(e,t)=>{for(var n in t)ve(e,n,{get:t[n],enumerable:!0})},vn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of xn(t))!bn.call(e,o)&&o!==n&&ve(e,o,{get:()=>t[o],enumerable:!(r=Sn(t,o))||r.enumerable});return e};var Tn=e=>vn(ve({},"__esModule",{value:!0}),e);var St={};En(St,{MEDICATION_CART_ADD_IN_PROGRESS:()=>De,MedplumProvider:()=>Cn,QUESTIONNAIRE_CALCULATED_EXPRESSION_URL:()=>Je,QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL:()=>je,QUESTIONNAIRE_HIDDEN_URL:()=>Ge,QUESTIONNAIRE_ITEM_CONTROL_URL:()=>Oe,QUESTIONNAIRE_OPTION_EXCLUSIVE_URL:()=>He,QUESTIONNAIRE_REFERENCE_FILTER_URL:()=>$e,QUESTIONNAIRE_REFERENCE_RESOURCE_URL:()=>fe,QUESTIONNAIRE_SIGNATURE_REQUIRED_URL:()=>Dn,QUESTIONNAIRE_SIGNATURE_RESPONSE_URL:()=>oe,QUESTIONNAIRE_VALIDATION_ERROR_URL:()=>Be,QuestionnaireItemType:()=>k,applyOptionExclusive:()=>we,buildInitialResponse:()=>ye,buildInitialResponseItem:()=>ge,convertToPCM16:()=>fn,evaluateCalculatedExpressionsInQuestionnaire:()=>he,getItemAnswerOptionValue:()=>me,getItemEnableWhenValueAnswer:()=>rn,getItemInitialValue:()=>et,getNewMultiSelectValues:()=>jn,getQuestionnaireItemReferenceFilter:()=>Yn,getQuestionnaireItemReferenceTargetTypes:()=>Hn,getResponseItemAnswerValue:()=>ke,isChoiceQuestion:()=>Fn,isQuestionEnabled:()=>Ye,isValueSetUnavailableError:()=>dn,reactContext:()=>ue,removeDisabledItems:()=>Re,setQuestionnaireItemReferenceTargetTypes:()=>Xn,typedValueToResponseItem:()=>Ze,useCachedBinaryUrl:()=>Qn,useMedicationCart:()=>On,useMedicationIFrame:()=>wn,useMedicationOrder:()=>An,useMedicationOrderSet:()=>kn,useMedplum:()=>T,useMedplumContext:()=>ce,useMedplumNavigate:()=>Pn,useMedplumProfile:()=>Te,useNotificationCount:()=>qn,usePatientSummaryData:()=>Nn,usePharmacySearch:()=>Ln,usePrevious:()=>Wn,useQuestionnaireForm:()=>nt,useResource:()=>pe,useResourceBoard:()=>st,useResourceModified:()=>at,useSearch:()=>ct,useSearchOne:()=>dt,useSearchResources:()=>lt,useStabilizedCallback:()=>U,useSubscription:()=>Me,useSyncOrderSet:()=>pt,useThreadInbox:()=>ft,useValueSetAvailabilities:()=>pn,useValueSetAvailability:()=>mt,useWhisper:()=>ht});module.exports=Tn(St);var ee=require("react");var ae=require("react"),ue=(0,ae.createContext)(void 0);function ce(){return(0,ae.useContext)(ue)}function T(){return ce().medplum}function Pn(){return ce().navigate}function Te(){return ce().profile}var Ne=require("react/jsx-runtime"),Ue=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function Cn(e){let t=e.medplum,n=e.navigate??Mn,[r,o]=(0,ee.useState)({profile:t.getProfile(),loading:t.isLoading()});(0,ee.useEffect)(()=>{function s(){o(a=>({...a,profile:t.getProfile(),loading:t.isLoading()}))}for(let a of Ue)t.addEventListener(a,s);return()=>{for(let a of Ue)t.removeEventListener(a,s)}},[t]);let i=(0,ee.useMemo)(()=>({...r,medplum:t,navigate:n}),[r,t,n]);return(0,Ne.jsx)(ue.Provider,{value:i,children:e.children})}function Mn(e){window.location.assign(e)}var We=require("react"),Le=new Map,Qn=e=>(0,We.useMemo)(()=>{if(!e)return;let t=e.split("?")[0];if(!t)return e;let n;try{n=new URLSearchParams(new URL(e).search)}catch{return e}if(!n.has("Key-Pair-Id")||!n.has("Signature"))return e;let r=n.get("Expires");if(!r||r.length>13)return e;let o=Le.get(t);if(o){let s=new URLSearchParams(new URL(o).search).get("Expires");if(s&&Number.parseInt(s,10)*1e3-5e3>Date.now())return o}return Le.set(t,e),e},[e]);var Q=require("@medplum/core"),K=require("react");var De="Cannot checkout while a medication is still being added to the cart";function On(){let e=T(),[t,n]=(0,K.useState)(!1),r=(0,K.useRef)(0),o=(0,K.useCallback)(async u=>{r.current+=1,n(!0);try{return await e.createResource(u)}finally{r.current-=1,r.current<=0&&(r.current=0,n(!1))}},[e]),i=(0,K.useCallback)(async u=>{if(r.current>0)throw new Error(De);let f=e.fhirUrl("MedicationRequest","$checkout-medications"),m=(0,Q.medicationCheckoutRequestToParameters)(u),C=await e.post(f,m);if(!(0,Q.isResource)(C,"Parameters"))throw new Error(Q.INVALID_MEDICATION_CHECKOUT_RESPONSE);return(0,Q.parametersToMedicationCheckoutResponse)(C)},[e]),s=(0,K.useCallback)(async u=>{let f=e.fhirUrl("MedicationRequest","$remove-cart-medication"),m=await e.post(f,(0,Q.medicationCartRemoveRequestToParameters)(u));if(!(0,Q.isResource)(m,"Parameters"))throw new Error(Q.INVALID_MEDICATION_CART_RESPONSE);return(0,Q.parametersToMedicationCartManageResponse)(m)},[e]),a=(0,K.useCallback)(async u=>{let f=e.fhirUrl("MedicationRequest","$clear-cart"),m=await e.post(f,(0,Q.medicationCartClearRequestToParameters)(u));if(!(0,Q.isResource)(m,"Parameters"))throw new Error(Q.INVALID_MEDICATION_CART_RESPONSE);return(0,Q.parametersToMedicationCartManageResponse)(m)},[e]);return{addToCart:o,adding:t,checkout:i,removeFromCart:s,clearCart:a}}var Fe=require("@medplum/core"),de=require("react");var ne=require("react");function U(e){let t=(0,ne.useRef)(e);return(0,ne.useInsertionEffect)(()=>{t.current=e},[e]),(0,ne.useCallback)((...n)=>t.current?.(...n),[])}function wn(e,t,n){let r=T(),{patientId:o,organization:i}=n,s=(0,Fe.resolveId)(i),[a,u]=(0,de.useState)(void 0),f=U(n.onPatientSyncSuccess),m=U(n.onIframeSuccess),C=U(n.onError);return(0,de.useEffect)(()=>{let g=!1;return(async()=>{try{if(o){if(await r.executeBot(e,{patientId:o,organizationId:s}),g)return;f()}let h=await r.executeBot(t,{patientId:o,organizationId:s});if(g)return;h.url&&(u(h.url),m(h.url))}catch(h){g||C(h)}})().catch(()=>{}),()=>{g=!0}},[r,e,t,o,s,f,m,C]),a}var W=require("@medplum/core"),Pe=require("react");function An(){let e=T(),t=(0,Pe.useCallback)(async r=>{let o=e.fhirUrl("Medication","$drug-search"),i=(0,W.medicationSearchParamsToParameters)(r),s=await e.post(o,i);if(!(0,W.isResource)(s,"Bundle"))throw new Error(W.INVALID_MEDICATION_SEARCH_RESPONSE);return(s.entry??[]).map(a=>a.resource).filter(a=>(0,W.isResource)(a,"Medication"))},[e]),n=(0,Pe.useCallback)(async r=>{let o=e.fhirUrl("MedicationRequest","$order-medication"),i=(0,W.medicationOrderRequestToParameters)(r),s=await e.post(o,i);if(!(0,W.isResource)(s,"Parameters"))throw new Error(W.INVALID_MEDICATION_ORDER_RESPONSE);return(0,W.parametersToMedicationOrderResponse)(s)},[e]);return{searchMedications:t,orderMedication:n}}var J=require("@medplum/core"),F=require("react");function kn(e){let t=T(),{patientId:n,planDefinitionId:r,vendorOrderSetId:o,appId:i,organization:s}=e,[a,u]=(0,F.useState)(void 0),[f,m]=(0,F.useState)(!1),[C,g]=(0,F.useState)(void 0),E=(0,F.useRef)({patientId:n,planDefinitionId:r,vendorOrderSetId:o,appId:i,organization:s});E.current={patientId:n,planDefinitionId:r,vendorOrderSetId:o,appId:i,organization:s};let h=()=>{let I=E.current;if(!I.patientId)return;let p=!!I.planDefinitionId,S=I.vendorOrderSetId!==void 0&&I.vendorOrderSetId!==null&&I.vendorOrderSetId!=="";return!p&&!S?void 0:{patientId:I.patientId,planDefinitionId:p?I.planDefinitionId:void 0,vendorOrderSetId:S?I.vendorOrderSetId:void 0,appId:I.appId,organization:I.organization}},l=(0,F.useCallback)(async I=>{let p=t.fhirUrl("PlanDefinition","$order-set-url"),S=(0,J.medicationOrderSetRequestToParameters)(I),R=await t.post(p,S);if(!(0,J.isResource)(R,"Parameters"))throw new Error(J.INVALID_MEDICATION_ORDER_SET_RESPONSE);return(0,J.parametersToMedicationOrderSetResponse)(R).launchUrl},[t]),d=(0,F.useRef)(0),v=(0,F.useCallback)(async()=>{let I=h();if(!I)return;d.current+=1;let p=d.current;m(!0),g(void 0);try{let S=await l(I);return d.current!==p?void 0:(u(S),S)}catch(S){d.current===p&&(g(S),u(void 0));return}finally{d.current===p&&m(!1)}},[l]);return(0,F.useEffect)(()=>{let I=!1,p=h();if(!p){d.current+=1,u(void 0),m(!1),g(void 0);return}d.current+=1;let S=d.current;return m(!0),g(void 0),l(p).then(R=>{I||d.current!==S||u(R)}).catch(R=>{I||d.current!==S||(g(R),u(void 0))}).finally(()=>{!I&&d.current===S&&m(!1)}),()=>{I=!0}},[l,n,r,o,i,s]),{url:a,loading:f,error:C,refresh:v}}var te=require("react");var Ce=require("@medplum/core"),O=require("react");var _n=3e3;function Me(e,t,n){let r=T(),o=r.getProject(),a=Te()&&o?.features?.includes("websocket-subscriptions")?e:void 0,[u,f]=(0,O.useState)(),[m,C]=(0,O.useState)(n?.subscriptionProps),g=(0,O.useRef)(!1),E=(0,O.useRef)(void 0),h=(0,O.useRef)(void 0),l=(0,O.useRef)(void 0);(0,O.useEffect)(()=>{(0,Ce.deepEquals)(n?.subscriptionProps,m)||C(n?.subscriptionProps)},[m,n]),(0,O.useEffect)(()=>{E.current&&(clearTimeout(E.current),E.current=void 0);let A=!1;return(h.current!==a||!(0,Ce.deepEquals)(l.current,m))&&(A=!0),A&&h.current&&r.unsubscribeFromCriteria(h.current,l.current),h.current=a,l.current=m,A&&a?f(r.subscribeToCriteria(a,m)):a||f(void 0),()=>{E.current=setTimeout(()=>{a&&r.unsubscribeFromCriteria(a,m)},_n)}},[r,a,m]);let d=U(t),v=U(n?.onWebSocketOpen),I=U(n?.onWebSocketClose),p=U(n?.onSubscriptionConnect),S=U(n?.onSubscriptionDisconnect),R=U(n?.onError),x=(0,O.useCallback)(A=>d(A.payload),[d]),y=(0,O.useCallback)(A=>v(),[v]),w=(0,O.useCallback)(A=>I(),[I]),_=(0,O.useCallback)(A=>p(A.payload.subscriptionId),[p]),L=(0,O.useCallback)(A=>S(A.payload.subscriptionId),[S]),M=(0,O.useCallback)(A=>R(A.payload),[R]);(0,O.useEffect)(()=>u?(g.current||(u.addEventListener("message",x),u.addEventListener("open",y),u.addEventListener("close",w),u.addEventListener("connect",_),u.addEventListener("disconnect",L),u.addEventListener("error",M),g.current=!0),()=>{g.current=!1,u.removeEventListener("message",x),u.removeEventListener("open",y),u.removeEventListener("close",w),u.removeEventListener("connect",_),u.removeEventListener("disconnect",L),u.removeEventListener("error",M)}):()=>{},[u,x,y,w,_,L,M])}function qn(e){let t=T(),{resourceType:n,countCriteria:r,subscriptionCriteria:o}=e,[i,s]=(0,te.useState)(0),a=(0,te.useCallback)(u=>{t.search(n,r,{cache:u}).then(f=>s(f.total)).catch(console.error)},[t,n,r]);return(0,te.useEffect)(()=>{a("default")},[a]),Me(o,()=>{a("reload")}),i}var Ve=require("@medplum/core"),$=require("react");function ze(e){let t=e.patientParam??"subject",n=e.query,r="";if(n!=null)if(typeof n=="string")r=n;else if(n instanceof URLSearchParams){let o=Array.from(n.entries()).sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));r=JSON.stringify(o)}else if(Array.isArray(n)){let o=[...n].sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));r=JSON.stringify(o)}else{let o=Object.entries(n).filter(([,i])=>i!==void 0).sort(([i],[s])=>i.localeCompare(s));r=JSON.stringify(o)}return`${e.resourceType}:${t}:${r}`}function Un(e){return e.map(t=>{let n=t.searches?t.searches.map(ze).join(","):"";return`${t.key}:[${n}]`}).join("|")}function Nn(e,t){let n=T(),[r,o]=(0,$.useState)([]),[i,s]=(0,$.useState)(!0),[a,u]=(0,$.useState)(),f=Un(t),m=(0,$.useMemo)(()=>t,[f]),C=(0,$.useMemo)(()=>(0,Ve.resolveId)(e),[e]);return(0,$.useEffect)(()=>{if(!C)return;let g=!1,E=`Patient/${C}`,h={_count:100,_sort:"-_lastUpdated"},l=[],d=new Map,v=[];for(let p of m){let S=[];if(p.searches)for(let R of p.searches){let x=ze(R),y=d.get(x);y===void 0&&(y=l.length,d.set(x,y),l.push(R)),S.push({searchIdx:y,resultKey:R.key})}v.push(S)}if(l.length===0){o(m.map(()=>({}))),s(!1);return}let I=l.map(p=>{let S=p.patientParam??"subject",R={[S]:E};if(p.query){if(typeof p.query=="string")return n.searchResources(p.resourceType,`${S}=${E}&${p.query}&_count=100&_sort=-_lastUpdated`);if(p.query instanceof URLSearchParams)p.query.forEach((x,y)=>{R[y]=x});else if(Array.isArray(p.query))for(let[x,y]of p.query)R[x]=y;else for(let[x,y]of Object.entries(p.query))y!==void 0&&(R[x]=y)}return n.searchResources(p.resourceType,{...h,...R})});return s(!0),u(void 0),Promise.allSettled(I).then(p=>{if(g)return;let S=v.map(x=>{let y={};for(let{searchIdx:w,resultKey:_}of x){let L=p[w];y[_]=L.status==="fulfilled"?L.value:[]}return y});o(S),s(!1);let R=p.filter(x=>x.status==="rejected");if(R.length>0){console.error("Some patient summary searches failed:",R.map(y=>y.reason));let x=R[0].reason;u(x instanceof Error?x:new Error(String(x)))}}).catch(p=>{g||(u(p instanceof Error?p:new Error(String(p))),s(!1))}),()=>{g=!0}},[n,C,m]),{sectionData:r,loading:i,error:a}}var X=require("@medplum/core"),Qe=require("react");function Ln(e,t){let n=T(),r=(0,Qe.useCallback)(async i=>{let{organization:s,...a}=i,u=(0,X.resolveId)(s),f=await n.executeBot(e,u?{...a,organizationId:u}:a);if(!(0,X.isOrganizationArray)(f))throw new Error("Invalid response from pharmacy search");return f},[n,e]),o=(0,Qe.useCallback)(async i=>{let s=await n.executeBot(t,{patientId:i.patientId,pharmacy:i.pharmacy,setAsPrimary:i.setAsPrimary,organizationId:(0,X.resolveId)(i.organization)});if(!(0,X.isAddPharmacyResponse)(s))throw new Error("Invalid response from add pharmacy bot");return s},[n,t]);return{searchPharmacies:r,addToFavorites:o}}var le=require("react");function Wn(e){let t=(0,le.useRef)(void 0);return(0,le.useEffect)(()=>{t.current=e}),t.current}var on=require("@medplum/core"),Ie=require("react");var B=require("@medplum/core"),re=require("react");function pe(e,t){let n=T(),[r,o]=(0,re.useState)(()=>Ke(n,e)),i=(0,re.useCallback)(s=>{(0,B.deepEquals)(s,r)||o(s)},[r]);return(0,re.useEffect)(()=>{let s=!0,a=Ke(n,e);return!a&&(0,B.isReference)(e)?n.readReference(e).then(u=>{s&&i(u)}).catch(u=>{s&&(i(void 0),t&&t((0,B.normalizeOperationOutcome)(u)))}):i(a),(()=>s=!1)},[n,e,i,t]),r}function Ke(e,t){if(t){if((0,B.isResource)(t))return t;if((0,B.isReference)(t))return e.getCachedReference(t)}}var c=require("@medplum/core"),k={group:"group",display:"display",question:"question",boolean:"boolean",decimal:"decimal",integer:"integer",date:"date",dateTime:"dateTime",time:"time",string:"string",text:"text",url:"url",choice:"choice",openChoice:"open-choice",attachment:"attachment",reference:"reference",quantity:"quantity"},Oe=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-itemControl`,$e=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceFilter`,fe=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,Be=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,je=`${c.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,Je=`${c.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,Dn=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-signatureRequired`,oe=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaireresponse-signature`,Ge=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-hidden`,He=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-optionExclusive`;function Fn(e){return e.type==="choice"||e.type==="open-choice"}function Re(e,t){return{...t,item:Xe(e.item,t.item,t)}}function Xe(e,t,n){if(!t)return t;let r=[];for(let o of t){let i=e?.find(s=>s.linkId===o.linkId);i&&!Ye(i,n)||(i?.item&&o.item?r.push({...o,item:Xe(i.item,o.item,n)}):r.push(o))}return r}function Ye(e,t){if((0,c.getExtension)(e,Ge)?.valueBoolean===!0)return!1;let r=Vn(e,t);return r!==void 0?r:zn(e,t)}function Vn(e,t){let n=(0,c.getExtension)(e,je);if(t&&n){let r=n.valueExpression?.expression;if(r){let o=(0,c.toTypedValue)(t),i=(0,c.evalFhirPathTyped)(r,[o],{"%resource":o});return(0,c.toJsBoolean)(i)}}}function zn(e,t){if(!e.enableWhen)return!0;let n=e.enableBehavior??"any";for(let r of e.enableWhen){let o=en(t?.item,r.question);if(r.operator==="exists"&&!r.answerBoolean&&!o?.length){if(n==="any")return!0;continue}let{anyMatch:i,allMatch:s}=Gn(r,o,n);if(n==="any"&&i)return!0;if(n==="all"&&!s)return!1}return n!=="any"}function he(e,t,n=t.item){for(let r of e){let o=n?.find(i=>i.linkId===r.linkId);o&&(Kn(t,r,o),r.item&&o.item&&he(r.item,t,o.item))}}function Kn(e,t,n){try{let r=Bn(t,e);if(!r)return;let o=Ze(t,r);if(!o)return;n.answer=[o]}catch(r){n.extension=[{url:Be,valueString:`Expression evaluation failed: ${(0,c.normalizeErrorString)(r)}`}]}}var $n={[k.boolean]:[c.PropertyType.boolean],[k.date]:[c.PropertyType.date],[k.dateTime]:[c.PropertyType.dateTime],[k.time]:[c.PropertyType.time],[k.url]:[c.PropertyType.string,c.PropertyType.uri,c.PropertyType.url],[k.attachment]:[c.PropertyType.Attachment],[k.reference]:[c.PropertyType.Reference],[k.quantity]:[c.PropertyType.Quantity],[k.decimal]:[c.PropertyType.decimal,c.PropertyType.integer],[k.integer]:[c.PropertyType.decimal,c.PropertyType.integer]};function Ze(e,t){if(!e.type)return;if(e.type===k.choice||e.type===k.openChoice)return{[`value${(0,c.capitalize)(t.type)}`]:t.value};if(e.type===k.string||e.type===k.text)return typeof t.value=="string"?{valueString:t.value}:void 0;if($n[e.type]?.includes(t.type))return{[`value${(0,c.capitalize)(e.type)}`]:t.value}}function Bn(e,t){if(!t)return;let n=(0,c.getExtension)(e,Je);if(n){let r=n.valueExpression?.expression;if(r){let o=(0,c.toTypedValue)(t),i=(0,c.evalFhirPathTyped)(r,[o],{"%resource":o});return i.length!==0?i[0]:void 0}}}function jn(e,t,n){let r=[];for(let o of e){let i=n.answerOption?.find(s=>(0,c.typedValueToString)(me(s))===o);if(i){let s=me(i);s&&r.push({[t]:s.value})}}return r}function we(e,t,n){let r=[];for(let a of e.answerOption??c.EMPTY)if((0,c.getExtension)(a,He)?.valueBoolean===!0){let u=me(a);u?.value!==void 0&&r.push(u)}if(r.length===0)return n;let o=a=>{let u=ke(a);return!!u&&r.some(f=>(0,c.deepEquals)(f,u))},i=n.filter(a=>!t?.some(u=>(0,c.deepEquals)(u,a))),s=i.find(o);return s?[s]:i.some(a=>!o(a))?n.filter(a=>!o(a)):n}function en(e,t){for(let n of e??c.EMPTY){if(n.linkId===t)return n.answer;if(n.item){let r=en(n.item,t);if(r)return r}}}function Jn(e,t,n){if(n==="exists")return!!e===t.value;if(e){let r=n==="="||n==="!="?n?.replace("=","~"):n,[{value:o}]=(0,c.evalFhirPathTyped)(`%actualAnswer ${r} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":t});return o}else return!1}function Gn(e,t,n){let r=t||[],o=rn(e),i=!1,s=!0;for(let a of r){let u=ke(a),{operator:f}=e;if(Jn(u,o,f)?i=!0:s=!1,n==="any"&&i)break}return{anyMatch:i,allMatch:s}}function Hn(e){let t=(0,c.getExtension)(e,fe);if(t){if(t.valueCode!==void 0)return[t.valueCode];if(t.valueCodeableConcept)return t.valueCodeableConcept?.coding?.map(n=>n.code)}}function Xn(e,t){let n=(0,c.deepClone)(e),r=(0,c.getExtension)(n,fe);return!t||t.length===0?(r&&(n.extension=n.extension?.filter(o=>o!==r)),n):(r||(n.extension??=[],r={url:fe},n.extension.push(r)),t.length===1?(r.valueCode=t[0],delete r.valueCodeableConcept):(r.valueCodeableConcept={coding:t.map(o=>({code:o}))},delete r.valueCode),n)}function Yn(e,t,n){let r=(0,c.getExtension)(e,$e);if(!r?.valueString)return;let o=r.valueString;t?.reference&&(o=o.replaceAll("$subj",t.reference)),n?.reference&&(o=o.replaceAll("$encounter",n.reference));let i={},s=o.split("&");for(let a of s){let[u,f]=(0,c.splitN)(a,"=",2);i[u]=f}return i}function ye(e,t){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??(0,c.getReferenceString)(e),item:Ae(e.item,t?.item),status:"in-progress"}}function Ae(e,t){let n;for(let r of e??c.EMPTY){if(r.type===k.display)continue;let o=t?.filter(i=>i.linkId===r.linkId);if(o?.length)for(let i of o)i.id=i.id??nn(),i.text=i.text??r.text,i.item=Ae(r.item,i.item),i.answer=tn(r,i),n=(0,c.append)(n,i);else n=(0,c.append)(n,ge(r))}return n}function ge(e){return{id:nn(),linkId:e.linkId,text:e.text,item:Ae(e.item,void 0),answer:tn(e)}}var Zn=1;function nn(){return"id-"+Zn++}function tn(e,t){if(!(e.type===k.display||e.type===k.group)){if(t?.answer&&t.answer.length>0)return t.answer;if(e.initial&&e.initial.length>0)return e.initial.map(n=>({...n}));if(e.answerOption)return e.answerOption.filter(n=>n.initialSelected).map(n=>({...n,initialSelected:void 0}))}}function et(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:e},"value")}function me(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:e},"value")}function rn(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function ke(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function nt(e){let t=pe(e.questionnaire),n=pe(e.defaultValue),[,r]=(0,Ie.useReducer)(h=>h+1,0),o=(0,Ie.useRef)({activePage:0});if(!o.current.questionnaire&&t&&(o.current.questionnaire=t,o.current.pages=e.disablePagination?void 0:tt(t)),t&&e.defaultValue&&n&&!o.current.questionnaireResponse&&(o.current.questionnaireResponse=ye(t,n),E()),t&&!e.defaultValue&&!o.current.questionnaireResponse&&(o.current.questionnaireResponse=ye(t),E()),!o.current.questionnaire||!o.current.questionnaireResponse)return{loading:!0};function i(h,l){let d=o.current.questionnaireResponse;for(let v of h)d=d?.item?.find(I=>v.id?I.id===v.id:I.linkId===v.linkId);return l&&(d=d?.item?.find(v=>v.linkId===l.linkId)),d}function s(){o.current.activePage=(o.current.activePage??0)+1,r()}function a(){o.current.activePage=(o.current.activePage??0)-1,r()}function u(h,l){let d=i(h);d&&(d.item??=[],d.item.push(ge(l)),E())}function f(h,l){let d=i(h,l);d&&(d.answer??=[],d.answer.push({}),E())}function m(h,l,d){let v=i(h,l);v&&(v.answer=we(l,v.answer,d),E())}function C(h){let l=o.current.questionnaireResponse;l&&(h?(l.extension=l.extension??[],l.extension=l.extension.filter(d=>d.url!==oe),l.extension.push({url:oe,valueSignature:h})):l.extension=l.extension?.filter(d=>d.url!==oe),E())}function g(){let h=o.current.questionnaire;if(h?.item){let l=o.current.questionnaireResponse;he(h.item,l)}}function E(){let h=o.current.questionnaireResponse,l=o.current.questionnaire;!h||!l||(g(),r(),e.onChange?.(Re(l,h)))}return{loading:!1,pagination:!!o.current.pages,questionnaire:o.current.questionnaire,questionnaireResponse:Re(o.current.questionnaire,o.current.questionnaireResponse),subject:e.subject,encounter:e.encounter,activePage:o.current.activePage,pages:o.current.pages,items:rt(o.current.questionnaire,o.current.pages,o.current.activePage),responseItems:ot(o.current.questionnaireResponse,o.current.pages,o.current.activePage),onNextPage:s,onPrevPage:a,onAddGroup:u,onAddAnswer:f,onChangeAnswer:m,onChangeSignature:C}}function tt(e){if(!(!e?.item||(0,on.getExtension)(e?.item?.[0],Oe)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((n,r)=>({linkId:n.linkId,title:n.text??`Page ${r+1}`,group:n}))}function rt(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}function ot(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}var Se=require("@medplum/core"),N=require("react");async function it(e,t){let n=await t.search(e.resourceType,(0,Se.formatSearchQuery)({...e,total:e.total??"accurate"}),{cache:"no-cache"});return{items:n.entry?.map(o=>o.resource).filter(o=>o!==void 0)??[],total:n.total}}function st(e){let{search:t,selectedId:n,loadItems:r,reloadKey:o}=e,i=T(),[s,a]=(0,N.useState)(t),[u,f]=(0,N.useState)([]),[m,C]=(0,N.useState)(),[g,E]=(0,N.useState)(!0),[h,l]=(0,N.useState)(),d=(0,N.useRef)(e),v=(0,N.useRef)(0),I=(0,N.useRef)(0),p=s.resourceType,S=n!==void 0&&h?.id===n?h.value:void 0;(0,Se.deepEquals)(t,s)||(a(t),E(!0));let R=(0,N.useCallback)(async()=>{let x=++v.current;try{let y=r?await r(s,i):await it(s,i);if(x!==v.current)return;f(y.items),C(y.total),d.current.onLoad?.(y.items,y.total)}catch(y){x===v.current&&(d.current.onError??console.error)(y)}finally{x===v.current&&E(!1)}},[s,r,i]);return(0,N.useEffect)(()=>{d.current=e}),(0,N.useEffect)(()=>{R().catch(console.error)},[R,o]),(0,N.useEffect)(()=>{let x=++I.current;if(!n)return;let y=async()=>{let _=d.current.resolveSelected;if(_)return _(n,u,i);let L=u.find(M=>M.id===n);return L!==void 0?L:await i.readResource(p,n)};(async()=>{try{let _=await y();x===I.current&&l({id:n,value:_})}catch(_){x===I.current&&(l({id:n,value:void 0}),(d.current.onError??console.error)(_))}})().catch(console.error)},[n,u,i,p]),{items:u,total:m,loading:g,selected:S,search:s,refresh:R}}var sn=require("react");function at(e,t){let n=T(),r=U(t),o=Array.isArray(e)?e.join(","):e;(0,sn.useEffect)(()=>{let i=new Set(o.split(",")),s=a=>{i.has(a.payload.resourceType)&&r(a.payload)};return n.addEventListener("resourceModified",s),()=>n.removeEventListener("resourceModified",s)},[n,o,r])}var xe=require("@medplum/core"),G=require("react");var V=require("react");function an(e,t,n={leading:!1}){let[r,o]=(0,V.useState)(e),i=(0,V.useRef)(!1),s=(0,V.useRef)(void 0),a=(0,V.useRef)(!1),u=(0,V.useCallback)(()=>window.clearTimeout(s.current),[]);return(0,V.useEffect)(()=>{i.current&&(!a.current&&n.leading?(a.current=!0,o(e),s.current=setTimeout(()=>{a.current=!1},t)):(u(),s.current=setTimeout(()=>{a.current=!1,o(e)},t)))},[e,n.leading,t,u]),(0,V.useEffect)(()=>(i.current=!0,u),[u]),[r,u]}var ut=250;function ct(e,t,n){return _e("search",e,t,n)}function dt(e,t,n){return _e("searchOne",e,t,n)}function lt(e,t,n){return _e("searchResources",e,t,n)}function _e(e,t,n,r){let o=T(),[i,s]=(0,G.useState)(!1),[a,u]=(0,G.useState)(),[f,m]=(0,G.useState)(),C=o.fhirSearchUrl(t,n).toString(),g=(0,G.useMemo)(()=>({resourceType:t,query:n}),[C]),E=r?.enabled??!0,h=r?.debounceMs??ut,[l]=an(g,h,{leading:!0});return(0,G.useEffect)(()=>{if(!E)return()=>{};s(!0);let d=!0;return o[e](l.resourceType,l.query).then(v=>{d&&(s(!1),u(v),m(xe.allOk))}).catch(v=>{d&&(s(!1),u(void 0),m((0,xe.normalizeOperationOutcome)(v)))}),()=>{d=!1}},[o,e,l,E]),[a,i,f]}var H=require("@medplum/core"),un=require("react");function pt(){let e=T();return(0,un.useCallback)(async(t,n)=>{try{let r=await e.post(e.fhirUrl("PlanDefinition","$sync-orderset"),{planDefinitionId:t,organizationId:(0,H.resolveId)(n)});return(0,H.isResource)(r,"Parameters")?(0,H.parametersToOrderSetSyncResponse)(r):void 0}catch(r){if(r instanceof H.OperationOutcomeError&&r.outcome.issue?.some(o=>o.code==="not-found"))return;throw r}},[e])}var cn=require("@medplum/core"),D=require("react");function ft({query:e,threadId:t}){let n=T(),[r,o]=(0,D.useState)(!0),[i,s]=(0,D.useState)(e),[a,u]=(0,D.useState)([]),[f,m]=(0,D.useState)(void 0),[C,g]=(0,D.useState)(null),[E,h]=(0,D.useState)(void 0),l=(0,D.useRef)(0);e!==i&&(s(e),o(!0));let d=(0,D.useCallback)(async()=>{let p=++l.current;try{let S=new URLSearchParams(i);S.append("identifier:not","http://medplum.com/ai-message|"),S.append("part-of:missing","true"),S.append("_has:Communication:part-of:_id:not","null");let R=await n.search("Communication",S.toString(),{cache:"no-cache"});if(p!==l.current)return;let x=R.entry?.map(M=>M.resource).filter(M=>M!==void 0)||[];if(R.total!==void 0&&h(R.total),x.length===0){u([]);return}let w=`
1
+ "use strict";var Ce=Object.defineProperty;var Sn=Object.getOwnPropertyDescriptor;var xn=Object.getOwnPropertyNames;var bn=Object.prototype.hasOwnProperty;var En=(e,t)=>{for(var n in t)Ce(e,n,{get:t[n],enumerable:!0})},Cn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of xn(t))!bn.call(e,o)&&o!==n&&Ce(e,o,{get:()=>t[o],enumerable:!(r=Sn(t,o))||r.enumerable});return e};var vn=e=>Cn(Ce({},"__esModule",{value:!0}),e);var St={};En(St,{MEDICATION_CART_ADD_IN_PROGRESS:()=>De,MedplumProvider:()=>Pn,QUESTIONNAIRE_CALCULATED_EXPRESSION_URL:()=>Je,QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL:()=>je,QUESTIONNAIRE_HIDDEN_URL:()=>Ge,QUESTIONNAIRE_ITEM_CONTROL_URL:()=>Oe,QUESTIONNAIRE_OPTION_EXCLUSIVE_URL:()=>He,QUESTIONNAIRE_REFERENCE_FILTER_URL:()=>Ke,QUESTIONNAIRE_REFERENCE_RESOURCE_URL:()=>fe,QUESTIONNAIRE_SIGNATURE_REQUIRED_URL:()=>Dn,QUESTIONNAIRE_SIGNATURE_RESPONSE_URL:()=>oe,QUESTIONNAIRE_VALIDATION_ERROR_URL:()=>Be,QuestionnaireItemType:()=>_,applyOptionExclusive:()=>we,buildInitialResponse:()=>ye,buildInitialResponseItem:()=>ge,convertToPCM16:()=>fn,evaluateCalculatedExpressionsInQuestionnaire:()=>he,getItemAnswerOptionValue:()=>me,getItemEnableWhenValueAnswer:()=>rn,getItemInitialValue:()=>et,getNewMultiSelectValues:()=>jn,getQuestionnaireItemReferenceFilter:()=>Yn,getQuestionnaireItemReferenceTargetTypes:()=>Hn,getResponseItemAnswerValue:()=>_e,isChoiceQuestion:()=>Fn,isQuestionEnabled:()=>Ye,isValueSetUnavailableError:()=>dn,reactContext:()=>ue,removeDisabledItems:()=>Re,setQuestionnaireItemReferenceTargetTypes:()=>Xn,typedValueToResponseItem:()=>Ze,useCachedBinaryUrl:()=>Qn,useMedicationCart:()=>On,useMedicationIFrame:()=>wn,useMedicationOrder:()=>An,useMedicationOrderSet:()=>_n,useMedplum:()=>v,useMedplumContext:()=>ce,useMedplumNavigate:()=>Tn,useMedplumProfile:()=>ve,useNotificationCount:()=>qn,usePatientSummaryData:()=>Nn,usePharmacySearch:()=>Ln,usePrevious:()=>Wn,useQuestionnaireForm:()=>nt,useResource:()=>pe,useResourceBoard:()=>st,useResourceModified:()=>at,useSearch:()=>ct,useSearchOne:()=>dt,useSearchResources:()=>lt,useStabilizedCallback:()=>U,useSubscription:()=>Me,useSyncOrderSet:()=>pt,useThreadInbox:()=>ft,useValueSetAvailabilities:()=>pn,useValueSetAvailability:()=>mt,useWhisper:()=>ht});module.exports=vn(St);var ee=require("react");var ae=require("react"),ue=(0,ae.createContext)(void 0);function ce(){return(0,ae.useContext)(ue)}function v(){return ce().medplum}function Tn(){return ce().navigate}function ve(){return ce().profile}var Ne=require("react/jsx-runtime"),Ue=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function Pn(e){let t=e.medplum,n=e.navigate??Mn,[r,o]=(0,ee.useState)({profile:t.getProfile(),loading:t.isLoading()});(0,ee.useEffect)(()=>{function s(){o(a=>({...a,profile:t.getProfile(),loading:t.isLoading()}))}for(let a of Ue)t.addEventListener(a,s);return()=>{for(let a of Ue)t.removeEventListener(a,s)}},[t]);let i=(0,ee.useMemo)(()=>({...r,medplum:t,navigate:n}),[r,t,n]);return(0,Ne.jsx)(ue.Provider,{value:i,children:e.children})}function Mn(e){window.location.assign(e)}var We=require("react"),Le=new Map,Qn=e=>(0,We.useMemo)(()=>{if(!e)return;let t=e.split("?")[0];if(!t)return e;let n;try{n=new URLSearchParams(new URL(e).search)}catch{return e}if(!n.has("Key-Pair-Id")||!n.has("Signature"))return e;let r=n.get("Expires");if(!r||r.length>13)return e;let o=Le.get(t);if(o){let s=new URLSearchParams(new URL(o).search).get("Expires");if(s&&Number.parseInt(s,10)*1e3-5e3>Date.now())return o}return Le.set(t,e),e},[e]);var M=require("@medplum/core"),z=require("react");var De="Cannot checkout while a medication is still being added to the cart";function On(){let e=v(),[t,n]=(0,z.useState)(!1),r=(0,z.useRef)(0),o=(0,z.useCallback)(async p=>{r.current+=1,n(!0);try{return await e.createResource(p)}finally{r.current-=1,r.current<=0&&(r.current=0,n(!1))}},[e]),i=(0,z.useCallback)(async p=>{if(r.current>0)throw new Error(De);let m=e.fhirUrl("MedicationRequest","$checkout-medications"),T=(0,M.medicationCheckoutRequestToParameters)(p),y=await e.post(m,T);if(!(0,M.isResource)(y,"Parameters"))throw new Error(M.INVALID_MEDICATION_CHECKOUT_RESPONSE);return(0,M.parametersToMedicationCheckoutResponse)(y)},[e]),s=(0,z.useCallback)(async p=>{let m=e.fhirUrl("MedicationRequest","$remove-cart-medication"),T=await e.post(m,(0,M.medicationCartRemoveRequestToParameters)(p));if(!(0,M.isResource)(T,"Parameters"))throw new Error(M.INVALID_MEDICATION_CART_RESPONSE);return(0,M.parametersToMedicationCartManageResponse)(T)},[e]),a=(0,z.useCallback)(async p=>{let m=e.fhirUrl("MedicationRequest","$clear-cart"),T=await e.post(m,(0,M.medicationCartClearRequestToParameters)(p));if(!(0,M.isResource)(T,"Parameters"))throw new Error(M.INVALID_MEDICATION_CART_RESPONSE);return(0,M.parametersToMedicationCartManageResponse)(T)},[e]),u=(0,z.useCallback)(async p=>{let m=e.fhirUrl("MedicationRequest","$get-cart"),T=await e.post(m,(0,M.medicationCartContentsRequestToParameters)(p));if(!(0,M.isResource)(T,"Parameters"))throw new Error(M.INVALID_MEDICATION_CART_CONTENTS_RESPONSE);return(0,M.parametersToMedicationCartContentsResponse)(T)},[e]);return{addToCart:o,adding:t,checkout:i,removeFromCart:s,clearCart:a,getCart:u}}var Fe=require("@medplum/core"),de=require("react");var ne=require("react");function U(e){let t=(0,ne.useRef)(e);return(0,ne.useInsertionEffect)(()=>{t.current=e},[e]),(0,ne.useCallback)((...n)=>t.current?.(...n),[])}function wn(e,t,n){let r=v(),{patientId:o,organization:i}=n,s=(0,Fe.resolveId)(i),[a,u]=(0,de.useState)(void 0),p=U(n.onPatientSyncSuccess),m=U(n.onIframeSuccess),T=U(n.onError);return(0,de.useEffect)(()=>{let y=!1;return(async()=>{try{if(o){if(await r.executeBot(e,{patientId:o,organizationId:s}),y)return;p()}let h=await r.executeBot(t,{patientId:o,organizationId:s});if(y)return;h.url&&(u(h.url),m(h.url))}catch(h){y||T(h)}})().catch(()=>{}),()=>{y=!0}},[r,e,t,o,s,p,m,T]),a}var W=require("@medplum/core"),Te=require("react");function An(){let e=v(),t=(0,Te.useCallback)(async r=>{let o=e.fhirUrl("Medication","$drug-search"),i=(0,W.medicationSearchParamsToParameters)(r),s=await e.post(o,i);if(!(0,W.isResource)(s,"Bundle"))throw new Error(W.INVALID_MEDICATION_SEARCH_RESPONSE);return(s.entry??[]).map(a=>a.resource).filter(a=>(0,W.isResource)(a,"Medication"))},[e]),n=(0,Te.useCallback)(async r=>{let o=e.fhirUrl("MedicationRequest","$order-medication"),i=(0,W.medicationOrderRequestToParameters)(r),s=await e.post(o,i);if(!(0,W.isResource)(s,"Parameters"))throw new Error(W.INVALID_MEDICATION_ORDER_RESPONSE);return(0,W.parametersToMedicationOrderResponse)(s)},[e]);return{searchMedications:t,orderMedication:n}}var J=require("@medplum/core"),F=require("react");function _n(e){let t=v(),{patientId:n,planDefinitionId:r,vendorOrderSetId:o,appId:i,organization:s}=e,[a,u]=(0,F.useState)(void 0),[p,m]=(0,F.useState)(!1),[T,y]=(0,F.useState)(void 0),E=(0,F.useRef)({patientId:n,planDefinitionId:r,vendorOrderSetId:o,appId:i,organization:s});E.current={patientId:n,planDefinitionId:r,vendorOrderSetId:o,appId:i,organization:s};let h=()=>{let I=E.current;if(!I.patientId)return;let f=!!I.planDefinitionId,S=I.vendorOrderSetId!==void 0&&I.vendorOrderSetId!==null&&I.vendorOrderSetId!=="";return!f&&!S?void 0:{patientId:I.patientId,planDefinitionId:f?I.planDefinitionId:void 0,vendorOrderSetId:S?I.vendorOrderSetId:void 0,appId:I.appId,organization:I.organization}},l=(0,F.useCallback)(async I=>{let f=t.fhirUrl("PlanDefinition","$order-set-url"),S=(0,J.medicationOrderSetRequestToParameters)(I),R=await t.post(f,S);if(!(0,J.isResource)(R,"Parameters"))throw new Error(J.INVALID_MEDICATION_ORDER_SET_RESPONSE);return(0,J.parametersToMedicationOrderSetResponse)(R).launchUrl},[t]),d=(0,F.useRef)(0),C=(0,F.useCallback)(async()=>{let I=h();if(!I)return;d.current+=1;let f=d.current;m(!0),y(void 0);try{let S=await l(I);return d.current!==f?void 0:(u(S),S)}catch(S){d.current===f&&(y(S),u(void 0));return}finally{d.current===f&&m(!1)}},[l]);return(0,F.useEffect)(()=>{let I=!1,f=h();if(!f){d.current+=1,u(void 0),m(!1),y(void 0);return}d.current+=1;let S=d.current;return m(!0),y(void 0),l(f).then(R=>{I||d.current!==S||u(R)}).catch(R=>{I||d.current!==S||(y(R),u(void 0))}).finally(()=>{!I&&d.current===S&&m(!1)}),()=>{I=!0}},[l,n,r,o,i,s]),{url:a,loading:p,error:T,refresh:C}}var te=require("react");var Pe=require("@medplum/core"),O=require("react");var kn=3e3;function Me(e,t,n){let r=v(),o=r.getProject(),a=ve()&&o?.features?.includes("websocket-subscriptions")?e:void 0,[u,p]=(0,O.useState)(),[m,T]=(0,O.useState)(n?.subscriptionProps),y=(0,O.useRef)(!1),E=(0,O.useRef)(void 0),h=(0,O.useRef)(void 0),l=(0,O.useRef)(void 0);(0,O.useEffect)(()=>{(0,Pe.deepEquals)(n?.subscriptionProps,m)||T(n?.subscriptionProps)},[m,n]),(0,O.useEffect)(()=>{E.current&&(clearTimeout(E.current),E.current=void 0);let A=!1;return(h.current!==a||!(0,Pe.deepEquals)(l.current,m))&&(A=!0),A&&h.current&&r.unsubscribeFromCriteria(h.current,l.current),h.current=a,l.current=m,A&&a?p(r.subscribeToCriteria(a,m)):a||p(void 0),()=>{E.current=setTimeout(()=>{a&&r.unsubscribeFromCriteria(a,m)},kn)}},[r,a,m]);let d=U(t),C=U(n?.onWebSocketOpen),I=U(n?.onWebSocketClose),f=U(n?.onSubscriptionConnect),S=U(n?.onSubscriptionDisconnect),R=U(n?.onError),x=(0,O.useCallback)(A=>d(A.payload),[d]),g=(0,O.useCallback)(A=>C(),[C]),w=(0,O.useCallback)(A=>I(),[I]),k=(0,O.useCallback)(A=>f(A.payload.subscriptionId),[f]),L=(0,O.useCallback)(A=>S(A.payload.subscriptionId),[S]),Q=(0,O.useCallback)(A=>R(A.payload),[R]);(0,O.useEffect)(()=>u?(y.current||(u.addEventListener("message",x),u.addEventListener("open",g),u.addEventListener("close",w),u.addEventListener("connect",k),u.addEventListener("disconnect",L),u.addEventListener("error",Q),y.current=!0),()=>{y.current=!1,u.removeEventListener("message",x),u.removeEventListener("open",g),u.removeEventListener("close",w),u.removeEventListener("connect",k),u.removeEventListener("disconnect",L),u.removeEventListener("error",Q)}):()=>{},[u,x,g,w,k,L,Q])}function qn(e){let t=v(),{resourceType:n,countCriteria:r,subscriptionCriteria:o}=e,[i,s]=(0,te.useState)(0),a=(0,te.useCallback)(u=>{t.search(n,r,{cache:u}).then(p=>s(p.total)).catch(console.error)},[t,n,r]);return(0,te.useEffect)(()=>{a("default")},[a]),Me(o,()=>{a("reload")}),i}var Ve=require("@medplum/core"),K=require("react");function ze(e){let t=e.patientParam??"subject",n=e.query,r="";if(n!=null)if(typeof n=="string")r=n;else if(n instanceof URLSearchParams){let o=Array.from(n.entries()).sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));r=JSON.stringify(o)}else if(Array.isArray(n)){let o=[...n].sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));r=JSON.stringify(o)}else{let o=Object.entries(n).filter(([,i])=>i!==void 0).sort(([i],[s])=>i.localeCompare(s));r=JSON.stringify(o)}return`${e.resourceType}:${t}:${r}`}function Un(e){return e.map(t=>{let n=t.searches?t.searches.map(ze).join(","):"";return`${t.key}:[${n}]`}).join("|")}function Nn(e,t){let n=v(),[r,o]=(0,K.useState)([]),[i,s]=(0,K.useState)(!0),[a,u]=(0,K.useState)(),p=Un(t),m=(0,K.useMemo)(()=>t,[p]),T=(0,K.useMemo)(()=>(0,Ve.resolveId)(e),[e]);return(0,K.useEffect)(()=>{if(!T)return;let y=!1,E=`Patient/${T}`,h={_count:100,_sort:"-_lastUpdated"},l=[],d=new Map,C=[];for(let f of m){let S=[];if(f.searches)for(let R of f.searches){let x=ze(R),g=d.get(x);g===void 0&&(g=l.length,d.set(x,g),l.push(R)),S.push({searchIdx:g,resultKey:R.key})}C.push(S)}if(l.length===0){o(m.map(()=>({}))),s(!1);return}let I=l.map(f=>{let S=f.patientParam??"subject",R={[S]:E};if(f.query){if(typeof f.query=="string")return n.searchResources(f.resourceType,`${S}=${E}&${f.query}&_count=100&_sort=-_lastUpdated`);if(f.query instanceof URLSearchParams)f.query.forEach((x,g)=>{R[g]=x});else if(Array.isArray(f.query))for(let[x,g]of f.query)R[x]=g;else for(let[x,g]of Object.entries(f.query))g!==void 0&&(R[x]=g)}return n.searchResources(f.resourceType,{...h,...R})});return s(!0),u(void 0),Promise.allSettled(I).then(f=>{if(y)return;let S=C.map(x=>{let g={};for(let{searchIdx:w,resultKey:k}of x){let L=f[w];g[k]=L.status==="fulfilled"?L.value:[]}return g});o(S),s(!1);let R=f.filter(x=>x.status==="rejected");if(R.length>0){console.error("Some patient summary searches failed:",R.map(g=>g.reason));let x=R[0].reason;u(x instanceof Error?x:new Error(String(x)))}}).catch(f=>{y||(u(f instanceof Error?f:new Error(String(f))),s(!1))}),()=>{y=!0}},[n,T,m]),{sectionData:r,loading:i,error:a}}var X=require("@medplum/core"),Qe=require("react");function Ln(e,t){let n=v(),r=(0,Qe.useCallback)(async i=>{let{organization:s,...a}=i,u=(0,X.resolveId)(s),p=await n.executeBot(e,u?{...a,organizationId:u}:a);if(!(0,X.isOrganizationArray)(p))throw new Error("Invalid response from pharmacy search");return p},[n,e]),o=(0,Qe.useCallback)(async i=>{let s=await n.executeBot(t,{patientId:i.patientId,pharmacy:i.pharmacy,setAsPrimary:i.setAsPrimary,organizationId:(0,X.resolveId)(i.organization)});if(!(0,X.isAddPharmacyResponse)(s))throw new Error("Invalid response from add pharmacy bot");return s},[n,t]);return{searchPharmacies:r,addToFavorites:o}}var le=require("react");function Wn(e){let t=(0,le.useRef)(void 0);return(0,le.useEffect)(()=>{t.current=e}),t.current}var on=require("@medplum/core"),Ie=require("react");var B=require("@medplum/core"),re=require("react");function pe(e,t){let n=v(),[r,o]=(0,re.useState)(()=>$e(n,e)),i=(0,re.useCallback)(s=>{(0,B.deepEquals)(s,r)||o(s)},[r]);return(0,re.useEffect)(()=>{let s=!0,a=$e(n,e);return!a&&(0,B.isReference)(e)?n.readReference(e).then(u=>{s&&i(u)}).catch(u=>{s&&(i(void 0),t&&t((0,B.normalizeOperationOutcome)(u)))}):i(a),(()=>s=!1)},[n,e,i,t]),r}function $e(e,t){if(t){if((0,B.isResource)(t))return t;if((0,B.isReference)(t))return e.getCachedReference(t)}}var c=require("@medplum/core"),_={group:"group",display:"display",question:"question",boolean:"boolean",decimal:"decimal",integer:"integer",date:"date",dateTime:"dateTime",time:"time",string:"string",text:"text",url:"url",choice:"choice",openChoice:"open-choice",attachment:"attachment",reference:"reference",quantity:"quantity"},Oe=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-itemControl`,Ke=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceFilter`,fe=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,Be=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,je=`${c.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,Je=`${c.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,Dn=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-signatureRequired`,oe=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaireresponse-signature`,Ge=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-hidden`,He=`${c.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-optionExclusive`;function Fn(e){return e.type==="choice"||e.type==="open-choice"}function Re(e,t){return{...t,item:Xe(e.item,t.item,t)}}function Xe(e,t,n){if(!t)return t;let r=[];for(let o of t){let i=e?.find(s=>s.linkId===o.linkId);i&&!Ye(i,n)||(i?.item&&o.item?r.push({...o,item:Xe(i.item,o.item,n)}):r.push(o))}return r}function Ye(e,t){if((0,c.getExtension)(e,Ge)?.valueBoolean===!0)return!1;let r=Vn(e,t);return r!==void 0?r:zn(e,t)}function Vn(e,t){let n=(0,c.getExtension)(e,je);if(t&&n){let r=n.valueExpression?.expression;if(r){let o=(0,c.toTypedValue)(t),i=(0,c.evalFhirPathTyped)(r,[o],{"%resource":o});return(0,c.toJsBoolean)(i)}}}function zn(e,t){if(!e.enableWhen)return!0;let n=e.enableBehavior??"any";for(let r of e.enableWhen){let o=en(t?.item,r.question);if(r.operator==="exists"&&!r.answerBoolean&&!o?.length){if(n==="any")return!0;continue}let{anyMatch:i,allMatch:s}=Gn(r,o,n);if(n==="any"&&i)return!0;if(n==="all"&&!s)return!1}return n!=="any"}function he(e,t,n=t.item){for(let r of e){let o=n?.find(i=>i.linkId===r.linkId);o&&($n(t,r,o),r.item&&o.item&&he(r.item,t,o.item))}}function $n(e,t,n){try{let r=Bn(t,e);if(!r)return;let o=Ze(t,r);if(!o)return;n.answer=[o]}catch(r){n.extension=[{url:Be,valueString:`Expression evaluation failed: ${(0,c.normalizeErrorString)(r)}`}]}}var Kn={[_.boolean]:[c.PropertyType.boolean],[_.date]:[c.PropertyType.date],[_.dateTime]:[c.PropertyType.dateTime],[_.time]:[c.PropertyType.time],[_.url]:[c.PropertyType.string,c.PropertyType.uri,c.PropertyType.url],[_.attachment]:[c.PropertyType.Attachment],[_.reference]:[c.PropertyType.Reference],[_.quantity]:[c.PropertyType.Quantity],[_.decimal]:[c.PropertyType.decimal,c.PropertyType.integer],[_.integer]:[c.PropertyType.decimal,c.PropertyType.integer]};function Ze(e,t){if(!e.type)return;if(e.type===_.choice||e.type===_.openChoice)return{[`value${(0,c.capitalize)(t.type)}`]:t.value};if(e.type===_.string||e.type===_.text)return typeof t.value=="string"?{valueString:t.value}:void 0;if(Kn[e.type]?.includes(t.type))return{[`value${(0,c.capitalize)(e.type)}`]:t.value}}function Bn(e,t){if(!t)return;let n=(0,c.getExtension)(e,Je);if(n){let r=n.valueExpression?.expression;if(r){let o=(0,c.toTypedValue)(t),i=(0,c.evalFhirPathTyped)(r,[o],{"%resource":o});return i.length!==0?i[0]:void 0}}}function jn(e,t,n){let r=[];for(let o of e){let i=n.answerOption?.find(s=>(0,c.typedValueToString)(me(s))===o);if(i){let s=me(i);s&&r.push({[t]:s.value})}}return r}function we(e,t,n){let r=[];for(let a of e.answerOption??c.EMPTY)if((0,c.getExtension)(a,He)?.valueBoolean===!0){let u=me(a);u?.value!==void 0&&r.push(u)}if(r.length===0)return n;let o=a=>{let u=_e(a);return!!u&&r.some(p=>(0,c.deepEquals)(p,u))},i=n.filter(a=>!t?.some(u=>(0,c.deepEquals)(u,a))),s=i.find(o);return s?[s]:i.some(a=>!o(a))?n.filter(a=>!o(a)):n}function en(e,t){for(let n of e??c.EMPTY){if(n.linkId===t)return n.answer;if(n.item){let r=en(n.item,t);if(r)return r}}}function Jn(e,t,n){if(n==="exists")return!!e===t.value;if(e){let r=n==="="||n==="!="?n?.replace("=","~"):n,[{value:o}]=(0,c.evalFhirPathTyped)(`%actualAnswer ${r} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":t});return o}else return!1}function Gn(e,t,n){let r=t||[],o=rn(e),i=!1,s=!0;for(let a of r){let u=_e(a),{operator:p}=e;if(Jn(u,o,p)?i=!0:s=!1,n==="any"&&i)break}return{anyMatch:i,allMatch:s}}function Hn(e){let t=(0,c.getExtension)(e,fe);if(t){if(t.valueCode!==void 0)return[t.valueCode];if(t.valueCodeableConcept)return t.valueCodeableConcept?.coding?.map(n=>n.code)}}function Xn(e,t){let n=(0,c.deepClone)(e),r=(0,c.getExtension)(n,fe);return!t||t.length===0?(r&&(n.extension=n.extension?.filter(o=>o!==r)),n):(r||(n.extension??=[],r={url:fe},n.extension.push(r)),t.length===1?(r.valueCode=t[0],delete r.valueCodeableConcept):(r.valueCodeableConcept={coding:t.map(o=>({code:o}))},delete r.valueCode),n)}function Yn(e,t,n){let r=(0,c.getExtension)(e,Ke);if(!r?.valueString)return;let o=r.valueString;t?.reference&&(o=o.replaceAll("$subj",t.reference)),n?.reference&&(o=o.replaceAll("$encounter",n.reference));let i={},s=o.split("&");for(let a of s){let[u,p]=(0,c.splitN)(a,"=",2);i[u]=p}return i}function ye(e,t){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??(0,c.getReferenceString)(e),item:Ae(e.item,t?.item),status:"in-progress"}}function Ae(e,t){let n;for(let r of e??c.EMPTY){if(r.type===_.display)continue;let o=t?.filter(i=>i.linkId===r.linkId);if(o?.length)for(let i of o)i.id=i.id??nn(),i.text=i.text??r.text,i.item=Ae(r.item,i.item),i.answer=tn(r,i),n=(0,c.append)(n,i);else n=(0,c.append)(n,ge(r))}return n}function ge(e){return{id:nn(),linkId:e.linkId,text:e.text,item:Ae(e.item,void 0),answer:tn(e)}}var Zn=1;function nn(){return"id-"+Zn++}function tn(e,t){if(!(e.type===_.display||e.type===_.group)){if(t?.answer&&t.answer.length>0)return t.answer;if(e.initial&&e.initial.length>0)return e.initial.map(n=>({...n}));if(e.answerOption)return e.answerOption.filter(n=>n.initialSelected).map(n=>({...n,initialSelected:void 0}))}}function et(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:e},"value")}function me(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:e},"value")}function rn(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function _e(e){return(0,c.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function nt(e){let t=pe(e.questionnaire),n=pe(e.defaultValue),[,r]=(0,Ie.useReducer)(h=>h+1,0),o=(0,Ie.useRef)({activePage:0});if(!o.current.questionnaire&&t&&(o.current.questionnaire=t,o.current.pages=e.disablePagination?void 0:tt(t)),t&&e.defaultValue&&n&&!o.current.questionnaireResponse&&(o.current.questionnaireResponse=ye(t,n),E()),t&&!e.defaultValue&&!o.current.questionnaireResponse&&(o.current.questionnaireResponse=ye(t),E()),!o.current.questionnaire||!o.current.questionnaireResponse)return{loading:!0};function i(h,l){let d=o.current.questionnaireResponse;for(let C of h)d=d?.item?.find(I=>C.id?I.id===C.id:I.linkId===C.linkId);return l&&(d=d?.item?.find(C=>C.linkId===l.linkId)),d}function s(){o.current.activePage=(o.current.activePage??0)+1,r()}function a(){o.current.activePage=(o.current.activePage??0)-1,r()}function u(h,l){let d=i(h);d&&(d.item??=[],d.item.push(ge(l)),E())}function p(h,l){let d=i(h,l);d&&(d.answer??=[],d.answer.push({}),E())}function m(h,l,d){let C=i(h,l);C&&(C.answer=we(l,C.answer,d),E())}function T(h){let l=o.current.questionnaireResponse;l&&(h?(l.extension=l.extension??[],l.extension=l.extension.filter(d=>d.url!==oe),l.extension.push({url:oe,valueSignature:h})):l.extension=l.extension?.filter(d=>d.url!==oe),E())}function y(){let h=o.current.questionnaire;if(h?.item){let l=o.current.questionnaireResponse;he(h.item,l)}}function E(){let h=o.current.questionnaireResponse,l=o.current.questionnaire;!h||!l||(y(),r(),e.onChange?.(Re(l,h)))}return{loading:!1,pagination:!!o.current.pages,questionnaire:o.current.questionnaire,questionnaireResponse:Re(o.current.questionnaire,o.current.questionnaireResponse),subject:e.subject,encounter:e.encounter,activePage:o.current.activePage,pages:o.current.pages,items:rt(o.current.questionnaire,o.current.pages,o.current.activePage),responseItems:ot(o.current.questionnaireResponse,o.current.pages,o.current.activePage),onNextPage:s,onPrevPage:a,onAddGroup:u,onAddAnswer:p,onChangeAnswer:m,onChangeSignature:T}}function tt(e){if(!(!e?.item||(0,on.getExtension)(e?.item?.[0],Oe)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((n,r)=>({linkId:n.linkId,title:n.text??`Page ${r+1}`,group:n}))}function rt(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}function ot(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}var Se=require("@medplum/core"),N=require("react");async function it(e,t){let n=await t.search(e.resourceType,(0,Se.formatSearchQuery)({...e,total:e.total??"accurate"}),{cache:"no-cache"});return{items:n.entry?.map(o=>o.resource).filter(o=>o!==void 0)??[],total:n.total}}function st(e){let{search:t,selectedId:n,loadItems:r,reloadKey:o}=e,i=v(),[s,a]=(0,N.useState)(t),[u,p]=(0,N.useState)([]),[m,T]=(0,N.useState)(),[y,E]=(0,N.useState)(!0),[h,l]=(0,N.useState)(),d=(0,N.useRef)(e),C=(0,N.useRef)(0),I=(0,N.useRef)(0),f=s.resourceType,S=n!==void 0&&h?.id===n?h.value:void 0;(0,Se.deepEquals)(t,s)||(a(t),E(!0));let R=(0,N.useCallback)(async()=>{let x=++C.current;try{let g=r?await r(s,i):await it(s,i);if(x!==C.current)return;p(g.items),T(g.total),d.current.onLoad?.(g.items,g.total)}catch(g){x===C.current&&(d.current.onError??console.error)(g)}finally{x===C.current&&E(!1)}},[s,r,i]);return(0,N.useEffect)(()=>{d.current=e}),(0,N.useEffect)(()=>{R().catch(console.error)},[R,o]),(0,N.useEffect)(()=>{let x=++I.current;if(!n)return;let g=async()=>{let k=d.current.resolveSelected;if(k)return k(n,u,i);let L=u.find(Q=>Q.id===n);return L!==void 0?L:await i.readResource(f,n)};(async()=>{try{let k=await g();x===I.current&&l({id:n,value:k})}catch(k){x===I.current&&(l({id:n,value:void 0}),(d.current.onError??console.error)(k))}})().catch(console.error)},[n,u,i,f]),{items:u,total:m,loading:y,selected:S,search:s,refresh:R}}var sn=require("react");function at(e,t){let n=v(),r=U(t),o=Array.isArray(e)?e.join(","):e;(0,sn.useEffect)(()=>{let i=new Set(o.split(",")),s=a=>{i.has(a.payload.resourceType)&&r(a.payload)};return n.addEventListener("resourceModified",s),()=>n.removeEventListener("resourceModified",s)},[n,o,r])}var xe=require("@medplum/core"),G=require("react");var V=require("react");function an(e,t,n={leading:!1}){let[r,o]=(0,V.useState)(e),i=(0,V.useRef)(!1),s=(0,V.useRef)(void 0),a=(0,V.useRef)(!1),u=(0,V.useCallback)(()=>window.clearTimeout(s.current),[]);return(0,V.useEffect)(()=>{i.current&&(!a.current&&n.leading?(a.current=!0,o(e),s.current=setTimeout(()=>{a.current=!1},t)):(u(),s.current=setTimeout(()=>{a.current=!1,o(e)},t)))},[e,n.leading,t,u]),(0,V.useEffect)(()=>(i.current=!0,u),[u]),[r,u]}var ut=250;function ct(e,t,n){return ke("search",e,t,n)}function dt(e,t,n){return ke("searchOne",e,t,n)}function lt(e,t,n){return ke("searchResources",e,t,n)}function ke(e,t,n,r){let o=v(),[i,s]=(0,G.useState)(!1),[a,u]=(0,G.useState)(),[p,m]=(0,G.useState)(),T=o.fhirSearchUrl(t,n).toString(),y=(0,G.useMemo)(()=>({resourceType:t,query:n}),[T]),E=r?.enabled??!0,h=r?.debounceMs??ut,[l]=an(y,h,{leading:!0});return(0,G.useEffect)(()=>{if(!E)return()=>{};s(!0);let d=!0;return o[e](l.resourceType,l.query).then(C=>{d&&(s(!1),u(C),m(xe.allOk))}).catch(C=>{d&&(s(!1),u(void 0),m((0,xe.normalizeOperationOutcome)(C)))}),()=>{d=!1}},[o,e,l,E]),[a,i,p]}var H=require("@medplum/core"),un=require("react");function pt(){let e=v();return(0,un.useCallback)(async(t,n)=>{try{let r=await e.post(e.fhirUrl("PlanDefinition","$sync-orderset"),{planDefinitionId:t,organizationId:(0,H.resolveId)(n)});return(0,H.isResource)(r,"Parameters")?(0,H.parametersToOrderSetSyncResponse)(r):void 0}catch(r){if(r instanceof H.OperationOutcomeError&&r.outcome.issue?.some(o=>o.code==="not-found"))return;throw r}},[e])}var cn=require("@medplum/core"),D=require("react");function ft({query:e,threadId:t}){let n=v(),[r,o]=(0,D.useState)(!0),[i,s]=(0,D.useState)(e),[a,u]=(0,D.useState)([]),[p,m]=(0,D.useState)(void 0),[T,y]=(0,D.useState)(null),[E,h]=(0,D.useState)(void 0),l=(0,D.useRef)(0);e!==i&&(s(e),o(!0));let d=(0,D.useCallback)(async()=>{let f=++l.current;try{let S=new URLSearchParams(i);S.append("identifier:not","http://medplum.com/ai-message|"),S.append("part-of:missing","true"),S.append("_has:Communication:part-of:_id:not","null");let R=await n.search("Communication",S.toString(),{cache:"no-cache"});if(f!==l.current)return;let x=R.entry?.map(Q=>Q.resource).filter(Q=>Q!==void 0)||[];if(R.total!==void 0&&h(R.total),x.length===0){u([]);return}let w=`
2
2
  query {
3
- ${x.map(M=>{let Z=`thread_${M.id?.replaceAll("-","")||""}`,j=(0,cn.getReferenceString)(M);return`
3
+ ${x.map(Q=>{let Z=`thread_${Q.id?.replaceAll("-","")||""}`,j=(0,cn.getReferenceString)(Q);return`
4
4
  ${Z}: CommunicationList(
5
5
  part_of: "${j}"
6
6
  _sort: "-sent"
@@ -26,9 +26,9 @@
26
26
  `}).join(`
27
27
  `)}
28
28
  }
29
- `,_=await n.graphql(w);if(p!==l.current)return;let L=x.map(M=>{let Z=`thread_${M.id?.replaceAll("-","")||""}`,j=_.data[Z],ie=j&&j.length>0?j[0]:void 0;return[M,ie]}).filter(M=>M[1]!==void 0);u(L)}finally{p===l.current&&o(!1)}},[n,i]);return(0,D.useEffect)(()=>{d().catch(p=>{g(p)})},[d]),(0,D.useEffect)(()=>{(async()=>{if(!t){m(void 0);return}let S=a.find(x=>x[0].id===t);if(S){m(S[0]);return}let R=await n.readResource("Communication",t);if(R.partOf===void 0)m(R);else{let x=R.partOf[0].reference;if(x){let y=await n.readReference({reference:x});m(y)}}})().catch(S=>{g(S)})},[t,a,n]),{loading:r,error:C,threadMessages:a,selectedThread:f,total:E,addThreadMessage:p=>{(async()=>{await d(),u(R=>[[p,void 0],...R])})().catch(R=>g(R))},handleThreadStatusChange:p=>{if(!f)return;(async()=>{let R=await n.updateResource({...f,status:p});m(R),u(x=>x.map(([y,w])=>y.id===R.id?[R,w]:[y,w]))})().catch(R=>g(R))},refreshThreadMessages:d}}var be=require("@medplum/core"),Y=require("react");function dn(e){if(e instanceof be.OperationOutcomeError){let t=(0,be.getStatus)(e.outcome);return t===400||t===404}return!1}var ln=[];function pn(e){let t=T(),n=Array.from(new Set(e.filter(s=>!!s))).sort((s,a)=>s.localeCompare(a)).join(`
29
+ `,k=await n.graphql(w);if(f!==l.current)return;let L=x.map(Q=>{let Z=`thread_${Q.id?.replaceAll("-","")||""}`,j=k.data[Z],ie=j&&j.length>0?j[0]:void 0;return[Q,ie]}).filter(Q=>Q[1]!==void 0);u(L)}finally{f===l.current&&o(!1)}},[n,i]);return(0,D.useEffect)(()=>{d().catch(f=>{y(f)})},[d]),(0,D.useEffect)(()=>{(async()=>{if(!t){m(void 0);return}let S=a.find(x=>x[0].id===t);if(S){m(S[0]);return}let R=await n.readResource("Communication",t);if(R.partOf===void 0)m(R);else{let x=R.partOf[0].reference;if(x){let g=await n.readReference({reference:x});m(g)}}})().catch(S=>{y(S)})},[t,a,n]),{loading:r,error:T,threadMessages:a,selectedThread:p,total:E,addThreadMessage:f=>{(async()=>{await d(),u(R=>[[f,void 0],...R])})().catch(R=>y(R))},handleThreadStatusChange:f=>{if(!p)return;(async()=>{let R=await n.updateResource({...p,status:f});m(R),u(x=>x.map(([g,w])=>g.id===R.id?[R,w]:[g,w]))})().catch(R=>y(R))},refreshThreadMessages:d}}var be=require("@medplum/core"),Y=require("react");function dn(e){if(e instanceof be.OperationOutcomeError){let t=(0,be.getStatus)(e.outcome);return t===400||t===404}return!1}var ln=[];function pn(e){let t=v(),n=Array.from(new Set(e.filter(s=>!!s))).sort((s,a)=>s.localeCompare(a)).join(`
30
30
  `),r=(0,Y.useMemo)(()=>n===""?ln:n.split(`
31
- `),[n]),[o,i]=(0,Y.useState)({});return(0,Y.useEffect)(()=>{if(r.length===0)return;let s=!1,a=new AbortController;for(let u of r)t.valueSetExpand({url:u,count:1},{signal:a.signal}).then(()=>{s||i(f=>({...f,[u]:!0}))}).catch(f=>{s||i(m=>({...m,[u]:!dn(f)}))});return()=>{s=!0,a.abort()}},[t,r]),(0,Y.useMemo)(()=>{let s=[],a=[],u=!1;for(let f of r){let m=o[f];m===void 0?u=!0:m?s.push(f):a.push(f)}return{loading:u,available:s,unavailable:a}},[r,o])}function mt(e){let{loading:t,unavailable:n}=pn(e?[e]:ln);if(!e)return!0;if(!t)return!n.includes(e)}var Ee=require("@medplum/core"),P=require("react");var Rt=12e4;function ht({language:e="en",model:t="gpt-4o-transcribe",onTranscript:n,idleTimeoutMs:r=Rt}){let o=T(),i=U(n),[s,a]=(0,P.useState)("idle"),[u,f]=(0,P.useState)(void 0),[m,C]=(0,P.useState)([]),g=(0,P.useRef)(void 0),E=(0,P.useRef)(void 0),h=(0,P.useRef)(void 0),l=(0,P.useRef)(void 0),d=(0,P.useRef)(!1),v=(0,P.useRef)(!1),I=(0,P.useRef)(!1),[p,S]=(0,P.useState)(!1),R=(0,P.useRef)(!1),x=(0,P.useCallback)(b=>{R.current=b,S(b),E.current?.getAudioTracks().forEach(q=>{q.enabled=!b})},[]),y=(0,P.useCallback)(()=>{I.current=!1,l.current?.disconnect(),l.current=void 0,h.current?.close().catch(()=>{}),h.current=void 0,E.current?.getTracks().forEach(b=>b.stop()),E.current=void 0,R.current=!1,S(!1),a(g.current?"idle":"disconnected")},[]),w=(0,P.useCallback)(()=>{y(),g.current?.close(),g.current=void 0,v.current=!1,a("disconnected")},[y]),_=(0,P.useCallback)(()=>{g.current?.send(JSON.stringify({type:"session.update",session:{type:"transcription",audio:{input:{format:{type:"audio/pcm",rate:24e3},transcription:{model:t,language:e},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},noise_reduction:{type:"near_field"}}}}}))},[e,t]),L=(0,P.useCallback)(async()=>{if(!(l.current||d.current)&&!(!E.current||!g.current)){d.current=!0;try{let b=new AudioContext({sampleRate:24e3});await b.audioWorklet.addModule(It());let q=E.current,z=g.current;if(!I.current||!q||!z){await b.close().catch(()=>{});return}let hn=b.createMediaStreamSource(q),se=new AudioWorkletNode(b,mn);se.port.onmessage=yn=>{if(z.readyState!==WebSocket.OPEN){console.warn("WebSocket is not open. Unable to send audio data.");return}let gn=fn(yn.data),In=btoa(String.fromCharCode(...gn));z.send(JSON.stringify({type:"input_audio_buffer.append",audio:In}))},hn.connect(se),se.connect(b.destination),h.current=b,l.current=se,a("listening")}catch(b){f(b),a("error"),y()}finally{d.current=!1}}},[y]),M=(0,P.useCallback)(()=>{I.current&&v.current&&E.current&&(l.current||(g.current?.send(JSON.stringify({type:"input_audio_buffer.clear"})),L().catch(()=>{})))},[L]),A=(0,P.useCallback)(b=>{switch(b.type){case"session.created":_();break;case"session.updated":v.current=!0,M();break;case"input_audio_buffer.speech_started":a("speech_started");break;case"input_audio_buffer.speech_stopped":a("speech_stopped");break;case"conversation.item.input_audio_transcription.completed":case"input_audio_transcription.completed":if(b.transcript){let q={text:b.transcript,timestamp:new Date().toISOString()};C(z=>[...z,q]),i(b.transcript)}break;case"ai-realtime:connected":console.debug("[useWhisper] upstream connected");break;case"ai-realtime:error":case"error":console.error("[useWhisper] error event",b),f(b),a("error");break;default:console.debug("[useWhisper] unhandled message",b.type,b);break}},[_,M,i]),Z=(0,P.useCallback)(async()=>{a("requesting_microphone");let b=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:24e3,channelCount:1,echoCancellation:!0,noiseSuppression:!0}});return b.getAudioTracks().forEach(q=>{q.enabled=!R.current}),E.current=b,b},[]),j=(0,P.useCallback)(()=>{a("connecting");let b=yt(o.getBaseUrl());console.debug("[useWhisper] connecting to",b);let q=new Ee.ReconnectingWebSocket(b);return g.current=q,q.onopen=()=>{v.current=!1,I.current?a("connected"):a("idle"),q.send(JSON.stringify({type:"ai-realtime:connect",accessToken:o.getAccessToken()}))},q.onmessage=z=>A(JSON.parse(z.data)),q.onerror=z=>{I.current&&(f(z),w(),a("error"))},q.onclose=()=>{v.current=!1,g.current&&a(I.current?"connecting":"idle")},q},[o,A,w]),ie=(0,P.useCallback)(()=>g.current??j(),[j]),Rn=(0,P.useCallback)(async()=>{try{f(void 0),I.current=!0,ie(),await Z(),M()}catch(b){f(b),a("error"),y()}},[Z,ie,y,M]);return(0,P.useEffect)(()=>{if(s!=="idle"||!g.current||!Number.isFinite(r)||r<=0)return;let b=new AbortController;return(0,Ee.sleep)(r,{signal:b.signal}).then(()=>w()).catch(()=>{}),()=>b.abort()},[s,r,w]),(0,P.useEffect)(()=>()=>w(),[w]),{status:s,error:u,transcripts:m,start:Rn,stop:y,isListening:s==="listening"||s==="speech_started"||s==="speech_stopped",muted:p,setMuted:x}}function fn(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++){let r=Math.max(-1,Math.min(1,e[n]));t[n]=r*32767}return new Uint8Array(t.buffer)}function yt(e){let t=new URL("ws/ai-realtime",e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}var mn="medplum-pcm-worklet",gt=`
31
+ `),[n]),[o,i]=(0,Y.useState)({});return(0,Y.useEffect)(()=>{if(r.length===0)return;let s=!1,a=new AbortController;for(let u of r)t.valueSetExpand({url:u,count:1},{signal:a.signal}).then(()=>{s||i(p=>({...p,[u]:!0}))}).catch(p=>{s||i(m=>({...m,[u]:!dn(p)}))});return()=>{s=!0,a.abort()}},[t,r]),(0,Y.useMemo)(()=>{let s=[],a=[],u=!1;for(let p of r){let m=o[p];m===void 0?u=!0:m?s.push(p):a.push(p)}return{loading:u,available:s,unavailable:a}},[r,o])}function mt(e){let{loading:t,unavailable:n}=pn(e?[e]:ln);if(!e)return!0;if(!t)return!n.includes(e)}var Ee=require("@medplum/core"),P=require("react");var Rt=12e4;function ht({language:e="en",model:t="gpt-4o-transcribe",onTranscript:n,idleTimeoutMs:r=Rt}){let o=v(),i=U(n),[s,a]=(0,P.useState)("idle"),[u,p]=(0,P.useState)(void 0),[m,T]=(0,P.useState)([]),y=(0,P.useRef)(void 0),E=(0,P.useRef)(void 0),h=(0,P.useRef)(void 0),l=(0,P.useRef)(void 0),d=(0,P.useRef)(!1),C=(0,P.useRef)(!1),I=(0,P.useRef)(!1),[f,S]=(0,P.useState)(!1),R=(0,P.useRef)(!1),x=(0,P.useCallback)(b=>{R.current=b,S(b),E.current?.getAudioTracks().forEach(q=>{q.enabled=!b})},[]),g=(0,P.useCallback)(()=>{I.current=!1,l.current?.disconnect(),l.current=void 0,h.current?.close().catch(()=>{}),h.current=void 0,E.current?.getTracks().forEach(b=>b.stop()),E.current=void 0,R.current=!1,S(!1),a(y.current?"idle":"disconnected")},[]),w=(0,P.useCallback)(()=>{g(),y.current?.close(),y.current=void 0,C.current=!1,a("disconnected")},[g]),k=(0,P.useCallback)(()=>{y.current?.send(JSON.stringify({type:"session.update",session:{type:"transcription",audio:{input:{format:{type:"audio/pcm",rate:24e3},transcription:{model:t,language:e},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},noise_reduction:{type:"near_field"}}}}}))},[e,t]),L=(0,P.useCallback)(async()=>{if(!(l.current||d.current)&&!(!E.current||!y.current)){d.current=!0;try{let b=new AudioContext({sampleRate:24e3});await b.audioWorklet.addModule(It());let q=E.current,$=y.current;if(!I.current||!q||!$){await b.close().catch(()=>{});return}let hn=b.createMediaStreamSource(q),se=new AudioWorkletNode(b,mn);se.port.onmessage=yn=>{if($.readyState!==WebSocket.OPEN){console.warn("WebSocket is not open. Unable to send audio data.");return}let gn=fn(yn.data),In=btoa(String.fromCharCode(...gn));$.send(JSON.stringify({type:"input_audio_buffer.append",audio:In}))},hn.connect(se),se.connect(b.destination),h.current=b,l.current=se,a("listening")}catch(b){p(b),a("error"),g()}finally{d.current=!1}}},[g]),Q=(0,P.useCallback)(()=>{I.current&&C.current&&E.current&&(l.current||(y.current?.send(JSON.stringify({type:"input_audio_buffer.clear"})),L().catch(()=>{})))},[L]),A=(0,P.useCallback)(b=>{switch(b.type){case"session.created":k();break;case"session.updated":C.current=!0,Q();break;case"input_audio_buffer.speech_started":a("speech_started");break;case"input_audio_buffer.speech_stopped":a("speech_stopped");break;case"conversation.item.input_audio_transcription.completed":case"input_audio_transcription.completed":if(b.transcript){let q={text:b.transcript,timestamp:new Date().toISOString()};T($=>[...$,q]),i(b.transcript)}break;case"ai-realtime:connected":console.debug("[useWhisper] upstream connected");break;case"ai-realtime:error":case"error":console.error("[useWhisper] error event",b),p(b),a("error");break;default:console.debug("[useWhisper] unhandled message",b.type,b);break}},[k,Q,i]),Z=(0,P.useCallback)(async()=>{a("requesting_microphone");let b=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:24e3,channelCount:1,echoCancellation:!0,noiseSuppression:!0}});return b.getAudioTracks().forEach(q=>{q.enabled=!R.current}),E.current=b,b},[]),j=(0,P.useCallback)(()=>{a("connecting");let b=yt(o.getBaseUrl());console.debug("[useWhisper] connecting to",b);let q=new Ee.ReconnectingWebSocket(b);return y.current=q,q.onopen=()=>{C.current=!1,I.current?a("connected"):a("idle"),q.send(JSON.stringify({type:"ai-realtime:connect",accessToken:o.getAccessToken()}))},q.onmessage=$=>A(JSON.parse($.data)),q.onerror=$=>{I.current&&(p($),w(),a("error"))},q.onclose=()=>{C.current=!1,y.current&&a(I.current?"connecting":"idle")},q},[o,A,w]),ie=(0,P.useCallback)(()=>y.current??j(),[j]),Rn=(0,P.useCallback)(async()=>{try{p(void 0),I.current=!0,ie(),await Z(),Q()}catch(b){p(b),a("error"),g()}},[Z,ie,g,Q]);return(0,P.useEffect)(()=>{if(s!=="idle"||!y.current||!Number.isFinite(r)||r<=0)return;let b=new AbortController;return(0,Ee.sleep)(r,{signal:b.signal}).then(()=>w()).catch(()=>{}),()=>b.abort()},[s,r,w]),(0,P.useEffect)(()=>()=>w(),[w]),{status:s,error:u,transcripts:m,start:Rn,stop:g,isListening:s==="listening"||s==="speech_started"||s==="speech_stopped",muted:f,setMuted:x}}function fn(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++){let r=Math.max(-1,Math.min(1,e[n]));t[n]=r*32767}return new Uint8Array(t.buffer)}function yt(e){let t=new URL("ws/ai-realtime",e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}var mn="medplum-pcm-worklet",gt=`
32
32
  class PcmWorkletProcessor extends AudioWorkletProcessor {
33
33
  constructor() {
34
34
  super();