dicomweb-proxy
Version:
A proxy to translate between dicomweb and dimse
2 lines • 7.24 kB
JavaScript
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9890,8402],{23121:(e,t,n)=>{n.r(t),n.d(t,{default:()=>y});var r=n(86326),i=n(97598),a=n.n(i),s=n(2836),o=n(7241);const l={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const c=function({servicesManager:e,rtDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateRTDisplaySet:i}){const{uiViewportDialogService:a,customizationService:s}=e.services,o=e._extensionManager._appConfig;return new Promise((async function(c,d){const p=o?.disableConfirmationPrompts?l.HYDRATE_SEG:await function(e,t,n){return new Promise((function(r,i){const a=t.getCustomization("viewportNotification.hydrateRTMessage"),s=[{id:"no-hydrate",type:"secondary",text:"No",value:l.CANCEL},{id:"yes-hydrate",type:"primary",text:"Yes",value:l.HYDRATE_SEG}],o=t=>{e.hide(),r(t)};e.show({id:"promptHydrateRT",viewportId:n,type:"info",message:a,actions:s,onSubmit:o,onOutsideClick:()=>{e.hide(),r(l.CANCEL)},onKeyPress:e=>{"Enter"===e.key&&o(l.HYDRATE_SEG)}})}))}(a,s,n);if(p===l.HYDRATE_SEG){r?.forEach((e=>{e()}));c(await i({rtDisplaySet:t,viewportId:n,servicesManager:e}))}}))};var d=n(99993);function p({isHydrated:e,onStatusClick:t}){let n=null,i=null;switch(e){case!0:i=()=>r.createElement(s.FI1.ByName,{name:"status-alert"}),n=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:i=()=>r.createElement(s.FI1.ByName,{className:"text-muted-foreground h-4 w-4",name:"status-untracked"}),n=()=>r.createElement("div",null,"Click LOAD to load RTSTRUCT.")}const a=()=>{const{t:n}=(0,d.Bd)("Common"),a=n("LOAD");return r.createElement("div",{className:"flex h-6 cursor-default text-sm leading-6 text-white"},r.createElement("div",{className:"bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"},r.createElement(i,null),r.createElement("span",{className:"ml-1"},"RTSTRUCT")),!e&&r.createElement(s.N8H,{onInteraction:t},a))};return r.createElement(r.Fragment,null,n&&r.createElement(s.m_M,null,r.createElement(s.k$k,{asChild:!0},r.createElement("span",null,r.createElement(a,null))),r.createElement(s.ZIw,{side:"bottom"},r.createElement(n,null))),!n&&r.createElement(a,null))}const u=function(e,t,n){const r=t.getCustomization("cornerstone.overlayViewportTools");return e.createToolGroupAndAddTools(n,r)};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 S(e){const{children:t,displaySets:n,viewportOptions:i,servicesManager:a,extensionManager:l,commandsManager:d}=e,{displaySetService:S,toolGroupService:y,segmentationService:v,uiNotificationService:E,customizationService:g,viewportActionCornersService:I}=a.services,w=i.viewportId,f=`RTToolGroup-${w}`;if(n.length>1)throw new Error("RT viewport should only have a single display set");const C=g.getCustomization("ui.loadingIndicatorTotalPercent"),T=n[0],[h,D]=(0,s.ihW)(),{setPositionPresentation:b}=(0,o.usePositionPresentationStore)(),[N,k]=(0,r.useState)(T.isHydrated),[P,R]=(0,r.useState)(!T.isLoaded),[A,O]=(0,r.useState)(null),[x,M]=(0,r.useState)({percentComplete:null,totalSegments:null}),G=(0,r.useRef)(null),{viewports:L,activeViewportId:_}=h,U=T.referencedDisplaySetInstanceUID,H=S.getDisplaySetByUID(U),V=function(e){const t=e.images[0],n={PatientID:t.PatientID,PatientName:t.PatientName,PatientSex:t.PatientSex,PatientAge:t.PatientAge,SliceThickness:t.SliceThickness,StudyDate:t.StudyDate,SeriesDescription:t.SeriesDescription,SeriesInstanceUID:t.SeriesInstanceUID,SeriesNumber:t.SeriesNumber,ManufacturerModelName:t.ManufacturerModelName,SpacingBetweenSlices:t.SpacingBetweenSlices};return n}(H);G.current={displaySet:H,metadata:V};const Y=()=>{O(null)},B=(0,r.useCallback)((()=>{h?.viewports.forEach((({viewportId:e})=>{d.runCommand("storePresentation",{viewportId:e})}))}),[h]),j=(0,r.useCallback)((({rtDisplaySet:e,viewportId:t})=>{d.runCommand("hydrateRTSDisplaySet",{displaySet:e,viewportId:t})}),[d]),z=(0,r.useCallback)((()=>{const{component:t}=l.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=G.current;return r.createElement(t,m({},e,{displaySets:[n,T],viewportOptions:{viewportType:"stack",toolGroupId:f,orientation:i.orientation,viewportId:i.viewportId,presentationIds:i.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{O(e.detail.element)})(t)},onElementDisabled:Y}))}),[w,T,f]),F=(0,r.useCallback)((e=>{o.utils.handleSegmentChange({direction:e,segDisplaySet:T,viewportId:w,selectedSegmentObjectIndex:0,segmentationService:v})}),[0]);(0,r.useEffect)((()=>{P||c({servicesManager:a,viewportId:w,rtDisplaySet:T,preHydrateCallbacks:[B],hydrateRTDisplaySet:j}).then((e=>{e&&k(!0)}))}),[a,w,T,P]),(0,r.useEffect)((()=>{const{unsubscribe:e}=v.subscribe(v.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{if(e.rtDisplaySet.displaySetInstanceUID===T.displaySetInstanceUID&&R(!1),T?.firstSegmentedSliceImageId&&i?.presentationIds){const{firstSegmentedSliceImageId:e}=T,{presentationIds:t}=i;b(t.positionPresentationId,{viewportType:"stack",viewReference:{referencedImageId:e},viewPresentation:{}})}e.overlappingSegments&&E.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[T]),(0,r.useEffect)((()=>{const{unsubscribe:e}=v.subscribe(v.EVENTS.SEGMENT_LOADING_COMPLETE,(({percentComplete:e,numSegments:t})=>{M({percentComplete:e,totalSegments:t})}));return()=>{e()}}),[T]),(0,r.useEffect)((()=>{const e=S.subscribe(S.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=L.get(_);e.includes(t.displaySetInstanceUID)&&D.setDisplaySetsForViewport({viewportId:_,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=y.getToolGroup(f);if(!e)return e=u(y,g,f),()=>{v.removeSegmentationRepresentations(w),y.destroyToolGroup(f)}}),[]),(0,r.useEffect)((()=>(k(T.isHydrated),()=>{v.removeSegmentationRepresentations(w),G.current=null})),[T]);const $=(0,r.useCallback)((async()=>{B();const e=await j({rtDisplaySet:T,viewportId:w});k(e)}),[j,T,B,w]);let q=null;return G.current&&H.displaySetInstanceUID===G.current.displaySet.displaySetInstanceUID?(t&&t.length&&(q=t.map(((e,t)=>e&&r.cloneElement(e,{viewportId:w,key:t})))),(0,r.useEffect)((()=>{I.addComponents([{viewportId:w,id:"viewportStatusComponent",component:p({isHydrated:N,onStatusClick:$}),indexPriority:-100,location:I.LOCATIONS.topLeft},{viewportId:w,id:"viewportActionArrowsComponent",component:r.createElement(s.$IX,{key:"actionArrows",onArrowsClick:F,className:w===_?"visible":"invisible group-hover/pane:visible"}),indexPriority:0,location:I.LOCATIONS.topRight}])}),[_,N,F,$,I,w]),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},P&&r.createElement(C,{className:"h-full w-full",totalNumbers:x.totalSegments,percentComplete:x.percentComplete,loadingText:"Loading RTSTRUCT..."}),z(),q))):null}S.propTypes={displaySets:a().arrayOf(a().object),viewportId:a().string.isRequired,dataSource:a().object,children:a().node};const y=S}}]);
//# sourceMappingURL=9890.bundle.c55ce3ae5f2f567a5df2.js.map