@medplum/react-hooks
Version:
Medplum React Hooks Library
3 lines (2 loc) • 14.5 kB
JavaScript
var z=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var Ie=Object.prototype.hasOwnProperty;var Qe=(e,n)=>{for(var t in n)z(e,t,{get:n[t],enumerable:!0})},xe=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of ge(n))!Ie.call(e,r)&&r!==t&&z(e,r,{get:()=>n[r],enumerable:!(i=Re(n,r))||i.enumerable});return e};var Se=e=>xe(z({},"__esModule",{value:!0}),e);var Ze={};Qe(Ze,{MedplumProvider:()=>be,QUESTIONNAIRE_CALCULATED_EXPRESSION_URL:()=>se,QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL:()=>oe,QUESTIONNAIRE_ITEM_CONTROL_URL:()=>X,QUESTIONNAIRE_REFERENCE_FILTER_URL:()=>re,QUESTIONNAIRE_REFERENCE_RESOURCE_URL:()=>U,QUESTIONNAIRE_SIGNATURE_REQUIRED_URL:()=>Ce,QUESTIONNAIRE_SIGNATURE_RESPONSE_URL:()=>O,QUESTIONNAIRE_VALIDATION_ERROR_URL:()=>ie,QuestionnaireItemType:()=>m,buildInitialResponse:()=>F,buildInitialResponseItem:()=>V,evaluateCalculatedExpressionsInQuestionnaire:()=>_,getItemAnswerOptionValue:()=>G,getItemEnableWhenValueAnswer:()=>pe,getItemInitialValue:()=>Ke,getNewMultiSelectValues:()=>Ue,getQuestionnaireItemReferenceFilter:()=>qe,getQuestionnaireItemReferenceTargetTypes:()=>Ve,getResponseItemAnswerValue:()=>fe,isChoiceQuestion:()=>Pe,isQuestionEnabled:()=>Oe,reactContext:()=>A,setQuestionnaireItemReferenceTargetTypes:()=>ke,typedValueToResponseItem:()=>ue,useCachedBinaryUrl:()=>ve,useMedplum:()=>h,useMedplumContext:()=>M,useMedplumNavigate:()=>ye,useMedplumProfile:()=>Ee,usePrevious:()=>Te,useQuestionnaireForm:()=>We,useResource:()=>L,useSearch:()=>Xe,useSearchOne:()=>je,useSearchResources:()=>He,useSubscription:()=>Ye});module.exports=Se(Ze);var C=require("react");var w=require("react"),A=(0,w.createContext)(void 0);function M(){return(0,w.useContext)(A)}function h(){return M().medplum}function ye(){return M().navigate}function Ee(){return M().profile}var Z=require("react/jsx-runtime"),Y=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function be(e){let n=e.medplum,t=e.navigate??he,[i,r]=(0,C.useState)({profile:n.getProfile(),loading:n.isLoading()});(0,C.useEffect)(()=>{function u(){r(p=>({...p,profile:n.getProfile(),loading:n.isLoading()}))}for(let p of Y)n.addEventListener(p,u);return()=>{for(let p of Y)n.removeEventListener(p,u)}},[n]);let s=(0,C.useMemo)(()=>({...i,medplum:n,navigate:t}),[i,n,t]);return(0,Z.jsx)(A.Provider,{value:s,children:e.children})}function he(e){window.location.assign(e)}var ne=require("react"),ee=new Map,ve=e=>(0,ne.useMemo)(()=>{if(!e)return;let n=e.split("?")[0];if(!n)return e;let t;try{t=new URLSearchParams(new URL(e).search)}catch{return e}if(!t.has("Key-Pair-Id")||!t.has("Signature"))return e;let i=t.get("Expires");if(!i||i.length>13)return e;let r=ee.get(n);if(r){let u=new URLSearchParams(new URL(r).search).get("Expires");if(u&&parseInt(u,10)*1e3-5e3>Date.now())return r}return ee.set(n,e),e},[e]);var N=require("react");function Te(e){let n=(0,N.useRef)(void 0);return(0,N.useEffect)(()=>{n.current=e}),n.current}var le=require("@medplum/core"),k=require("react");var y=require("@medplum/core"),P=require("react");function L(e,n){let t=h(),[i,r]=(0,P.useState)(()=>te(t,e)),s=(0,P.useCallback)(u=>{(0,y.deepEquals)(u,i)||r(u)},[i]);return(0,P.useEffect)(()=>{let u=!0,p=te(t,e);return!p&&(0,y.isReference)(e)?t.readReference(e).then(f=>{u&&s(f)}).catch(f=>{u&&(s(void 0),n&&n((0,y.normalizeOperationOutcome)(f)))}):s(p),(()=>u=!1)},[t,e,s,n]),i}function te(e,n){if(n){if((0,y.isResource)(n))return n;if((0,y.isReference)(n))return e.getCachedReference(n)}}var o=require("@medplum/core"),m={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"},X=`${o.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-itemControl`,re=`${o.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceFilter`,U=`${o.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,ie=`${o.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,oe=`${o.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,se=`${o.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,Ce=`${o.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-signatureRequired`,O=`${o.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaireresponse-signature`;function Pe(e){return e.type==="choice"||e.type==="open-choice"}function Oe(e,n){let t=we(e,n);return t!==void 0?t:Ae(e,n)}function we(e,n){let t=(0,o.getExtension)(e,oe);if(n&&t){let i=t.valueExpression?.expression;if(i){let r=(0,o.toTypedValue)(n),s=(0,o.evalFhirPathTyped)(i,[r],{"%resource":r});return(0,o.toJsBoolean)(s)}}}function Ae(e,n){if(!e.enableWhen)return!0;let t=e.enableBehavior??"any";for(let i of e.enableWhen){let r=ae(n?.item,i.question);if(i.operator==="exists"&&!i.answerBoolean&&!r?.length){if(t==="any")return!0;continue}let{anyMatch:s,allMatch:u}=Fe(i,r,t);if(t==="any"&&s)return!0;if(t==="all"&&!u)return!1}return t!=="any"}function _(e,n,t=n.item){for(let i of e){let r=t?.find(s=>s.linkId===i.linkId);r&&(Me(n,i,r),i.item&&r.item&&_(i.item,n,r.item))}}function Me(e,n,t){try{let i=Le(n,e);if(!i)return;let r=ue(n,i);if(!r)return;t.answer=[r]}catch(i){t.extension=[{url:ie,valueString:`Expression evaluation failed: ${(0,o.normalizeErrorString)(i)}`}]}}var Ne={[m.boolean]:[o.PropertyType.boolean],[m.date]:[o.PropertyType.date],[m.dateTime]:[o.PropertyType.dateTime],[m.time]:[o.PropertyType.time],[m.url]:[o.PropertyType.string,o.PropertyType.uri,o.PropertyType.url],[m.attachment]:[o.PropertyType.Attachment],[m.reference]:[o.PropertyType.Reference],[m.quantity]:[o.PropertyType.Quantity],[m.decimal]:[o.PropertyType.decimal,o.PropertyType.integer],[m.integer]:[o.PropertyType.decimal,o.PropertyType.integer]};function ue(e,n){if(!e.type)return;if(e.type===m.choice||e.type===m.openChoice)return{[`value${(0,o.capitalize)(n.type)}`]:n.value};if(e.type===m.string||e.type===m.text)return typeof n.value=="string"?{valueString:n.value}:void 0;if(Ne[e.type]?.includes(n.type))return{[`value${(0,o.capitalize)(e.type)}`]:n.value}}function Le(e,n){if(!n)return;let t=(0,o.getExtension)(e,se);if(t){let i=t.valueExpression?.expression;if(i){let r=(0,o.toTypedValue)(n),s=(0,o.evalFhirPathTyped)(i,[r],{"%resource":r});return s.length!==0?s[0]:void 0}}}function Ue(e,n,t){let i=[];for(let r of e){let s=t.answerOption?.find(u=>(0,o.typedValueToString)(G(u))===r);if(s){let u=G(s);u&&i.push({[n]:u.value})}}return i}function ae(e,n){if(e)for(let t of e){if(t.linkId===n)return t.answer;if(t.item){let i=ae(t.item,n);if(i)return i}}}function _e(e,n,t){if(t==="exists")return!!e===n.value;if(e){let i=t==="="||t==="!="?t?.replace("=","~"):t,[{value:r}]=(0,o.evalFhirPathTyped)(`%actualAnswer ${i} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":n});return r}else return!1}function Fe(e,n,t){let i=n||[],r=pe(e),s=!1,u=!0;for(let p of i){let f=fe(p),{operator:R}=e;if(_e(f,r,R)?s=!0:u=!1,t==="any"&&s)break}return{anyMatch:s,allMatch:u}}function Ve(e){let n=(0,o.getExtension)(e,U);if(n){if(n.valueCode!==void 0)return[n.valueCode];if(n.valueCodeableConcept)return n.valueCodeableConcept?.coding?.map(t=>t.code)}}function ke(e,n){let t=(0,o.deepClone)(e),i=(0,o.getExtension)(t,U);return!n||n.length===0?(i&&(t.extension=t.extension?.filter(r=>r!==i)),t):(i||(t.extension??=[],i={url:U},t.extension.push(i)),n.length===1?(i.valueCode=n[0],delete i.valueCodeableConcept):(i.valueCodeableConcept={coding:n.map(r=>({code:r}))},delete i.valueCode),t)}function qe(e,n,t){let i=(0,o.getExtension)(e,re);if(!i?.valueString)return;let r=i.valueString;n?.reference&&(r=r.replaceAll("$subj",n.reference)),t?.reference&&(r=r.replaceAll("$encounter",t.reference));let s={},u=r.split("&");for(let p of u){let[f,R]=(0,o.splitN)(p,"=",2);s[f]=R}return s}function F(e,n){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??(0,o.getReferenceString)(e),item:j(e.item,n?.item),status:"in-progress"}}function j(e,n){if(!e)return;let t=[];for(let i of e){if(i.type===m.display)continue;let r=n?.filter(s=>s.linkId===i.linkId);if(r&&r?.length>0)for(let s of r)s.id=s.id??ce(),s.text=s.text??i.text,s.item=j(i.item,s.item),s.answer=de(i,s),t.push(s);else t.push(V(i))}return t}function V(e){return{id:ce(),linkId:e.linkId,text:e.text,item:j(e.item,void 0),answer:de(e)}}var De=1;function ce(){return"id-"+De++}function de(e,n){if(!(e.type===m.display||e.type===m.group)){if(n?.answer&&n.answer.length>0)return n.answer;if(e.initial&&e.initial.length>0)return e.initial.map(t=>({...t}));if(e.answerOption)return e.answerOption.filter(t=>t.initialSelected).map(t=>({...t,initialSelected:void 0}))}}function Ke(e){return(0,o.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:e},"value")}function G(e){return(0,o.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:e},"value")}function pe(e){return(0,o.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function fe(e){return(0,o.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function We(e){let n=L(e.questionnaire),t=L(e.defaultValue),[,i]=(0,k.useReducer)(c=>c+1,0),r=(0,k.useRef)({activePage:0});if(!r.current.questionnaire&&n&&(r.current.questionnaire=n,r.current.pages=e.disablePagination?void 0:Be(n)),n&&e.defaultValue&&t&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=F(n,t),g()),n&&!e.defaultValue&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=F(n),g()),!r.current.questionnaire||!r.current.questionnaireResponse)return{loading:!0};function s(c,a){let l=r.current.questionnaireResponse;for(let I of c)l=l?.item?.find(T=>I.id?T.id===I.id:T.linkId===I.linkId);return a&&(l=l?.item?.find(I=>I.linkId===a.linkId)),l}function u(){r.current.activePage=(r.current.activePage??0)+1,i()}function p(){r.current.activePage=(r.current.activePage??0)-1,i()}function f(c,a){let l=s(c);l&&(l.item??=[],l.item.push(V(a)),g())}function R(c,a){let l=s(c,a);l&&(l.answer??=[],l.answer.push({}),g())}function S(c,a,l){let I=s(c,a);I&&(I.answer=l,g())}function E(c){let a=r.current.questionnaireResponse;a&&(c?(a.extension=a.extension??[],a.extension=a.extension.filter(l=>l.url!==O),a.extension.push({url:O,valueSignature:c})):a.extension=a.extension?.filter(l=>l.url!==O),g())}function b(){let c=r.current.questionnaire;if(c?.item){let a=r.current.questionnaireResponse;_(c.item,a)}}function g(){let c=r.current.questionnaireResponse;c&&(b(),i(),e.onChange?.(c))}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:$e(r.current.questionnaire,r.current.pages,r.current.activePage),responseItems:ze(r.current.questionnaireResponse,r.current.pages,r.current.activePage),onNextPage:u,onPrevPage:p,onAddGroup:f,onAddAnswer:R,onChangeAnswer:S,onChangeSignature:E}}function Be(e){if(!(!e?.item||(0,le.getExtension)(e?.item?.[0],X)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((t,i)=>({linkId:t.linkId,title:t.text??`Page ${i+1}`,group:t}))}function $e(e,n,t=0){return n&&e?.item?.[t]?[e.item[t]]:e.item??[]}function ze(e,n,t=0){return n&&e?.item?.[t]?[e.item[t]]:e.item??[]}var q=require("@medplum/core"),v=require("react");var x=require("react");function me(e,n,t={leading:!1}){let[i,r]=(0,x.useState)(e),s=(0,x.useRef)(!1),u=(0,x.useRef)(void 0),p=(0,x.useRef)(!1),f=(0,x.useCallback)(()=>window.clearTimeout(u.current),[]);return(0,x.useEffect)(()=>{s.current&&(!p.current&&t.leading?(p.current=!0,r(e)):(f(),u.current=setTimeout(()=>{p.current=!1,r(e)},n)))},[e,t.leading,n,f]),(0,x.useEffect)(()=>(s.current=!0,f),[f]),[i,f]}var Ge=250;function Xe(e,n,t){return H("search",e,n,t)}function je(e,n,t){return H("searchOne",e,n,t)}function He(e,n,t){return H("searchResources",e,n,t)}function H(e,n,t,i){let r=h(),[s,u]=(0,v.useState)(),[p,f]=(0,v.useState)(!0),[R,S]=(0,v.useState)(),[E,b]=(0,v.useState)(),g=r.fhirSearchUrl(n,t).toString(),[c]=me(g,i?.debounceMs??Ge,{leading:!0});return(0,v.useEffect)(()=>{c!==s&&(u(c),r[e](n,t).then(a=>{f(!1),S(a),b(q.allOk)}).catch(a=>{f(!1),S(void 0),b((0,q.normalizeOperationOutcome)(a))}))},[r,e,n,t,s,c]),[R,p,E]}var J=require("@medplum/core"),d=require("react");var Je=3e3;function Ye(e,n,t){let i=h(),[r,s]=(0,d.useState)(),[u,p]=(0,d.useState)(t?.subscriptionProps),f=(0,d.useRef)(!1),R=(0,d.useRef)(void 0),S=(0,d.useRef)(void 0),E=(0,d.useRef)(void 0),b=(0,d.useRef)(n);b.current=n;let g=(0,d.useRef)(t?.onWebSocketOpen);g.current=t?.onWebSocketOpen;let c=(0,d.useRef)(t?.onWebSocketClose);c.current=t?.onWebSocketClose;let a=(0,d.useRef)(t?.onSubscriptionConnect);a.current=t?.onSubscriptionConnect;let l=(0,d.useRef)(t?.onSubscriptionDisconnect);l.current=t?.onSubscriptionDisconnect;let I=(0,d.useRef)(t?.onError);I.current=t?.onError,(0,d.useEffect)(()=>{(0,J.deepEquals)(t?.subscriptionProps,u)||p(t?.subscriptionProps)},[u,t]),(0,d.useEffect)(()=>{R.current&&(clearTimeout(R.current),R.current=void 0);let Q=!1;return(S.current!==e||!(0,J.deepEquals)(E.current,u))&&(Q=!0),Q&&S.current&&i.unsubscribeFromCriteria(S.current,E.current),S.current=e,E.current=u,Q&&e?s(i.subscribeToCriteria(e,u)):e||s(void 0),()=>{R.current=setTimeout(()=>{s(void 0),e&&i.unsubscribeFromCriteria(e,u)},Je)}},[i,e,u]);let T=(0,d.useCallback)(Q=>{b.current?.(Q.payload)},[]),D=(0,d.useCallback)(()=>{g.current?.()},[]),K=(0,d.useCallback)(()=>{c.current?.()},[]),W=(0,d.useCallback)(Q=>{a.current?.(Q.payload.subscriptionId)},[]),B=(0,d.useCallback)(Q=>{l.current?.(Q.payload.subscriptionId)},[]),$=(0,d.useCallback)(Q=>{I.current?.(Q.payload)},[]);(0,d.useEffect)(()=>r?(f.current||(r.addEventListener("message",T),r.addEventListener("open",D),r.addEventListener("close",K),r.addEventListener("connect",W),r.addEventListener("disconnect",B),r.addEventListener("error",$),f.current=!0),()=>{f.current=!1,r.removeEventListener("message",T),r.removeEventListener("open",D),r.removeEventListener("close",K),r.removeEventListener("connect",W),r.removeEventListener("disconnect",B),r.removeEventListener("error",$)}):()=>{},[r,T,D,K,W,B,$])}
//# sourceMappingURL=index.cjs.map
;