@medplum/react-hooks 5.1.37 → 5.1.38

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