UNPKG

dicomweb-proxy

Version:

A proxy to translate between dicomweb and dimse

2 lines 27.7 kB
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9026],{99026:(e,t,n)=>{n.r(t),n.d(t,{default:()=>re});var r=n(86326),i=n(81980),o=n(4667),s=n(15327),a=n(62037),l=n(2836),c=n(71353),u=n(97598),m=n.n(u);function d({viewportData:e,viewportId:t,element:n,imageSliceData:i,setImageSliceData:o,scrollbarHeight:a,servicesManager:c}){const{cineService:u,cornerstoneViewportService:m}=c.services;return(0,r.useEffect)((()=>{if(!e)return;const n=m.getCornerstoneViewport(t);if(n&&!(n instanceof s.VolumeViewport3D))try{const e=n.getCurrentImageIdIndex(),t=n.getNumberOfSlices();o({imageIndex:e,numberOfSlices:t})}catch(e){console.warn(e)}}),[t,e]),(0,r.useEffect)((()=>{if(!e)return;const{viewportType:r}=e,i=r===s.Enums.ViewportType.STACK&&s.Enums.Events.STACK_VIEWPORT_SCROLL||r===s.Enums.ViewportType.ORTHOGRAPHIC&&s.Enums.Events.VOLUME_NEW_IMAGE||s.Enums.Events.IMAGE_RENDERED,a=e=>{const n=m.getCornerstoneViewport(t);if(!n||n instanceof s.VolumeViewport3D)return;const{imageIndex:r,newImageIdIndex:i=r}=e.detail,a=n.getNumberOfSlices();o({imageIndex:i,numberOfSlices:a})};return n.addEventListener(i,a),()=>{n.removeEventListener(i,a)}}),[e,n]),r.createElement(l.uqr,{onChange:e=>((e,t)=>{const r=m.getCornerstoneViewport(t),{isCineEnabled:i}=u.getState();i&&(u.stopClip(n,{viewportId:t}),u.setCine({id:t,isPlaying:!1})),s.utilities.jumpToSlice(r.element,{imageIndex:e,debounceLoading:!0})})(e,t),max:i.numberOfSlices?i.numberOfSlices-1:0,height:a,value:i.imageIndex||0})}d.propTypes={viewportData:m().object,viewportId:m().string.isRequired,element:m().instanceOf(Element),scrollbarHeight:m().string,imageSliceData:m().object.isRequired,setImageSliceData:m().func.isRequired,servicesManager:m().object.isRequired};const p=d;var v=n(3823),g=n(14867),f=n.n(g);function E(e,t=0){if(null!==e)return parseFloat(e).toFixed(t)}function w(e,t="MMM D, YYYY"){return f()(e,"YYYYMMDD").format(t)}function I(e,t="HH:mm:ss"){return f()(e,"HH:mm:ss").format(t)}const S=1e-4,{formatPN:b}=a.Wp,y={"ohif.overlayItem":function(e){const{instance:t,customization:n={}}=e,{color:i,attribute:o,title:s,label:a,background:l}=n,c=n.contentF?.(e,n)??t?.[o];if(null==c)return null;return r.createElement("div",{className:"overlay-item flex flex-row",style:{color:i,background:l},title:s},a?r.createElement("span",{className:"mr-1 shrink-0"},a):null,r.createElement("span",{className:"ml-0 mr-2 shrink-0"},c))},"ohif.overlayItem.windowLevel":function({voi:e,customization:t}){const{windowWidth:n,windowCenter:i}=e;if("number"!=typeof i||"number"!=typeof n)return null;return r.createElement("div",{className:"overlay-item flex flex-row",style:{color:t?.color}},r.createElement("span",{className:"mr-0.5 shrink-0 opacity-[0.67]"},"W:"),r.createElement("span",{className:"mr-2.5 shrink-0"},n.toFixed(0)),r.createElement("span",{className:"mr-0.5 shrink-0 opacity-[0.67]"},"L:"),r.createElement("span",{className:"shrink-0"},i.toFixed(0)))},"ohif.overlayItem.zoomLevel":function({scale:e,customization:t}){return r.createElement("div",{className:"overlay-item flex flex-row",style:{color:t&&t.color||void 0}},r.createElement("span",{className:"mr-0.5 shrink-0 opacity-[0.67]"},"Zoom:"),r.createElement("span",null,e.toFixed(2),"x"))},"ohif.overlayItem.instanceNumber":function({instanceNumber:e,imageSliceData:t,customization:n}){const{imageIndex:i,numberOfSlices:o}=t;return r.createElement("div",{className:"overlay-item flex flex-row",style:{color:n&&n.color||void 0}},r.createElement("span",null,null!=e?r.createElement(r.Fragment,null,r.createElement("span",{className:"mr-0.5 shrink-0 opacity-[0.67]"},"I:"),r.createElement("span",null,`${e} (${i+1}/${o})`)):`${i+1}/${o}`))}};function h({element:e,viewportData:t,imageSliceData:n,viewportId:i,servicesManager:o}){const{cornerstoneViewportService:a,customizationService:c,toolGroupService:u,displaySetService:m}=o.services,[d,p]=(0,r.useState)({windowCenter:null,windowWidth:null}),[v,g]=(0,r.useState)(1),{imageIndex:f}=n,S=c.getCustomization("viewportOverlay.topLeft"),h=c.getCustomization("viewportOverlay.topRight"),D=c.getCustomization("viewportOverlay.bottomLeft"),N=c.getCustomization("viewportOverlay.bottomRight"),V=(0,r.useMemo)((()=>t?C(t,i,f,a):null),[t,i,f,a]),M=(0,r.useMemo)((()=>{const e=function(e,t){if(!e?.data?.length)return null;const n=e.data.map((e=>t.getDisplaySetByUID(e.displaySetInstanceUID))).filter((e=>!!e));if(!n.length)return null;return n}(t,m);if(!e)return null;const[n]=e,{instances:r,instance:i}=n;return{displaySets:e,displaySet:n,instance:r?.[f],instances:r,referenceInstance:i}}),[t,i,V,a]);(0,r.useEffect)((()=>{const t=e=>{const{range:t}=e.detail;if(!t)return;const{lower:n,upper:r}=t,{windowWidth:i,windowCenter:o}=s.utilities.windowLevel.toWindowLevel(n,r);p({windowCenter:o,windowWidth:i})};return e.addEventListener(s.Enums.Events.VOI_MODIFIED,t),()=>{e.removeEventListener(s.Enums.Events.VOI_MODIFIED,t)}}),[i,t,d,e]),(0,r.useEffect)((()=>{const t=e=>{const{previousCamera:t,camera:n}=e.detail;if(t.parallelScale!==n.parallelScale||t.scale!==n.scale){const e=a.getCornerstoneViewport(i);if(!e)return;const t=e.getZoom();g(t)}};return e.addEventListener(s.Enums.Events.CAMERA_MODIFIED,t),()=>{e.removeEventListener(s.Enums.Events.CAMERA_MODIFIED,t)}}),[i,t,a,e]);const R=(0,r.useCallback)(((s,a)=>{const l={...a,element:e,viewportData:t,imageSliceData:n,viewportId:i,servicesManager:o,customization:s,formatters:{formatPN:b,formatDate:w,formatTime:I,formatNumberPrecision:E}};if(!s)return null;const{inheritsFrom:u}=s,m=y[u];if(m)return r.createElement(m,l);{const e=c.transform(s);if("function"==typeof e.contentF)return e.contentF(l)}}),[e,t,n,i,o,c,M,d,v,V]),O=(0,r.useCallback)(((e,t)=>{const n={...M,formatters:{formatDate:w},voi:d,scale:v,instanceNumber:V,viewportId:i,toolGroupService:u};return r.createElement(r.Fragment,null,e.map(((e,i)=>r.createElement("div",{key:`${t}_${i}`},(!e?.condition||e.condition(n))&&R(e,n)||null))))}),[R]);return r.createElement(l.pUj,{topLeft:O(S,"topLeftOverlayItem"),topRight:O(h,"topRightOverlayItem"),bottomLeft:O(D,"bottomLeftOverlayItem"),bottomRight:O(N,"bottomRightOverlayItem")})}const C=(e,t,n,r)=>{let i;switch(e.viewportType){case s.Enums.ViewportType.STACK:i=function(e,t){const n=e.data[0].imageIds,r=n[t];if(!r)return;const i=s.metaData.get("generalImageModule",r)||{},{instanceNumber:o}=i;if(n.length<=1)return;return parseInt(o)}(e,n);break;case s.Enums.ViewportType.ORTHOGRAPHIC:i=function(e,t,n,r){const i=e.data;if(!i)return;const{volume:o}=i[0];if(!o)return;const{direction:a,imageIds:l}=o,c=n.getCornerstoneViewport(t);if(!c)return;const u=c.getCamera(),{viewPlaneNormal:m}=u,d=a.slice(6,9),p=v.eR.cross(v.eR.create(),m,d);if(v.eR.length(p)<S){const e=l[r];if(!e)return{};const{instanceNumber:t}=s.metaData.get("generalImageModule",e)||{};return parseInt(t)}}(e,t,r,n)}return i??null};h.propTypes={viewportData:m().object,imageIndex:m().number,viewportId:m().string};const D=h;var N=n(55530),V=n.n(N);const{getOrientationStringLPS:M,invertOrientationStringLPS:R}=o.utilities.orientation;const O=function({element:e,viewportData:t,imageSliceData:n,viewportId:i,servicesManager:o,orientationMarkers:a=["top","left"]}){const[l,c]=(0,r.useState)(0),[u,m]=(0,r.useState)(!1),[d,p]=(0,r.useState)(!1),{cornerstoneViewportService:g}=o.services;(0,r.useEffect)((()=>{const t=e=>{const{previousCamera:t,camera:n}=e.detail,{rotation:r}=n;void 0!==r&&c(r),void 0!==n.flipHorizontal&&t.flipHorizontal!==n.flipHorizontal&&m(n.flipHorizontal),void 0!==n.flipVertical&&t.flipVertical!==n.flipVertical&&p(n.flipVertical)};return e.addEventListener(s.Enums.Events.CAMERA_MODIFIED,t),()=>{e.removeEventListener(s.Enums.Events.CAMERA_MODIFIED,t)}}),[]);const f=(0,r.useMemo)((()=>{if(!t)return"";let o,c,m;if("stack"===t.viewportType){const e=n.imageIndex,r=t.data[0].imageIds?.[e];if(!r)return!1;({rowCosines:o,columnCosines:c,isDefaultValueSetForColumnCosine:m,isDefaultValueSetForColumnCosine:m}=s.metaData.get("imagePlaneModule",r)||{})}else{if(!e||!(0,s.getEnabledElement)(e))return"";const{viewport:t}=(0,s.getEnabledElement)(e),{viewUp:n,viewPlaneNormal:r}=t.getCamera(),i=v.eR.create();v.eR.cross(i,n,r),c=[-n[0],-n[1],-n[2]],o=i}if(!o||!c||void 0===l||m)return"";const p=function(e,t,n,r,i){const o=M(e),s=M(t),a=R(o),l={top:R(s),left:a,right:o,bottom:s};r&&(l.top=R(l.top),l.bottom=R(l.bottom));i&&(l.left=R(l.left),l.right=R(l.right));if(90===n||-270===n)return{top:l.left,left:R(l.top),right:R(l.bottom),bottom:l.right};if(-90===n||270===n)return{top:R(l.left),left:l.top,bottom:l.left,right:l.bottom};if(180===n||-180===n)return{top:R(l.top),left:R(l.left),bottom:R(l.bottom),right:R(l.right)};return l}(o,c,l,d,u);return g.getViewportInfo(i)?a.map(((e,t)=>r.createElement("div",{className:V()("overlay-text",`${e}-mid orientation-marker`,"text-highlight/65","text-base","leading-5"),key:`${e}-mid orientation-marker`},r.createElement("div",{className:"orientation-marker-value"},p[e])))):(console.log("ViewportOrientationMarkers::No viewport"),null)}),[t,n,l,d,u,a,e]);return r.createElement("div",{className:"ViewportOrientationMarkers select-none"},f)};function T({viewportData:e,element:t}){const[n,i]=(0,r.useState)(!1),[o,a]=(0,r.useState)(!1),l=(0,r.useRef)(null),c=(0,r.useRef)(null),u=e=>{clearTimeout(l.current),l.current=setTimeout((()=>{i(!0)}),50)},m=e=>{clearTimeout(l.current),i(!1)},d=e=>{clearTimeout(l.current),c.current===e.detail.imageId&&(a(e.detail.error),c.current=null)};return(0,r.useEffect)((()=>(t.addEventListener(s.Enums.Events.STACK_VIEWPORT_SCROLL,u),t.addEventListener(s.Enums.Events.IMAGE_LOAD_ERROR,d),t.addEventListener(s.Enums.Events.STACK_NEW_IMAGE,m),()=>{t.removeEventListener(s.Enums.Events.STACK_VIEWPORT_SCROLL,u),t.removeEventListener(s.Enums.Events.STACK_NEW_IMAGE,m),t.removeEventListener(s.Enums.Events.IMAGE_LOAD_ERROR,d)})),[t,e]),o?r.createElement(r.Fragment,null,r.createElement("div",{className:"absolute top-0 left-0 h-full w-full bg-black opacity-50"},r.createElement("div",{className:"transparent flex h-full w-full items-center justify-center"},r.createElement("p",{className:"text-primary-light text-xl font-light"},r.createElement("h4",null,"Error Loading Image"),r.createElement("p",null,"An error has occurred."),r.createElement("p",null,o))))):n?r.createElement("div",{className:"pointer-events-none absolute top-0 left-0 h-full w-full bg-black opacity-50"},r.createElement("div",{className:"transparent flex h-full w-full items-center justify-center"},r.createElement("p",{className:"text-primary-light text-xl font-light"},"Loading..."))):null}T.propTypes={error:m().object,element:m().object};const A=T;const L=function(e){const{viewportId:t,element:n,scrollbarHeight:i,servicesManager:o}=e,{cornerstoneViewportService:s}=o.services,[a,l]=(0,r.useState)({imageIndex:0,numberOfSlices:0}),[c,u]=(0,r.useState)(null);if((0,r.useEffect)((()=>{const{unsubscribe:e}=s.subscribe(s.EVENTS.VIEWPORT_DATA_CHANGED,(e=>{e.viewportId===t&&u(e.viewportData)}));return()=>{e()}}),[t]),!n)return null;if(c){const e=s.getViewportInfo(t);if(e?.viewportOptions?.customViewportProps?.hideOverlays)return null}return r.createElement("div",{className:"noselect"},r.createElement(p,{viewportId:t,viewportData:c,element:n,imageSliceData:a,setImageSliceData:l,scrollbarHeight:i,servicesManager:o}),r.createElement(D,{imageSliceData:a,viewportData:c,viewportId:t,servicesManager:o,element:n}),r.createElement(A,{viewportData:c,element:n}),r.createElement(O,{imageSliceData:a,element:n,viewportData:c,servicesManager:o,viewportId:t}))};var P=n(45981);function x({viewportId:e,cineService:t,newStackFrameRate:n,isPlaying:i,dynamicInfo:o,customizationService:a}){const l=a.getCustomization("cinePlayer"),[c,u]=(0,r.useState)(o);(0,r.useEffect)((()=>{u(o)}),[o]),(0,r.useEffect)((()=>{if(!c)return;const e=e=>{const{volumeId:t,dimensionGroupNumber:n,numDimensionGroups:r,splittingTag:i}=e.detail;u({volumeId:t,dimensionGroupNumber:n,numDimensionGroups:r,label:i})};return s.eventTarget.addEventListener(s.Enums.Events.DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED,e),()=>{s.eventTarget.removeEventListener(s.Enums.Events.DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED,e)}}),[c]),(0,r.useEffect)((()=>{if(!c)return;const{volumeId:e,dimensionGroupNumber:t,numDimensionGroups:n,splittingTag:r}=c||{};s.cache.getVolume(e,!0).dimensionGroupNumber=t,u({volumeId:e,dimensionGroupNumber:t,numDimensionGroups:n,label:r})}),[]);const m=(0,r.useCallback)((e=>{const{volumeId:t,dimensionGroupNumber:n}=e;s.cache.getVolume(t,!0).dimensionGroupNumber=n}),[]);return r.createElement(l,{className:"absolute left-1/2 bottom-3 -translate-x-1/2",frameRate:n,isPlaying:i,onClose:()=>{t.setCine({id:e,isPlaying:!1}),t.setIsCineEnabled(!1),t.setViewportCineClosed(e)},onPlayPauseChange:n=>{t.setCine({id:e,isPlaying:n})},onFrameRateChange:n=>t.setCine({id:e,frameRate:n}),dynamicInfo:c,updateDynamicInfo:m})}const _=function({enabledVPElement:e,viewportId:t,servicesManager:n}){const{customizationService:i,displaySetService:o,viewportGridService:a}=n.services,[{isCineEnabled:c,cines:u},m]=(0,l.tqw)(),[d,p]=(0,r.useState)(24),[v,g]=(0,r.useState)(null),[f]=(0,P.r)(),E=(0,r.useRef)(null),w=()=>{if(!u?.[t]||!e)return;const{isPlaying:n=!1,frameRate:r=24}=u[t],i=Math.max(r,1);return n?m.playClip(e,{framesPerSecond:i,viewportId:t}):m.stopClip(e)},I=(0,r.useCallback)((()=>{if(!e||!c)return;const{viewports:n}=a.getState(),{displaySetInstanceUIDs:r}=n.get(t);let i=24,s=u[t]?.isPlaying||!1;r.forEach((e=>{const t=o.getDisplaySetByUID(e);if(t.FrameRate&&(i=Math.round(1e3/t.FrameRate),s||=!!f.autoPlayCine),t.isDynamicVolume){const{dynamicVolumeInfo:e}=t,n=e.timePoints.length,r=e.splittingTag,i=e.dimensionGroupNumber||1;g({volumeId:t.displaySetInstanceUID,dimensionGroupNumber:i,numDimensionGroups:n,label:r})}else g(null)})),s&&m.setIsCineEnabled(s),m.setCine({id:t,isPlaying:s,frameRate:i}),p(i)}),[o,t,a,u,c,e]);if((0,r.useEffect)((()=>(E.current=!0,I(),()=>{E.current=!1})),[c,I]),(0,r.useEffect)((()=>{c&&w()}),[c,w,e]),(0,r.useEffect)((()=>{if(e)return e.addEventListener(s.Enums.Events.VIEWPORT_NEW_IMAGE_SET,I),e.addEventListener(s.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,I),()=>{m.setCine({id:t,isPlaying:!1}),e.removeEventListener(s.Enums.Events.VIEWPORT_NEW_IMAGE_SET,I),e.removeEventListener(s.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,I)}}),[e,I,t]),(0,r.useEffect)((()=>{if(u&&u[t]&&e&&E.current)return w(),()=>{m.stopClip(e,{viewportId:t})}}),[u,t,m,e,w]),!c)return null;const S=u[t],b=S?.isPlaying||!1;return r.createElement(x,{viewportId:t,cineService:m,newStackFrameRate:d,isPlaying:b,dynamicInfo:v,customizationService:i})};var G=n(76255);const F=function({viewportId:e}){const{servicesManager:t}=(0,a.Jg)(),[n]=(0,G.R4)(),i=t.services.customizationService.getCustomization("ui.viewportActionCorner");return n[e]?r.createElement(i,{cornerComponents:n[e]}):null};var k=n(35392);function z({viewportId:e,element:t,displaySets:n,servicesManager:i,commandsManager:o,verticalDirection:s,horizontalDirection:a}){const{customizationService:l}=i.services,c=l.getCustomization("cornerstone.windowLevelPresets"),u=l.getCustomization("cornerstone.colorbar"),{volumeRenderingPresets:m,volumeRenderingQualityRange:d}=l.getCustomization("cornerstone.3dVolumeRendering"),p=l.getCustomization("viewportActionMenu.windowLevelActionMenu"),v=n.filter((e=>c[e.Modality])).map((e=>({[e.Modality]:c[e.Modality]})));if(0===n.map((e=>e.Modality)).filter((e=>!k.i.includes(e))).length)return null;const g=p?.component;return r.createElement(g,{viewportId:e,element:t,presets:v,verticalDirection:s,horizontalDirection:a,commandsManager:o,servicesManager:i,colorbarProperties:u,displaySets:n,volumeRenderingPresets:m,volumeRenderingQualityRange:d})}var H=n(99737);const U=function({viewportId:e,servicesManager:t}){const{segmentationService:n}=t.services,[i,o]=(0,r.useState)([]),[s,a]=(0,r.useState)([]);(0,r.useEffect)((()=>{const t=()=>{const t=n.getSegmentationRepresentations(e);o(t);const r=n.getSegmentations().filter((e=>!t.some((t=>t.segmentationId===e.segmentationId))));a(r)};t();const r=[n.EVENTS.SEGMENTATION_MODIFIED,n.EVENTS.SEGMENTATION_REMOVED,n.EVENTS.SEGMENTATION_REPRESENTATION_MODIFIED].map((e=>n.subscribe(e,t)));return()=>{r.forEach((e=>e.unsubscribe()))}}),[n,e]);const c=(t,r=H.SegmentationRepresentations.Labelmap)=>{n.toggleSegmentationRepresentationVisibility(e,{segmentationId:t,type:r})};return r.createElement("div",{className:"bg-muted flex h-full w-[262px] flex-col rounded p-3"},r.createElement("span",{className:"text-muted-foreground mb-2 text-xs font-semibold"},"Current Viewport"),r.createElement("ul",{className:"space-y-1"},i.map((t=>r.createElement("li",{key:t.id,className:"flex items-center text-sm"},r.createElement(l.$nd,{variant:"ghost",size:"icon",className:"text-muted-foreground mr-2",onClick:()=>{return r=t.segmentationId,void n.removeSegmentationRepresentations(e,{segmentationId:r});var r}},r.createElement(l.FI1.Minus,{className:"h-6 w-6"})),r.createElement("span",{className:"text-foreground flex-grow"},t.label),t.visible?r.createElement(l.$nd,{variant:"ghost",size:"icon",className:"text-muted-foreground",onClick:()=>c(t.segmentationId,t.type)},r.createElement(l.FI1.Hide,{className:"h-6 w-6"})):r.createElement(l.$nd,{variant:"ghost",size:"icon",className:"text-muted-foreground",onClick:()=>c(t.segmentationId,t.type)},r.createElement(l.FI1.Show,{className:"h-6 w-6"})))))),s.length>0&&r.createElement(r.Fragment,null,r.createElement(l.wvv,{className:"bg-input mb-3"}),r.createElement("span",{className:"text-muted-foreground mb-2 text-xs font-semibold"},"Available"),r.createElement("ul",{className:"space-y-1"},s.map((({segmentationId:t,label:i})=>r.createElement("li",{key:t,className:"flex items-center text-sm"},r.createElement(l.$nd,{variant:"ghost",size:"icon",className:"text-muted-foreground mr-2",onClick:()=>(t=>{n.addSegmentationRepresentation(e,{segmentationId:t})})(t)},r.createElement(l.FI1.Plus,{className:"h-6 w-6"})),r.createElement("span",{className:"text-foreground/60"},i)))))))};var W=n(73421);function $({viewportId:e,displaySets:t,servicesManager:n,commandsManager:i,location:o}){const{viewportActionCornersService:s,viewportGridService:a}=n.services,c=(0,W.j)({servicesManager:n}),u=e===a.getActiveViewportId(),{align:m,side:d}=j(s,o);return c?.length?r.createElement(l.AMh,null,r.createElement(l.Wvm,{asChild:!0,className:"flex items-center justify-center"},r.createElement(l.$nd,{variant:"ghost",size:"icon"},r.createElement(l.FI1.ViewportViews,{className:V()("text-highlight",u?"visible":"invisible group-hover/pane:visible")}))),r.createElement(l.hlN,{className:"border-none bg-transparent p-0 shadow-none",side:d,align:m,alignOffset:-15,sideOffset:5},r.createElement(U,{className:"w-full",viewportId:e,displaySets:t,servicesManager:n,commandsManager:i}))):null}const j=(e,t)=>{const n=e.LOCATIONS;switch(t){case n.topLeft:return{align:"start",side:"bottom"};case n.topRight:return{align:"end",side:"bottom"};case n.bottomLeft:return{align:"start",side:"top"};case n.bottomRight:return{align:"end",side:"top"};default:return console.debug("Unknown location, defaulting to bottom-start"),{align:"start",side:"bottom"}}};function Y(e){return r.createElement($,e)}var K=n(44646),q=n(10182),B=n(2847);var J=n(68578);const Q=(0,r.memo)((({servicesManager:e,viewportId:t})=>{const{displaySetService:n,cineService:i,viewportGridService:o,customizationService:s,cornerstoneViewportService:a}=e.services,[l,c]=(0,r.useState)(t),u=(0,r.useCallback)((()=>{if(i.isViewportCineClosed(l))return;const e=o.getDisplaySetsUIDsForViewport(l);if(!e)return;const t=e.map((e=>n.getDisplaySetByUID(e)));if(!t.length)return;const r=t.map((e=>e?.Modality)),a=t.some((e=>e?.isDynamicVolume)),c=s.getCustomization("autoCineModalities");!r.some((e=>c.includes(e)))&&!a||i.getState().isCineEnabled||i.setIsCineEnabled(!0)}),[l,i,o,n,s]);return(0,r.useEffect)((()=>{const e=o.subscribe(o.EVENTS.ACTIVE_VIEWPORT_ID_CHANGED,(({viewportId:e})=>c(e)));return()=>e.unsubscribe()}),[t,o]),(0,r.useEffect)((()=>{const e=a.subscribe(a.EVENTS.VIEWPORT_DATA_CHANGED,(()=>{const e=o.getActiveViewportId();c(e),u()}));return()=>e.unsubscribe()}),[t,a,o,u]),(0,r.useEffect)((()=>{u()}),[u]),null}),Z);function Z(e,t){return e.viewportId===t.viewportId&&e.servicesManager===t.servicesManager}Q.displayName="ActiveViewportBehavior";const X=Q;var ee=n(11794);const te=r.memo((e=>{const{displaySets:t,dataSource:n,viewportOptions:u,displaySetOptions:m,servicesManager:d,commandsManager:p,onElementEnabled:v,onElementDisabled:g,isJumpToMeasurementDisabled:f=!1,initialImageIndex:E,isHangingProtocolLayout:w}=e,I=u.viewportId;if(!I)throw new Error("Viewport ID is required");for(;m.length<t.length;)m.push({});u.viewportType=t.some((e=>e.isDynamicVolume&&e.isReconstructable))?"volume":u.viewportType;const[S,b]=(0,r.useState)("100px"),[y,h]=(0,r.useState)(null),C=(0,r.useRef)(),{displaySetService:D,toolbarService:N,toolGroupService:V,syncGroupService:M,cornerstoneViewportService:R,segmentationService:O,cornerstoneCacheService:T,viewportActionCornersService:A,customizationService:P,measurementService:x}=d.services,[G]=(0,l.ORo)(),k=(0,r.useCallback)((()=>{const e=C.current.clientHeight-10+"px";b(e)}),[C]),H=(0,r.useCallback)((()=>{C.current&&(R.resize(),k())}),[C]),U=(0,r.useCallback)((e=>{const t=e.getRenderingEngineId(),n=e.getSyncGroups();V.removeViewportFromToolGroup(I,t),M.removeViewportFromSyncGroup(I,t,n),O.clearSegmentationRepresentations(I),A.clear(I)}),[I,O,M,V,A]),W=(0,r.useCallback)((e=>{if(e.detail.element!==C.current)return;const{viewportId:t,element:n}=e.detail,r=R.getViewportInfo(t);if(!r)return;(0,c.ye)(t,n),h(n);const i=r.getRenderingEngineId(),o=r.getToolGroupId(),s=r.getSyncGroups();V.addViewportToToolGroup(t,i,o),M.addViewportToSyncGroup(t,i,s);const{synchronizersStore:a}=J.U.getState();a?.[t]?.length&&!w&&function(e,t){const{synchronizersStore:n}=J.U.getState(),r=n[e];if(!r)return;r.forEach((n=>{if(!n.id)return;const{id:r,sourceViewports:i,targetViewports:o}=n,s=t.getSynchronizer(r);if(!s)return;const a=i.find((t=>t.viewportId===e)),l=o.find((t=>t.viewportId===e)),c=s.getSourceViewports().find((t=>t.viewportId===e)),u=s.getTargetViewports().find((t=>t.viewportId===e));a&&!c&&s.addSource({viewportId:a.viewportId,renderingEngineId:a.renderingEngineId}),l&&!u&&s.addTarget({viewportId:l.viewportId,renderingEngineId:l.renderingEngineId})}))}(t,M),v&&"function"==typeof v&&v(e)}),[I,v,V]);(0,r.useEffect)((()=>(R.enableViewport(I,C.current),s.eventTarget.addEventListener(s.Enums.Events.ELEMENT_ENABLED,W),k(),()=>{const e=R.getViewportInfo(I);e&&(R.storePresentation({viewportId:I}),U(e),g&&"function"==typeof g&&g(e),R.disableElement(I),s.eventTarget.removeEventListener(s.Enums.Events.ELEMENT_ENABLED,W))})),[]),(0,r.useEffect)((()=>{const{unsubscribe:e}=D.subscribe(D.EVENTS.DISPLAY_SET_SERIES_METADATA_INVALIDATED,(async({displaySetInstanceUID:e,invalidateData:t})=>{if(!t)return;const r=R.getViewportInfo(I);if(r.hasDisplaySet(e)){const t=r.getViewportData(),i=await T.invalidateViewportData(t,e,n,D),o=!0;R.updateViewport(I,i,o)}}));return()=>{e()}}),[I]),(0,r.useEffect)((()=>{u.viewportType||(u.viewportType="stack");(async()=>{const e=await T.createViewportData(t,u,n,E),r=function(e,t){const{lutPresentationStore:n}=q.I.getState(),{positionPresentationStore:r}=K.q.getState(),{segmentationPresentationStore:i}=B.v.getState(),{presentationIds:o}=t;if(!o)return{positionPresentation:null,lutPresentation:null,segmentationPresentation:null};const{lutPresentationId:s,positionPresentationId:a,segmentationPresentationId:l}=o;return{positionPresentation:r[a],lutPresentation:n[s],segmentationPresentation:i[l]}}(0,u);u.needsRerendering&&(u.needsRerendering=!1),R.setViewportData(I,e,u,m,r)})()}),[u,t,n]),(0,r.useEffect)((()=>{if(f)return;const{unsubscribe:e}=x.subscribe(a.C5.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT,(e=>function(e,t,n,r){const{measurement:i,isConsumed:a}=e;if(!i||a)return;const l=(0,s.getEnabledElement)(t.current);if(!l)return;const c=l.viewport,{metadata:u,displaySetInstanceUID:m}=i,d=r.getViewportDisplaySets(n),p=d.find((e=>e.displaySetInstanceUID===m));let v=u;p||(v={...u,FrameOfReferenceUID:void 0});if(!c.isReferenceViewable(v,ee.g))return;try{c.setViewReference(u),c.render()}catch(e){console.warn("Unable to apply",u,e)}o.annotation.selection.setAnnotationSelected(i.uid),e?.consume?.()}(e,C,I,R)));return()=>{e()}}),[t,C,I,f,d]),(0,r.useEffect)((()=>{const e=P.getCustomization("viewportActionMenu.windowLevelActionMenu"),n=P.getCustomization("viewportActionMenu.segmentationOverlay");e?.enabled&&A.addComponent({viewportId:I,id:"windowLevelActionMenu",component:z({viewportId:I,element:C.current,displaySets:t,servicesManager:d,commandsManager:p,location:e.location,verticalDirection:l.se.VerticalDirection.TopToBottom,horizontalDirection:l.se.HorizontalDirection.RightToLeft}),location:e.location}),n?.enabled&&A.addComponent({viewportId:I,id:"segmentation",component:Y({viewportId:I,element:C.current,displaySets:t,servicesManager:d,commandsManager:p,location:n.location}),location:n.location})}),[t,I,A,d,p]);const{ref:$}=(0,i.u)({onResize:H}),j=P.getCustomization("ui.notificationComponent");return r.createElement(r.Fragment,null,r.createElement("div",{className:"viewport-wrapper"},r.createElement("div",{className:"cornerstone-viewport-element",style:{height:"100%",width:"100%"},onContextMenu:e=>e.preventDefault(),onMouseDown:e=>e.preventDefault(),ref:e=>{$.current=e,C.current=e}}),r.createElement(L,{viewportId:I,toolBarService:N,element:C.current,scrollbarHeight:S,servicesManager:d}),r.createElement(_,{enabledVPElement:y,viewportId:I,servicesManager:d}),r.createElement(X,{viewportId:I,servicesManager:d})),r.createElement("div",{className:"absolute top-[24px] w-full"},G.viewportId===I&&r.createElement(j,{id:"viewport-notification",message:G.message,type:G.type,actions:G.actions,onSubmit:G.onSubmit,onOutsideClick:G.onOutsideClick,onKeyPress:G.onKeyPress})),r.createElement(F,{viewportId:I}))}),ne);function ne(e,t){if(t.needsRerendering)return console.debug("OHIFCornerstoneViewport: Rerender caused by: needsRerendering"),!1;if(e.displaySets.length!==t.displaySets.length)return console.debug("OHIFCornerstoneViewport: Rerender caused by: displaySets length change"),!1;if(e.viewportOptions.orientation!==t.viewportOptions.orientation)return console.debug("OHIFCornerstoneViewport: Rerender caused by: orientation change"),!1;if(e.viewportOptions.toolGroupId!==t.viewportOptions.toolGroupId)return console.debug("OHIFCornerstoneViewport: Rerender caused by: toolGroupId change"),!1;if(t.viewportOptions.viewportType&&e.viewportOptions.viewportType!==t.viewportOptions.viewportType)return console.debug("OHIFCornerstoneViewport: Rerender caused by: viewportType change"),!1;if(t.viewportOptions.needsRerendering)return console.debug("OHIFCornerstoneViewport: Rerender caused by: viewportOptions.needsRerendering"),!1;const n=e.displaySets,r=t.displaySets;if(n.length!==r.length)return console.debug("OHIFCornerstoneViewport: Rerender caused by: displaySets length mismatch"),!1;for(let e=0;e<n.length;e++){const t=n[e],i=r.find((e=>e.displaySetInstanceUID===t.displaySetInstanceUID));if(!i)return console.debug("OHIFCornerstoneViewport: Rerender caused by: displaySet not found"),!1;if(i.images?.length!==t.images?.length)return console.debug("OHIFCornerstoneViewport: Rerender caused by: images length mismatch"),!1;if(i.images?.length)for(let e=0;e<i.images.length;e++)if(i.images[e].imageId!==t.images[e].imageId)return console.debug("OHIFCornerstoneViewport: Rerender caused by: imageId mismatch"),!1}return!0}te.displayName="OHIFCornerstoneViewport";const re=te}}]); //# sourceMappingURL=9026.bundle.b26726abd3d989150862.js.map