UNPKG

dicomweb-proxy

Version:

A proxy to translate between dicomweb and dimse

2 lines 9.68 kB
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2701],{62701:(e,t,n)=>{n.r(t),n.d(t,{default:()=>C});var r=n(97598),a=n.n(r),s=n(86326),i=n(62037),o=n(99993),l=n(76654),c=n(2836),u=n(92643),d=n(7241);function m(){return m=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},m.apply(null,arguments)}function p(e){const{children:t,dataSource:n,displaySets:r,viewportOptions:a,servicesManager:i,extensionManager:p}=e,{displaySetService:y,viewportActionCornersService:S}=i.services,I=a.viewportId;if(r.length>1)throw new Error("SR viewport should only have a single display set");const g=r[0],{setPositionPresentation:E}=(0,d.usePositionPresentationStore)(),[v,b]=(0,c.ihW)(),[w,h]=(0,s.useState)(0),[D,C]=(0,s.useState)(1),[T,N]=(0,s.useState)(null),[x,M]=(0,s.useState)(null),[k,O]=(0,s.useState)(null),{viewports:P,activeViewportId:R}=v,{t:j}=(0,o.Bd)("Common");let U;if(p.registeredExtensionIds.includes("@ohif/extension-measurement-tracking")){const e=p.getModuleEntry("@ohif/extension-measurement-tracking.contextModule.TrackedMeasurementsContext"),t=(0,s.useContext)(e.context);U=t?.[0]}const[A,q]=(0,s.useState)(U?.context?.trackedSeries?.length>0),L=(0,s.useCallback)((e=>{const{measurements:t}=g;(0,l.m1)(k,t.map((e=>e.TrackingUniqueIdentifier)),e)}),[k,w,g]),F=(0,s.useCallback)((e=>{const{StudyInstanceUID:t,displaySetInstanceUID:n,sopClassUids:r}=g;t&&n&&(r&&r.length>1&&console.warn("More than one SOPClassUID in the same series is not yet supported."),async function(e,t,n){const{measurements:r}=e,a=r[t],{displaySetInstanceUID:s}=a;e.keyImageDisplaySet||(e.keyImageDisplaySet=(0,u.A)(n,e));if(!s)return{referencedDisplaySetMetadata:null,referencedDisplaySet:null};const i=n.getDisplaySetByUID(s),o=i.images[0],l={PatientID:o.PatientID,PatientName:o.PatientName,PatientSex:o.PatientSex,PatientAge:o.PatientAge,SliceThickness:o.SliceThickness,StudyDate:o.StudyDate,SeriesDescription:o.SeriesDescription,SeriesInstanceUID:o.SeriesInstanceUID,SeriesNumber:o.SeriesNumber,ManufacturerModelName:o.ManufacturerModelName,SpacingBetweenSlices:o.SpacingBetweenSlices};return{referencedDisplaySetMetadata:l,referencedDisplaySet:i}}(g,e,y).then((({referencedDisplaySet:t,referencedDisplaySetMetadata:n})=>{if(!t||!n)return;h(e),N(t),M(n);const{presentationIds:r}=a,s=g.measurements[e];E(r.positionPresentationId,{viewReference:{referencedImageId:s.imageId}})})))}),[n,g,T,I]),V=(0,s.useCallback)((()=>{if(!T)return null;const{component:t}=p.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{measurements:n}=g;return n[w]?s.createElement(t,m({},e,{displaySets:[T],viewportOptions:{...a,toolGroupId:"SRToolGroup",viewportType:"stack",positionIds:null},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{O(e.detail.element)})(t)},isJumpToMeasurementDisabled:!0})):null}),[T,I,w]),B=(0,s.useCallback)((e=>{let t=w;t+=e,t>=D?t=0:t<0&&(t=D-1),L(t),F(t)}),[w,D,F,L]);(0,s.useEffect)((()=>{const e=y.subscribe(y.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=P.get(R);e.includes(t.displaySetInstanceUID)&&b.setDisplaySetsForViewport({viewportId:R,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,s.useEffect)((()=>{(async()=>{g.isLoaded||await g.load();const e=g.measurements.length;C(e),F(w)})()}),[g]),(0,s.useEffect)((()=>{(async()=>{g.isLoaded||await g.load(),k&&g.isLoaded&&L(w)})()}),[w,k,L,g]),(0,s.useEffect)((()=>{q(U?.context?.trackedSeries?.length>0)}),[U]),(0,s.useEffect)((()=>{S.addComponents([{viewportId:I,id:"viewportStatusComponent",component:f({srDisplaySet:g,viewportId:I,isRehydratable:g.isRehydratable,isLocked:A,t:j,servicesManager:i}),indexPriority:-100,location:S.LOCATIONS.topLeft},{viewportId:I,id:"viewportActionArrowsComponent",index:0,component:s.createElement(c.$IX,{key:"actionArrows",onArrowsClick:B}),indexPriority:0,location:S.LOCATIONS.topRight}])}),[A,B,g,j,S,I]);let $=null;return T&&x?(t&&t.length&&($=t.map(((e,t)=>e&&s.cloneElement(e,{viewportId:I,key:t})))),s.createElement(s.Fragment,null,s.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},V(),$))):null}function f({srDisplaySet:e,viewportId:t,isRehydratable:n,isLocked:r,t:a,servicesManager:o}){const l=a("LOAD"),u=n&&!r?3:n&&r?2:1;let d=null,p=null;switch(u){case 1:p=()=>s.createElement(c.FI1.ByName,{name:"status-alert",className:"h-4 w-4"}),d=()=>s.createElement("div",null,"This structured report is not compatible",s.createElement("br",null),"with this application.");break;case 2:p=()=>s.createElement(c.FI1.ByName,{name:"status-locked",className:"h-4 w-4"}),d=()=>s.createElement("div",null,"This structured report is currently read-only",s.createElement("br",null),"because you are tracking measurements in",s.createElement("br",null),"another viewport.");break;case 3:p=()=>s.createElement(c.FI1.ByName,{className:"text-muted-foreground h-4 w-4",name:"status-untracked"}),d=()=>s.createElement("div",null,`Click ${l} to restore measurements.`)}const f=()=>{const{toolbarButtons:n,onInteraction:r}=(0,i.tR)({servicesManager:o,buttonSection:"loadSRMeasurements"}),a={displaySetInstanceUID:e.displaySetInstanceUID,viewportId:t};return s.createElement("div",{className:"flex h-6 cursor-default text-sm leading-6 text-white"},s.createElement("div",{className:"bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"},s.createElement(p,{className:"h-4 w-4"}),s.createElement("span",{className:"ml-1"},"SR")),3===u&&s.createElement(s.Fragment,null,n.map((e=>{if(!e)return null;const{id:t,Component:n,componentProps:i}=e,o=s.createElement(n,m({key:t,id:t,onInteraction:e=>r({...e,...a})},i));return s.createElement("div",{key:t},o)}))))};return s.createElement(s.Fragment,null,d&&s.createElement(c.m_M,null,s.createElement(c.k$k,{asChild:!0},s.createElement("span",null,s.createElement(f,null))),s.createElement(c.ZIw,{side:"bottom",align:"start"},s.createElement(d,null))),!d&&s.createElement(f,null))}p.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node,viewportLabel:a().string,viewportOptions:a().object,servicesManager:a().object.isRequired,extensionManager:a().instanceOf(i.nH).isRequired};const y=p;var S=n(74137);const I={TEXT:e=>e.TextValue,CODE:e=>e.ConceptCodeSequence?.[0]?.CodeMeaning,UIDREF:e=>e.UID,NUM:e=>{const t=e.MeasuredValueSequence?.[0];if(!t)return;const{NumericValue:n,MeasurementUnitsCodeSequence:r}=t,{CodeValue:a}=r;return`${n} ${a}`},PNAME:e=>{const t=e.PersonName?.[0];return t?i.Wp.formatPN(t):void 0},DATE:e=>{const{Date:t}=e;return t?i.Wp.formatDate(t):void 0},TIME:e=>{const{Time:t}=e;return t?i.Wp.formatTime(t):void 0},DATETIME:e=>{const{DateTime:t}=e;if("string"!=typeof t)return;if(t.length<14)return t;const n=t.substring(0,8),r=t.substring(8,14);return`${i.Wp.formatDate(n)} ${i.Wp.formatTime(r)}`}};const g="[empty]";function E(e){const{contentItem:t,nodeIndexesTree:n,continuityOfContent:r}=e,{ConceptNameCodeSequence:a}=t,{CodeValue:i,CodeMeaning:o}=a,l=0===n[n.length-1],c=function(e){const{ValueType:t}=e,n=I[t];return n?n(e):`[${t} is not supported]`}(t)??g,u="CONTINUOUS"===r,d=i===S.n7.Finding,m=u&&!l&&/^[a-zA-Z0-9]/.test(c?.[0]);let p="whitespace-pre-line";return i===S.n7.Finding&&(p="whitespace-pre-wrap"),u?s.createElement(s.Fragment,null,s.createElement("span",{className:p,title:o},m?" ":"",c)):s.createElement(s.Fragment,null,s.createElement("div",{className:"mb-2"},s.createElement("span",{className:"font-bold"},o,": "),d?s.createElement("pre",null,c):s.createElement("span",{className:p},c)))}function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},v.apply(null,arguments)}function b(e){const{container:t,nodeIndexesTree:n=[0],containerNumberedTree:r=[1]}=e,{ContinuityOfContent:a,ConceptNameCodeSequence:i}=t,{CodeMeaning:o}=i??{};let l=1;const c=t.ContentSequence?.map(((e,t)=>{const{ValueType:i}=e,o=[...n,t],c=o.join(".");let u,d;if("CONTAINER"===i){u=b,d={container:e,nodeIndexesTree:o,containerNumberedTree:[...r,l++]}}else u=E,d={contentItem:e,nodeIndexesTree:o,continuityOfContent:a};return s.createElement(u,v({key:c},d))}));return s.createElement("div",null,s.createElement("div",{className:"font-bold"},r.join("."),". ",o),s.createElement("div",{className:"ml-4 mb-2"},c))}function w(e){const{displaySets:t}=e,n=t[0].instances[0];return s.createElement("div",{className:"relative flex h-full w-full flex-col overflow-auto p-4 text-white"},s.createElement("div",null,s.createElement(b,{container:n})))}E.propTypes={contentItem:a().object,nodeIndexesTree:a().arrayOf(a().number),continuityOfContent:a().string},b.propTypes={container:a().object,nodeIndexesTree:a().arrayOf(a().number),containerNumberedTree:a().arrayOf(a().number)},w.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node,viewportLabel:a().string,viewportOptions:a().object,servicesManager:a().object.isRequired,extensionManager:a().instanceOf(i.nH).isRequired};const h=w;function D(e){const{displaySets:t}=e,{isImagingMeasurementReport:n}=t[0];return n?s.createElement(y,e):s.createElement(h,e)}D.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node,viewportLabel:a().string,viewportOptions:a().object,servicesManager:a().object.isRequired,extensionManager:a().instanceOf(i.nH).isRequired};const C=D}}]); //# sourceMappingURL=2701.bundle.b389364e2a611cb92afc.js.map