@medplum/react-hooks 5.1.8 → 5.1.10

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.
@@ -249,6 +249,22 @@ export declare type QuestionnaireItemType = (typeof QuestionnaireItemType)[keyof
249
249
 
250
250
  export declare const reactContext: Context<MedplumContext | undefined>;
251
251
 
252
+ /**
253
+ * Returns a copy of the questionnaire response with response items for disabled
254
+ * questionnaire items removed.
255
+ *
256
+ * Per the FHIR R4 spec, a QuestionnaireResponse should not include answers for items
257
+ * whose `enableWhen` evaluates to false or whose `questionnaire-hidden` extension is
258
+ * true. The form preserves answers in local state so that re-enabling an item
259
+ * restores its previous value, so callers must strip disabled items before
260
+ * persisting or transmitting the response.
261
+ *
262
+ * @param questionnaire - The questionnaire defining the items.
263
+ * @param response - The current questionnaire response.
264
+ * @returns A new questionnaire response with disabled items removed.
265
+ */
266
+ export declare function removeDisabledItems(questionnaire: Questionnaire, response: QuestionnaireResponse): QuestionnaireResponse;
267
+
252
268
  export declare type SearchOptions = {
253
269
  debounceMs?: number;
254
270
  enabled?: boolean;
@@ -249,6 +249,22 @@ export declare type QuestionnaireItemType = (typeof QuestionnaireItemType)[keyof
249
249
 
250
250
  export declare const reactContext: Context<MedplumContext | undefined>;
251
251
 
252
+ /**
253
+ * Returns a copy of the questionnaire response with response items for disabled
254
+ * questionnaire items removed.
255
+ *
256
+ * Per the FHIR R4 spec, a QuestionnaireResponse should not include answers for items
257
+ * whose `enableWhen` evaluates to false or whose `questionnaire-hidden` extension is
258
+ * true. The form preserves answers in local state so that re-enabling an item
259
+ * restores its previous value, so callers must strip disabled items before
260
+ * persisting or transmitting the response.
261
+ *
262
+ * @param questionnaire - The questionnaire defining the items.
263
+ * @param response - The current questionnaire response.
264
+ * @returns A new questionnaire response with disabled items removed.
265
+ */
266
+ export declare function removeDisabledItems(questionnaire: Questionnaire, response: QuestionnaireResponse): QuestionnaireResponse;
267
+
252
268
  export declare type SearchOptions = {
253
269
  debounceMs?: number;
254
270
  enabled?: boolean;
@@ -1,6 +1,6 @@
1
- import{useEffect as be,useMemo as ve,useState as Te}from"react";import{createContext as Ee,useContext as Qe}from"react";var F=Ee(void 0);function q(){return Qe(F)}function b(){return q().medplum}function Nn(){return q().navigate}function Un(){return q().profile}import{jsx as Ce}from"react/jsx-runtime";var Y=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function qn(e){let t=e.medplum,n=e.navigate??Pe,[o,r]=Te({profile:t.getProfile(),loading:t.isLoading()});be(()=>{function s(){r(c=>({...c,profile:t.getProfile(),loading:t.isLoading()}))}for(let c of Y)t.addEventListener(c,s);return()=>{for(let c of Y)t.removeEventListener(c,s)}},[t]);let i=ve(()=>({...o,medplum:t,navigate:n}),[o,t,n]);return Ce(F.Provider,{value:i,children:e.children})}function Pe(e){window.location.assign(e)}import{useMemo as Oe}from"react";var Z=new Map,Wn=e=>Oe(()=>{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 o=n.get("Expires");if(!o||o.length>13)return e;let r=Z.get(t);if(r){let s=new URLSearchParams(new URL(r).search).get("Expires");if(s&&Number.parseInt(s,10)*1e3-5e3>Date.now())return r}return Z.set(t,e),e},[e]);import{useEffect as ee,useRef as k,useState as we}from"react";function jn(e,t,n){let o=b(),{patientId:r,onPatientSyncSuccess:i,onIframeSuccess:s,onError:c}=n,[d,S]=we(void 0),h=k(i),Q=k(s),v=k(c);return ee(()=>{h.current=i,Q.current=s,v.current=c},[i,s,c]),ee(()=>{let R=!1;return(async()=>{try{if(r){if(await o.executeBot(e,{patientId:r}),R)return;h.current?.()}let u=await o.executeBot(t,{patientId:r});if(R)return;u.url&&(S(u.url),Q.current?.(u.url))}catch(u){R||v.current?.(u)}})().catch(()=>{}),()=>{R=!0}},[o,e,t,r]),d}import{useCallback as Me,useEffect as Ne,useState as Ue}from"react";import{deepEquals as ne}from"@medplum/core";import{useCallback as A,useEffect as V,useRef as C,useState as te}from"react";var Ae=3e3;function re(e,t,n){let o=b(),[r,i]=te(),[s,c]=te(n?.subscriptionProps),d=C(!1),S=C(void 0),h=C(void 0),Q=C(void 0),v=C(t);v.current=t;let R=C(n?.onWebSocketOpen);R.current=n?.onWebSocketOpen;let m=C(n?.onWebSocketClose);m.current=n?.onWebSocketClose;let u=C(n?.onSubscriptionConnect);u.current=n?.onSubscriptionConnect;let a=C(n?.onSubscriptionDisconnect);a.current=n?.onSubscriptionDisconnect;let l=C(n?.onError);l.current=n?.onError,V(()=>{ne(n?.subscriptionProps,s)||c(n?.subscriptionProps)},[s,n]),V(()=>{S.current&&(clearTimeout(S.current),S.current=void 0);let T=!1;return(h.current!==e||!ne(Q.current,s))&&(T=!0),T&&h.current&&o.unsubscribeFromCriteria(h.current,Q.current),h.current=e,Q.current=s,T&&e?i(o.subscribeToCriteria(e,s)):e||i(void 0),()=>{S.current=setTimeout(()=>{i(void 0),e&&o.unsubscribeFromCriteria(e,s)},Ae)}},[o,e,s]);let y=A(T=>{v.current?.(T.payload)},[]),p=A(()=>{R.current?.()},[]),x=A(()=>{m.current?.()},[]),I=A(T=>{u.current?.(T.payload.subscriptionId)},[]),g=A(T=>{a.current?.(T.payload.subscriptionId)},[]),f=A(T=>{l.current?.(T.payload)},[]);V(()=>r?(d.current||(r.addEventListener("message",y),r.addEventListener("open",p),r.addEventListener("close",x),r.addEventListener("connect",I),r.addEventListener("disconnect",g),r.addEventListener("error",f),d.current=!0),()=>{d.current=!1,r.removeEventListener("message",y),r.removeEventListener("open",p),r.removeEventListener("close",x),r.removeEventListener("connect",I),r.removeEventListener("disconnect",g),r.removeEventListener("error",f)}):()=>{},[r,y,p,x,I,g,f])}function nt(e){let t=b(),{resourceType:n,countCriteria:o,subscriptionCriteria:r}=e,[i,s]=Ue(0),c=Me(d=>{t.search(n,o,{cache:d}).then(S=>s(S.total)).catch(console.error)},[t,n,o]);return Ne(()=>{c("default")},[c]),re(r,()=>{c("reload")}),i}import{resolveId as Le}from"@medplum/core";import{useEffect as _e,useMemo as oe,useState as D}from"react";function ie(e){let t=e.patientParam??"subject",n=e.query,o="";if(n!=null)if(typeof n=="string")o=n;else if(n instanceof URLSearchParams){let r=Array.from(n.entries()).sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else if(Array.isArray(n)){let r=[...n].sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else{let r=Object.entries(n).filter(([,i])=>i!==void 0).sort(([i],[s])=>i.localeCompare(s));o=JSON.stringify(r)}return`${e.resourceType}:${t}:${o}`}function Fe(e){return e.map(t=>{let n=t.searches?t.searches.map(ie).join(","):"";return`${t.key}:[${n}]`}).join("|")}function st(e,t){let n=b(),[o,r]=D([]),[i,s]=D(!0),[c,d]=D(),S=Fe(t),h=oe(()=>t,[S]),Q=oe(()=>Le(e),[e]);return _e(()=>{if(!Q)return;let v=!1,R=`Patient/${Q}`,m={_count:100,_sort:"-_lastUpdated"},u=[],a=new Map,l=[];for(let p of h){let x=[];if(p.searches)for(let I of p.searches){let g=ie(I),f=a.get(g);f===void 0&&(f=u.length,a.set(g,f),u.push(I)),x.push({searchIdx:f,resultKey:I.key})}l.push(x)}if(u.length===0){r(h.map(()=>({}))),s(!1);return}let y=u.map(p=>{let x=p.patientParam??"subject",I={[x]:R};if(p.query){if(typeof p.query=="string")return n.searchResources(p.resourceType,`${x}=${R}&${p.query}&_count=100&_sort=-_lastUpdated`);if(p.query instanceof URLSearchParams)p.query.forEach((g,f)=>{I[f]=g});else if(Array.isArray(p.query))for(let[g,f]of p.query)I[g]=f;else for(let[g,f]of Object.entries(p.query))f!==void 0&&(I[g]=f)}return n.searchResources(p.resourceType,{...m,...I})});return s(!0),d(void 0),Promise.allSettled(y).then(p=>{if(v)return;let x=l.map(g=>{let f={};for(let{searchIdx:T,resultKey:N}of g){let w=p[T];f[N]=w.status==="fulfilled"?w.value:[]}return f});r(x),s(!1);let I=p.filter(g=>g.status==="rejected");if(I.length>0){console.error("Some patient summary searches failed:",I.map(f=>f.reason));let g=I[0].reason;d(g instanceof Error?g:new Error(String(g)))}}).catch(p=>{v||(d(p instanceof Error?p:new Error(String(p))),s(!1))}),()=>{v=!0}},[n,Q,h]),{sectionData:o,loading:i,error:c}}import{isAddPharmacyResponse as qe,isOrganizationArray as ke}from"@medplum/core";import{useCallback as se}from"react";function pt(e,t){let n=b(),o=se(async i=>{let s=await n.executeBot(e,i);if(!ke(s))throw new Error("Invalid response from pharmacy search");return s},[n,e]),r=se(async i=>{let s=await n.executeBot(t,{patientId:i.patientId,pharmacy:i.pharmacy,setAsPrimary:i.setAsPrimary});if(!qe(s))throw new Error("Invalid response from add pharmacy bot");return s},[n,t]);return{searchPharmacies:o,addToFavorites:r}}import{useEffect as Ve,useRef as De}from"react";function mt(e){let t=De(void 0);return Ve(()=>{t.current=e}),t.current}import{getExtension as hn}from"@medplum/core";import{useReducer as gn,useRef as In}from"react";import{deepEquals as We,isReference as ue,isResource as $e,normalizeOperationOutcome as Ke}from"@medplum/core";import{useCallback as Be,useEffect as je,useState as ze}from"react";function W(e,t){let n=b(),[o,r]=ze(()=>ae(n,e)),i=Be(s=>{We(s,o)||r(s)},[o]);return je(()=>{let s=!0,c=ae(n,e);return!c&&ue(e)?n.readReference(e).then(d=>{s&&i(d)}).catch(d=>{s&&(i(void 0),t&&t(Ke(d)))}):i(c),(()=>s=!1)},[n,e,i,t]),o}function ae(e,t){if(t){if($e(t))return t;if(ue(t))return e.getCachedReference(t)}}import{EMPTY as fe,HTTP_HL7_ORG as O,PropertyType as P,append as ce,capitalize as de,deepClone as Ge,evalFhirPathTyped as K,getExtension as M,getReferenceString as Je,getTypedPropertyValueWithoutSchema as L,normalizeErrorString as He,splitN as Xe,toJsBoolean as Ye,toTypedValue as le,typedValueToString as Ze}from"@medplum/core";var E={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"},me=`${O}/fhir/StructureDefinition/questionnaire-itemControl`,en=`${O}/fhir/StructureDefinition/questionnaire-referenceFilter`,$=`${O}/fhir/StructureDefinition/questionnaire-referenceResource`,nn=`${O}/fhir/StructureDefinition/questionnaire-validationError`,tn=`${O}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,rn=`${O}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,xt=`${O}/fhir/StructureDefinition/questionnaire-signatureRequired`,_=`${O}/fhir/StructureDefinition/questionnaireresponse-signature`,on=`${O}/fhir/StructureDefinition/questionnaire-hidden`;function Et(e){return e.type==="choice"||e.type==="open-choice"}function Qt(e,t){if(M(e,on)?.valueBoolean===!0)return!1;let o=sn(e,t);return o!==void 0?o:an(e,t)}function sn(e,t){let n=M(e,tn);if(t&&n){let o=n.valueExpression?.expression;if(o){let r=le(t),i=K(o,[r],{"%resource":r});return Ye(i)}}}function an(e,t){if(!e.enableWhen)return!0;let n=e.enableBehavior??"any";for(let o of e.enableWhen){let r=ye(t?.item,o.question);if(o.operator==="exists"&&!o.answerBoolean&&!r?.length){if(n==="any")return!0;continue}let{anyMatch:i,allMatch:s}=ln(o,r,n);if(n==="any"&&i)return!0;if(n==="all"&&!s)return!1}return n!=="any"}function B(e,t,n=t.item){for(let o of e){let r=n?.find(i=>i.linkId===o.linkId);r&&(un(t,o,r),o.item&&r.item&&B(o.item,t,r.item))}}function un(e,t,n){try{let o=pn(t,e);if(!o)return;let r=dn(t,o);if(!r)return;n.answer=[r]}catch(o){n.extension=[{url:nn,valueString:`Expression evaluation failed: ${He(o)}`}]}}var cn={[E.boolean]:[P.boolean],[E.date]:[P.date],[E.dateTime]:[P.dateTime],[E.time]:[P.time],[E.url]:[P.string,P.uri,P.url],[E.attachment]:[P.Attachment],[E.reference]:[P.Reference],[E.quantity]:[P.Quantity],[E.decimal]:[P.decimal,P.integer],[E.integer]:[P.decimal,P.integer]};function dn(e,t){if(!e.type)return;if(e.type===E.choice||e.type===E.openChoice)return{[`value${de(t.type)}`]:t.value};if(e.type===E.string||e.type===E.text)return typeof t.value=="string"?{valueString:t.value}:void 0;if(cn[e.type]?.includes(t.type))return{[`value${de(e.type)}`]:t.value}}function pn(e,t){if(!t)return;let n=M(e,rn);if(n){let o=n.valueExpression?.expression;if(o){let r=le(t),i=K(o,[r],{"%resource":r});return i.length!==0?i[0]:void 0}}}function bt(e,t,n){let o=[];for(let r of e){let i=n.answerOption?.find(s=>Ze(pe(s))===r);if(i){let s=pe(i);s&&o.push({[t]:s.value})}}return o}function ye(e,t){for(let n of e??fe){if(n.linkId===t)return n.answer;if(n.item){let o=ye(n.item,t);if(o)return o}}}function fn(e,t,n){if(n==="exists")return!!e===t.value;if(e){let o=n==="="||n==="!="?n?.replace("=","~"):n,[{value:r}]=K(`%actualAnswer ${o} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":t});return r}else return!1}function ln(e,t,n){let o=t||[],r=yn(e),i=!1,s=!0;for(let c of o){let d=Rn(c),{operator:S}=e;if(fn(d,r,S)?i=!0:s=!1,n==="any"&&i)break}return{anyMatch:i,allMatch:s}}function vt(e){let t=M(e,$);if(t){if(t.valueCode!==void 0)return[t.valueCode];if(t.valueCodeableConcept)return t.valueCodeableConcept?.coding?.map(n=>n.code)}}function Tt(e,t){let n=Ge(e),o=M(n,$);return!t||t.length===0?(o&&(n.extension=n.extension?.filter(r=>r!==o)),n):(o||(n.extension??=[],o={url:$},n.extension.push(o)),t.length===1?(o.valueCode=t[0],delete o.valueCodeableConcept):(o.valueCodeableConcept={coding:t.map(r=>({code:r}))},delete o.valueCode),n)}function Pt(e,t,n){let o=M(e,en);if(!o?.valueString)return;let r=o.valueString;t?.reference&&(r=r.replaceAll("$subj",t.reference)),n?.reference&&(r=r.replaceAll("$encounter",n.reference));let i={},s=r.split("&");for(let c of s){let[d,S]=Xe(c,"=",2);i[d]=S}return i}function j(e,t){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??Je(e),item:z(e.item,t?.item),status:"in-progress"}}function z(e,t){let n;for(let o of e??fe){if(o.type===E.display)continue;let r=t?.filter(i=>i.linkId===o.linkId);if(r?.length)for(let i of r)i.id=i.id??Re(),i.text=i.text??o.text,i.item=z(o.item,i.item),i.answer=he(o,i),n=ce(n,i);else n=ce(n,G(o))}return n}function G(e){return{id:Re(),linkId:e.linkId,text:e.text,item:z(e.item,void 0),answer:he(e)}}var mn=1;function Re(){return"id-"+mn++}function he(e,t){if(!(e.type===E.display||e.type===E.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 Ct(e){return L({type:"QuestionnaireItemInitial",value:e},"value")}function pe(e){return L({type:"QuestionnaireItemAnswerOption",value:e},"value")}function yn(e){return L({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function Rn(e){return L({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function Ut(e){let t=W(e.questionnaire),n=W(e.defaultValue),[,o]=gn(m=>m+1,0),r=In({activePage:0});if(!r.current.questionnaire&&t&&(r.current.questionnaire=t,r.current.pages=e.disablePagination?void 0:Sn(t)),t&&e.defaultValue&&n&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=j(t,n),R()),t&&!e.defaultValue&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=j(t),R()),!r.current.questionnaire||!r.current.questionnaireResponse)return{loading:!0};function i(m,u){let a=r.current.questionnaireResponse;for(let l of m)a=a?.item?.find(y=>l.id?y.id===l.id:y.linkId===l.linkId);return u&&(a=a?.item?.find(l=>l.linkId===u.linkId)),a}function s(){r.current.activePage=(r.current.activePage??0)+1,o()}function c(){r.current.activePage=(r.current.activePage??0)-1,o()}function d(m,u){let a=i(m);a&&(a.item??=[],a.item.push(G(u)),R())}function S(m,u){let a=i(m,u);a&&(a.answer??=[],a.answer.push({}),R())}function h(m,u,a){let l=i(m,u);l&&(l.answer=a,R())}function Q(m){let u=r.current.questionnaireResponse;u&&(m?(u.extension=u.extension??[],u.extension=u.extension.filter(a=>a.url!==_),u.extension.push({url:_,valueSignature:m})):u.extension=u.extension?.filter(a=>a.url!==_),R())}function v(){let m=r.current.questionnaire;if(m?.item){let u=r.current.questionnaireResponse;B(m.item,u)}}function R(){let m=r.current.questionnaireResponse;m&&(v(),o(),e.onChange?.(m))}return{loading:!1,pagination:!!r.current.pages,questionnaire:r.current.questionnaire,questionnaireResponse:r.current.questionnaireResponse,subject:e.subject,encounter:e.encounter,activePage:r.current.activePage,pages:r.current.pages,items:xn(r.current.questionnaire,r.current.pages,r.current.activePage),responseItems:En(r.current.questionnaireResponse,r.current.pages,r.current.activePage),onNextPage:s,onPrevPage:c,onAddGroup:d,onAddAnswer:S,onChangeAnswer:h,onChangeSignature:Q}}function Sn(e){if(!(!e?.item||hn(e?.item?.[0],me)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((n,o)=>({linkId:n.linkId,title:n.text??`Page ${o+1}`,group:n}))}function xn(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}function En(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}import{allOk as vn,normalizeOperationOutcome as Tn}from"@medplum/core";import{useEffect as Pn,useMemo as Cn,useState as H}from"react";import{useCallback as Qn,useEffect as ge,useRef as J,useState as bn}from"react";function Ie(e,t,n={leading:!1}){let[o,r]=bn(e),i=J(!1),s=J(void 0),c=J(!1),d=Qn(()=>window.clearTimeout(s.current),[]);return ge(()=>{i.current&&(!c.current&&n.leading?(c.current=!0,r(e),s.current=setTimeout(()=>{c.current=!1},t)):(d(),s.current=setTimeout(()=>{c.current=!1,r(e)},t)))},[e,n.leading,t,d]),ge(()=>(i.current=!0,d),[d]),[o,d]}var On=250;function Wt(e,t,n){return X("search",e,t,n)}function $t(e,t,n){return X("searchOne",e,t,n)}function Kt(e,t,n){return X("searchResources",e,t,n)}function X(e,t,n,o){let r=b(),[i,s]=H(!1),[c,d]=H(),[S,h]=H(),Q=r.fhirSearchUrl(t,n).toString(),v=Cn(()=>({resourceType:t,query:n}),[Q]),R=o?.enabled??!0,m=o?.debounceMs??On,[u]=Ie(v,m,{leading:!0});return Pn(()=>{if(!R)return()=>{};s(!0);let a=!0;return r[e](u.resourceType,u.query).then(l=>{a&&(s(!1),d(l),h(vn))}).catch(l=>{a&&(s(!1),d(void 0),h(Tn(l)))}),()=>{a=!1}},[r,e,u,R]),[c,i,S]}import{getReferenceString as wn}from"@medplum/core";import{useCallback as An,useEffect as Se,useState as U}from"react";function Jt({query:e,threadId:t}){let n=b(),[o,r]=U(!0),[i,s]=U([]),[c,d]=U(void 0),[S,h]=U(null),[Q,v]=U(void 0),R=An(async()=>{let a=new URLSearchParams(e);a.append("identifier:not","http://medplum.com/ai-message|"),a.append("part-of:missing","true"),a.append("_has:Communication:part-of:_id:not","null");let l=await n.search("Communication",a.toString(),{cache:"no-cache"}),y=l.entry?.map(f=>f.resource).filter(f=>f!==void 0)||[];if(l.total!==void 0&&v(l.total),y.length===0){s([]);return}let x=`
1
+ import{useEffect as Te,useMemo as Pe,useState as Ce}from"react";import{createContext as be,useContext as ve}from"react";var F=be(void 0);function q(){return ve(F)}function b(){return q().medplum}function _n(){return q().navigate}function Fn(){return q().profile}import{jsx as we}from"react/jsx-runtime";var Z=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function Vn(e){let t=e.medplum,n=e.navigate??Oe,[o,r]=Ce({profile:t.getProfile(),loading:t.isLoading()});Te(()=>{function s(){r(c=>({...c,profile:t.getProfile(),loading:t.isLoading()}))}for(let c of Z)t.addEventListener(c,s);return()=>{for(let c of Z)t.removeEventListener(c,s)}},[t]);let i=Pe(()=>({...o,medplum:t,navigate:n}),[o,t,n]);return we(F.Provider,{value:i,children:e.children})}function Oe(e){window.location.assign(e)}import{useMemo as Ae}from"react";var ee=new Map,Bn=e=>Ae(()=>{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 o=n.get("Expires");if(!o||o.length>13)return e;let r=ee.get(t);if(r){let s=new URLSearchParams(new URL(r).search).get("Expires");if(s&&Number.parseInt(s,10)*1e3-5e3>Date.now())return r}return ee.set(t,e),e},[e]);import{useEffect as ne,useRef as k,useState as Me}from"react";function Jn(e,t,n){let o=b(),{patientId:r,onPatientSyncSuccess:i,onIframeSuccess:s,onError:c}=n,[d,S]=Me(void 0),h=k(i),E=k(s),v=k(c);return ne(()=>{h.current=i,E.current=s,v.current=c},[i,s,c]),ne(()=>{let y=!1;return(async()=>{try{if(r){if(await o.executeBot(e,{patientId:r}),y)return;h.current?.()}let u=await o.executeBot(t,{patientId:r});if(y)return;u.url&&(S(u.url),E.current?.(u.url))}catch(u){y||v.current?.(u)}})().catch(()=>{}),()=>{y=!0}},[o,e,t,r]),d}import{useCallback as Ue,useEffect as Le,useState as _e}from"react";import{deepEquals as te}from"@medplum/core";import{useCallback as A,useEffect as D,useRef as C,useState as re}from"react";var Ne=3e3;function oe(e,t,n){let o=b(),[r,i]=re(),[s,c]=re(n?.subscriptionProps),d=C(!1),S=C(void 0),h=C(void 0),E=C(void 0),v=C(t);v.current=t;let y=C(n?.onWebSocketOpen);y.current=n?.onWebSocketOpen;let m=C(n?.onWebSocketClose);m.current=n?.onWebSocketClose;let u=C(n?.onSubscriptionConnect);u.current=n?.onSubscriptionConnect;let a=C(n?.onSubscriptionDisconnect);a.current=n?.onSubscriptionDisconnect;let l=C(n?.onError);l.current=n?.onError,D(()=>{te(n?.subscriptionProps,s)||c(n?.subscriptionProps)},[s,n]),D(()=>{S.current&&(clearTimeout(S.current),S.current=void 0);let T=!1;return(h.current!==e||!te(E.current,s))&&(T=!0),T&&h.current&&o.unsubscribeFromCriteria(h.current,E.current),h.current=e,E.current=s,T&&e?i(o.subscribeToCriteria(e,s)):e||i(void 0),()=>{S.current=setTimeout(()=>{i(void 0),e&&o.unsubscribeFromCriteria(e,s)},Ne)}},[o,e,s]);let R=A(T=>{v.current?.(T.payload)},[]),p=A(()=>{y.current?.()},[]),x=A(()=>{m.current?.()},[]),I=A(T=>{u.current?.(T.payload.subscriptionId)},[]),g=A(T=>{a.current?.(T.payload.subscriptionId)},[]),f=A(T=>{l.current?.(T.payload)},[]);D(()=>r?(d.current||(r.addEventListener("message",R),r.addEventListener("open",p),r.addEventListener("close",x),r.addEventListener("connect",I),r.addEventListener("disconnect",g),r.addEventListener("error",f),d.current=!0),()=>{d.current=!1,r.removeEventListener("message",R),r.removeEventListener("open",p),r.removeEventListener("close",x),r.removeEventListener("connect",I),r.removeEventListener("disconnect",g),r.removeEventListener("error",f)}):()=>{},[r,R,p,x,I,g,f])}function ot(e){let t=b(),{resourceType:n,countCriteria:o,subscriptionCriteria:r}=e,[i,s]=_e(0),c=Ue(d=>{t.search(n,o,{cache:d}).then(S=>s(S.total)).catch(console.error)},[t,n,o]);return Le(()=>{c("default")},[c]),oe(r,()=>{c("reload")}),i}import{resolveId as Fe}from"@medplum/core";import{useEffect as qe,useMemo as ie,useState as V}from"react";function se(e){let t=e.patientParam??"subject",n=e.query,o="";if(n!=null)if(typeof n=="string")o=n;else if(n instanceof URLSearchParams){let r=Array.from(n.entries()).sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else if(Array.isArray(n)){let r=[...n].sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else{let r=Object.entries(n).filter(([,i])=>i!==void 0).sort(([i],[s])=>i.localeCompare(s));o=JSON.stringify(r)}return`${e.resourceType}:${t}:${o}`}function ke(e){return e.map(t=>{let n=t.searches?t.searches.map(se).join(","):"";return`${t.key}:[${n}]`}).join("|")}function ct(e,t){let n=b(),[o,r]=V([]),[i,s]=V(!0),[c,d]=V(),S=ke(t),h=ie(()=>t,[S]),E=ie(()=>Fe(e),[e]);return qe(()=>{if(!E)return;let v=!1,y=`Patient/${E}`,m={_count:100,_sort:"-_lastUpdated"},u=[],a=new Map,l=[];for(let p of h){let x=[];if(p.searches)for(let I of p.searches){let g=se(I),f=a.get(g);f===void 0&&(f=u.length,a.set(g,f),u.push(I)),x.push({searchIdx:f,resultKey:I.key})}l.push(x)}if(u.length===0){r(h.map(()=>({}))),s(!1);return}let R=u.map(p=>{let x=p.patientParam??"subject",I={[x]:y};if(p.query){if(typeof p.query=="string")return n.searchResources(p.resourceType,`${x}=${y}&${p.query}&_count=100&_sort=-_lastUpdated`);if(p.query instanceof URLSearchParams)p.query.forEach((g,f)=>{I[f]=g});else if(Array.isArray(p.query))for(let[g,f]of p.query)I[g]=f;else for(let[g,f]of Object.entries(p.query))f!==void 0&&(I[g]=f)}return n.searchResources(p.resourceType,{...m,...I})});return s(!0),d(void 0),Promise.allSettled(R).then(p=>{if(v)return;let x=l.map(g=>{let f={};for(let{searchIdx:T,resultKey:N}of g){let w=p[T];f[N]=w.status==="fulfilled"?w.value:[]}return f});r(x),s(!1);let I=p.filter(g=>g.status==="rejected");if(I.length>0){console.error("Some patient summary searches failed:",I.map(f=>f.reason));let g=I[0].reason;d(g instanceof Error?g:new Error(String(g)))}}).catch(p=>{v||(d(p instanceof Error?p:new Error(String(p))),s(!1))}),()=>{v=!0}},[n,E,h]),{sectionData:o,loading:i,error:c}}import{isAddPharmacyResponse as De,isOrganizationArray as Ve}from"@medplum/core";import{useCallback as ue}from"react";function mt(e,t){let n=b(),o=ue(async i=>{let s=await n.executeBot(e,i);if(!Ve(s))throw new Error("Invalid response from pharmacy search");return s},[n,e]),r=ue(async i=>{let s=await n.executeBot(t,{patientId:i.patientId,pharmacy:i.pharmacy,setAsPrimary:i.setAsPrimary});if(!De(s))throw new Error("Invalid response from add pharmacy bot");return s},[n,t]);return{searchPharmacies:o,addToFavorites:r}}import{useEffect as We,useRef as $e}from"react";function ht(e){let t=$e(void 0);return We(()=>{t.current=e}),t.current}import{getExtension as Sn}from"@medplum/core";import{useReducer as xn,useRef as Qn}from"react";import{deepEquals as Ke,isReference as ce,isResource as Be,normalizeOperationOutcome as je}from"@medplum/core";import{useCallback as ze,useEffect as Ge,useState as Je}from"react";function W(e,t){let n=b(),[o,r]=Je(()=>ae(n,e)),i=ze(s=>{Ke(s,o)||r(s)},[o]);return Ge(()=>{let s=!0,c=ae(n,e);return!c&&ce(e)?n.readReference(e).then(d=>{s&&i(d)}).catch(d=>{s&&(i(void 0),t&&t(je(d)))}):i(c),(()=>s=!1)},[n,e,i,t]),o}function ae(e,t){if(t){if(Be(t))return t;if(ce(t))return e.getCachedReference(t)}}import{EMPTY as le,HTTP_HL7_ORG as O,PropertyType as P,append as de,capitalize as pe,deepClone as He,evalFhirPathTyped as K,getExtension as M,getReferenceString as Xe,getTypedPropertyValueWithoutSchema as L,normalizeErrorString as Ye,splitN as Ze,toJsBoolean as en,toTypedValue as me,typedValueToString as nn}from"@medplum/core";var Q={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"},Re=`${O}/fhir/StructureDefinition/questionnaire-itemControl`,tn=`${O}/fhir/StructureDefinition/questionnaire-referenceFilter`,$=`${O}/fhir/StructureDefinition/questionnaire-referenceResource`,rn=`${O}/fhir/StructureDefinition/questionnaire-validationError`,on=`${O}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,sn=`${O}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,bt=`${O}/fhir/StructureDefinition/questionnaire-signatureRequired`,_=`${O}/fhir/StructureDefinition/questionnaireresponse-signature`,un=`${O}/fhir/StructureDefinition/questionnaire-hidden`;function vt(e){return e.type==="choice"||e.type==="open-choice"}function B(e,t){return{...t,item:ye(e.item,t.item,t)}}function ye(e,t,n){if(!t)return t;let o=[];for(let r of t){let i=e?.find(s=>s.linkId===r.linkId);i&&!an(i,n)||(i?.item&&r.item?o.push({...r,item:ye(i.item,r.item,n)}):o.push(r))}return o}function an(e,t){if(M(e,un)?.valueBoolean===!0)return!1;let o=cn(e,t);return o!==void 0?o:dn(e,t)}function cn(e,t){let n=M(e,on);if(t&&n){let o=n.valueExpression?.expression;if(o){let r=me(t),i=K(o,[r],{"%resource":r});return en(i)}}}function dn(e,t){if(!e.enableWhen)return!0;let n=e.enableBehavior??"any";for(let o of e.enableWhen){let r=he(t?.item,o.question);if(o.operator==="exists"&&!o.answerBoolean&&!r?.length){if(n==="any")return!0;continue}let{anyMatch:i,allMatch:s}=yn(o,r,n);if(n==="any"&&i)return!0;if(n==="all"&&!s)return!1}return n!=="any"}function j(e,t,n=t.item){for(let o of e){let r=n?.find(i=>i.linkId===o.linkId);r&&(pn(t,o,r),o.item&&r.item&&j(o.item,t,r.item))}}function pn(e,t,n){try{let o=mn(t,e);if(!o)return;let r=ln(t,o);if(!r)return;n.answer=[r]}catch(o){n.extension=[{url:rn,valueString:`Expression evaluation failed: ${Ye(o)}`}]}}var fn={[Q.boolean]:[P.boolean],[Q.date]:[P.date],[Q.dateTime]:[P.dateTime],[Q.time]:[P.time],[Q.url]:[P.string,P.uri,P.url],[Q.attachment]:[P.Attachment],[Q.reference]:[P.Reference],[Q.quantity]:[P.Quantity],[Q.decimal]:[P.decimal,P.integer],[Q.integer]:[P.decimal,P.integer]};function ln(e,t){if(!e.type)return;if(e.type===Q.choice||e.type===Q.openChoice)return{[`value${pe(t.type)}`]:t.value};if(e.type===Q.string||e.type===Q.text)return typeof t.value=="string"?{valueString:t.value}:void 0;if(fn[e.type]?.includes(t.type))return{[`value${pe(e.type)}`]:t.value}}function mn(e,t){if(!t)return;let n=M(e,sn);if(n){let o=n.valueExpression?.expression;if(o){let r=me(t),i=K(o,[r],{"%resource":r});return i.length!==0?i[0]:void 0}}}function Tt(e,t,n){let o=[];for(let r of e){let i=n.answerOption?.find(s=>nn(fe(s))===r);if(i){let s=fe(i);s&&o.push({[t]:s.value})}}return o}function he(e,t){for(let n of e??le){if(n.linkId===t)return n.answer;if(n.item){let o=he(n.item,t);if(o)return o}}}function Rn(e,t,n){if(n==="exists")return!!e===t.value;if(e){let o=n==="="||n==="!="?n?.replace("=","~"):n,[{value:r}]=K(`%actualAnswer ${o} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":t});return r}else return!1}function yn(e,t,n){let o=t||[],r=gn(e),i=!1,s=!0;for(let c of o){let d=In(c),{operator:S}=e;if(Rn(d,r,S)?i=!0:s=!1,n==="any"&&i)break}return{anyMatch:i,allMatch:s}}function Pt(e){let t=M(e,$);if(t){if(t.valueCode!==void 0)return[t.valueCode];if(t.valueCodeableConcept)return t.valueCodeableConcept?.coding?.map(n=>n.code)}}function Ct(e,t){let n=He(e),o=M(n,$);return!t||t.length===0?(o&&(n.extension=n.extension?.filter(r=>r!==o)),n):(o||(n.extension??=[],o={url:$},n.extension.push(o)),t.length===1?(o.valueCode=t[0],delete o.valueCodeableConcept):(o.valueCodeableConcept={coding:t.map(r=>({code:r}))},delete o.valueCode),n)}function Ot(e,t,n){let o=M(e,tn);if(!o?.valueString)return;let r=o.valueString;t?.reference&&(r=r.replaceAll("$subj",t.reference)),n?.reference&&(r=r.replaceAll("$encounter",n.reference));let i={},s=r.split("&");for(let c of s){let[d,S]=Ze(c,"=",2);i[d]=S}return i}function z(e,t){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??Xe(e),item:G(e.item,t?.item),status:"in-progress"}}function G(e,t){let n;for(let o of e??le){if(o.type===Q.display)continue;let r=t?.filter(i=>i.linkId===o.linkId);if(r?.length)for(let i of r)i.id=i.id??ge(),i.text=i.text??o.text,i.item=G(o.item,i.item),i.answer=Ie(o,i),n=de(n,i);else n=de(n,J(o))}return n}function J(e){return{id:ge(),linkId:e.linkId,text:e.text,item:G(e.item,void 0),answer:Ie(e)}}var hn=1;function ge(){return"id-"+hn++}function Ie(e,t){if(!(e.type===Q.display||e.type===Q.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 wt(e){return L({type:"QuestionnaireItemInitial",value:e},"value")}function fe(e){return L({type:"QuestionnaireItemAnswerOption",value:e},"value")}function gn(e){return L({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function In(e){return L({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function _t(e){let t=W(e.questionnaire),n=W(e.defaultValue),[,o]=xn(m=>m+1,0),r=Qn({activePage:0});if(!r.current.questionnaire&&t&&(r.current.questionnaire=t,r.current.pages=e.disablePagination?void 0:En(t)),t&&e.defaultValue&&n&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=z(t,n),y()),t&&!e.defaultValue&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=z(t),y()),!r.current.questionnaire||!r.current.questionnaireResponse)return{loading:!0};function i(m,u){let a=r.current.questionnaireResponse;for(let l of m)a=a?.item?.find(R=>l.id?R.id===l.id:R.linkId===l.linkId);return u&&(a=a?.item?.find(l=>l.linkId===u.linkId)),a}function s(){r.current.activePage=(r.current.activePage??0)+1,o()}function c(){r.current.activePage=(r.current.activePage??0)-1,o()}function d(m,u){let a=i(m);a&&(a.item??=[],a.item.push(J(u)),y())}function S(m,u){let a=i(m,u);a&&(a.answer??=[],a.answer.push({}),y())}function h(m,u,a){let l=i(m,u);l&&(l.answer=a,y())}function E(m){let u=r.current.questionnaireResponse;u&&(m?(u.extension=u.extension??[],u.extension=u.extension.filter(a=>a.url!==_),u.extension.push({url:_,valueSignature:m})):u.extension=u.extension?.filter(a=>a.url!==_),y())}function v(){let m=r.current.questionnaire;if(m?.item){let u=r.current.questionnaireResponse;j(m.item,u)}}function y(){let m=r.current.questionnaireResponse,u=r.current.questionnaire;!m||!u||(v(),o(),e.onChange?.(B(u,m)))}return{loading:!1,pagination:!!r.current.pages,questionnaire:r.current.questionnaire,questionnaireResponse:B(r.current.questionnaire,r.current.questionnaireResponse),subject:e.subject,encounter:e.encounter,activePage:r.current.activePage,pages:r.current.pages,items:bn(r.current.questionnaire,r.current.pages,r.current.activePage),responseItems:vn(r.current.questionnaireResponse,r.current.pages,r.current.activePage),onNextPage:s,onPrevPage:c,onAddGroup:d,onAddAnswer:S,onChangeAnswer:h,onChangeSignature:E}}function En(e){if(!(!e?.item||Sn(e?.item?.[0],Re)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((n,o)=>({linkId:n.linkId,title:n.text??`Page ${o+1}`,group:n}))}function bn(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}function vn(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}import{allOk as Cn,normalizeOperationOutcome as On}from"@medplum/core";import{useEffect as wn,useMemo as An,useState as X}from"react";import{useCallback as Tn,useEffect as Se,useRef as H,useState as Pn}from"react";function xe(e,t,n={leading:!1}){let[o,r]=Pn(e),i=H(!1),s=H(void 0),c=H(!1),d=Tn(()=>window.clearTimeout(s.current),[]);return Se(()=>{i.current&&(!c.current&&n.leading?(c.current=!0,r(e),s.current=setTimeout(()=>{c.current=!1},t)):(d(),s.current=setTimeout(()=>{c.current=!1,r(e)},t)))},[e,n.leading,t,d]),Se(()=>(i.current=!0,d),[d]),[o,d]}var Mn=250;function Kt(e,t,n){return Y("search",e,t,n)}function Bt(e,t,n){return Y("searchOne",e,t,n)}function jt(e,t,n){return Y("searchResources",e,t,n)}function Y(e,t,n,o){let r=b(),[i,s]=X(!1),[c,d]=X(),[S,h]=X(),E=r.fhirSearchUrl(t,n).toString(),v=An(()=>({resourceType:t,query:n}),[E]),y=o?.enabled??!0,m=o?.debounceMs??Mn,[u]=xe(v,m,{leading:!0});return wn(()=>{if(!y)return()=>{};s(!0);let a=!0;return r[e](u.resourceType,u.query).then(l=>{a&&(s(!1),d(l),h(Cn))}).catch(l=>{a&&(s(!1),d(void 0),h(On(l)))}),()=>{a=!1}},[r,e,u,y]),[c,i,S]}import{getReferenceString as Nn}from"@medplum/core";import{useCallback as Un,useEffect as Qe,useState as U}from"react";function Xt({query:e,threadId:t}){let n=b(),[o,r]=U(!0),[i,s]=U([]),[c,d]=U(void 0),[S,h]=U(null),[E,v]=U(void 0),y=Un(async()=>{let a=new URLSearchParams(e);a.append("identifier:not","http://medplum.com/ai-message|"),a.append("part-of:missing","true"),a.append("_has:Communication:part-of:_id:not","null");let l=await n.search("Communication",a.toString(),{cache:"no-cache"}),R=l.entry?.map(f=>f.resource).filter(f=>f!==void 0)||[];if(l.total!==void 0&&v(l.total),R.length===0){s([]);return}let x=`
2
2
  query {
3
- ${y.map(f=>{let N=`thread_${f.id?.replaceAll("-","")||""}`,w=wn(f);return`
3
+ ${R.map(f=>{let N=`thread_${f.id?.replaceAll("-","")||""}`,w=Nn(f);return`
4
4
  ${N}: CommunicationList(
5
5
  part_of: "${w}"
6
6
  _sort: "-sent"
@@ -26,5 +26,5 @@ import{useEffect as be,useMemo as ve,useState as Te}from"react";import{createCon
26
26
  `}).join(`
27
27
  `)}
28
28
  }
29
- `,I=await n.graphql(x),g=y.map(f=>{let N=`thread_${f.id?.replaceAll("-","")||""}`,w=I.data[N],xe=w&&w.length>0?w[0]:void 0;return[f,xe]}).filter(f=>f[1]!==void 0);s(g)},[n,e]);return Se(()=>{r(!0),R().catch(a=>{h(a)}).finally(()=>{r(!1)})},[R]),Se(()=>{(async()=>{if(!t){d(void 0);return}let l=i.find(p=>p[0].id===t);if(l){d(l[0]);return}let y=await n.readResource("Communication",t);if(y.partOf===void 0)d(y);else{let p=y.partOf[0].reference;if(p){let x=await n.readReference({reference:p});d(x)}}})().catch(l=>{h(l)})},[t,i,n]),{loading:o,error:S,threadMessages:i,selectedThread:c,total:Q,addThreadMessage:a=>{(async()=>{await R(),s(y=>[[a,void 0],...y])})().catch(y=>h(y))},handleThreadStatusChange:a=>{if(!c)return;(async()=>{let y=await n.updateResource({...c,status:a});d(y),s(p=>p.map(([x,I])=>x.id===y.id?[y,I]:[x,I]))})().catch(y=>h(y))},refreshThreadMessages:R}}export{qn as MedplumProvider,rn as QUESTIONNAIRE_CALCULATED_EXPRESSION_URL,tn as QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL,on as QUESTIONNAIRE_HIDDEN_URL,me as QUESTIONNAIRE_ITEM_CONTROL_URL,en as QUESTIONNAIRE_REFERENCE_FILTER_URL,$ as QUESTIONNAIRE_REFERENCE_RESOURCE_URL,xt as QUESTIONNAIRE_SIGNATURE_REQUIRED_URL,_ as QUESTIONNAIRE_SIGNATURE_RESPONSE_URL,nn as QUESTIONNAIRE_VALIDATION_ERROR_URL,E as QuestionnaireItemType,j as buildInitialResponse,G as buildInitialResponseItem,B as evaluateCalculatedExpressionsInQuestionnaire,pe as getItemAnswerOptionValue,yn as getItemEnableWhenValueAnswer,Ct as getItemInitialValue,bt as getNewMultiSelectValues,Pt as getQuestionnaireItemReferenceFilter,vt as getQuestionnaireItemReferenceTargetTypes,Rn as getResponseItemAnswerValue,Et as isChoiceQuestion,Qt as isQuestionEnabled,F as reactContext,Tt as setQuestionnaireItemReferenceTargetTypes,dn as typedValueToResponseItem,Wn as useCachedBinaryUrl,jn as useEPrescribingIFrame,b as useMedplum,q as useMedplumContext,Nn as useMedplumNavigate,Un as useMedplumProfile,nt as useNotificationCount,st as usePatientSummaryData,pt as usePharmacySearch,mt as usePrevious,Ut as useQuestionnaireForm,W as useResource,Wt as useSearch,$t as useSearchOne,Kt as useSearchResources,re as useSubscription,Jt as useThreadInbox};
29
+ `,I=await n.graphql(x),g=R.map(f=>{let N=`thread_${f.id?.replaceAll("-","")||""}`,w=I.data[N],Ee=w&&w.length>0?w[0]:void 0;return[f,Ee]}).filter(f=>f[1]!==void 0);s(g)},[n,e]);return Qe(()=>{r(!0),y().catch(a=>{h(a)}).finally(()=>{r(!1)})},[y]),Qe(()=>{(async()=>{if(!t){d(void 0);return}let l=i.find(p=>p[0].id===t);if(l){d(l[0]);return}let R=await n.readResource("Communication",t);if(R.partOf===void 0)d(R);else{let p=R.partOf[0].reference;if(p){let x=await n.readReference({reference:p});d(x)}}})().catch(l=>{h(l)})},[t,i,n]),{loading:o,error:S,threadMessages:i,selectedThread:c,total:E,addThreadMessage:a=>{(async()=>{await y(),s(R=>[[a,void 0],...R])})().catch(R=>h(R))},handleThreadStatusChange:a=>{if(!c)return;(async()=>{let R=await n.updateResource({...c,status:a});d(R),s(p=>p.map(([x,I])=>x.id===R.id?[R,I]:[x,I]))})().catch(R=>h(R))},refreshThreadMessages:y}}export{Vn as MedplumProvider,sn as QUESTIONNAIRE_CALCULATED_EXPRESSION_URL,on as QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL,un as QUESTIONNAIRE_HIDDEN_URL,Re as QUESTIONNAIRE_ITEM_CONTROL_URL,tn as QUESTIONNAIRE_REFERENCE_FILTER_URL,$ as QUESTIONNAIRE_REFERENCE_RESOURCE_URL,bt as QUESTIONNAIRE_SIGNATURE_REQUIRED_URL,_ as QUESTIONNAIRE_SIGNATURE_RESPONSE_URL,rn as QUESTIONNAIRE_VALIDATION_ERROR_URL,Q as QuestionnaireItemType,z as buildInitialResponse,J as buildInitialResponseItem,j as evaluateCalculatedExpressionsInQuestionnaire,fe as getItemAnswerOptionValue,gn as getItemEnableWhenValueAnswer,wt as getItemInitialValue,Tt as getNewMultiSelectValues,Ot as getQuestionnaireItemReferenceFilter,Pt as getQuestionnaireItemReferenceTargetTypes,In as getResponseItemAnswerValue,vt as isChoiceQuestion,an as isQuestionEnabled,F as reactContext,B as removeDisabledItems,Ct as setQuestionnaireItemReferenceTargetTypes,ln as typedValueToResponseItem,Bn as useCachedBinaryUrl,Jn as useEPrescribingIFrame,b as useMedplum,q as useMedplumContext,_n as useMedplumNavigate,Fn as useMedplumProfile,ot as useNotificationCount,ct as usePatientSummaryData,mt as usePharmacySearch,ht as usePrevious,_t as useQuestionnaireForm,W as useResource,Kt as useSearch,Bt as useSearchOne,jt as useSearchResources,oe as useSubscription,Xt as useThreadInbox};
30
30
  //# sourceMappingURL=index.mjs.map