UNPKG

modified-dicom-pacs

Version:

A modified version of DICOM PACS implementation

2 lines 6.88 kB
"use strict";(globalThis.webpackChunk=globalThis.webpackChunk||[]).push([[121],{23121:(e,t,n)=>{n.r(t),n.d(t,{default:()=>S});var r=n(41766),o=n(11374),s=n.n(o),a=n(5085);const i={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const l=function({servicesManager:e,rtDisplaySet:t,viewportId:n,toolGroupId:r="default",preHydrateCallbacks:o,hydrateRTDisplaySet:s}){const{uiViewportDialogService:l}=e.services;return new Promise((async function(c,u){const p=await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",s=[{type:a.Ny.NW.secondary,text:"No",value:i.CANCEL},{type:a.Ny.NW.primary,text:"Yes",value:i.HYDRATE_SEG}],l=t=>{e.hide(),n(t)};e.show({viewportId:t,type:"info",message:o,actions:s,onSubmit:l,onOutsideClick:()=>{e.hide(),n(i.CANCEL)},onKeyPress:e=>{"Enter"===e.key&&l(i.HYDRATE_SEG)}})}))}(l,n);if(p===i.HYDRATE_SEG){o?.forEach((e=>{e()}));c(await s({rtDisplaySet:t,viewportId:n,toolGroupId:r,servicesManager:e}))}}))};var c=n(80619);function u({isHydrated:e,onStatusClick:t}){let n=null,o=null;switch(e){case!0:o=()=>r.createElement(a.In,{name:"status-alert"}),n=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>r.createElement(a.In,{className:"text-aqua-pale",name:"status-untracked"}),n=()=>r.createElement("div",null,"Click LOAD to load RTSTRUCT.")}const s=()=>{const{t:n}=(0,c.Bd)("Common"),s=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(o,null),r.createElement("span",{className:"ml-1"},"RTSTRUCT")),!e&&r.createElement("div",{className:"bg-primary-main hover:bg-primary-light ml-1 cursor-pointer rounded px-1.5 hover:text-black",onMouseUp:t},s))};return r.createElement(r.Fragment,null,n&&r.createElement(a.m_,{content:r.createElement(n,null),position:"bottom-left"},r.createElement(s,null)),!n&&r.createElement(s,null))}const p=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r)};function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},d.apply(this,arguments)}function m(e){const{children:t,displaySets:n,viewportOptions:o,servicesManager:s,extensionManager:i,commandsManager:c}=e,{displaySetService:m,toolGroupService:S,segmentationService:v,uiNotificationService:y,customizationService:E,viewportActionCornersService:g}=s.services,w=o.viewportId,f=`RTToolGroup-${w}`;if(n.length>1)throw new Error("RT viewport should only have a single display set");const I=n[0],[b,T]=(0,a.ih)(),[h,D]=(0,r.useState)(!1),[C,N]=(0,r.useState)(1),[k,A]=(0,r.useState)(I.isHydrated),[O,R]=(0,r.useState)(!I.isLoaded),[P,x]=(0,r.useState)(null),[G,M]=(0,r.useState)({percentComplete:null,totalSegments:null}),L=(0,r.useRef)(null),{viewports:U,activeViewportId:_}=b,H=I.getReferenceDisplaySet(),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);L.current={displaySet:H,metadata:V};const j=()=>{x(null)},F=(0,r.useCallback)((()=>{b?.viewports.forEach((({viewportId:e})=>{c.runCommand("storePresentation",{viewportId:e})}))}),[b]),Y=({rtDisplaySet:e,viewportId:t})=>{c.runCommand("loadSegmentationDisplaySetsForViewport",{displaySets:[e],viewportId:t})},B=(0,r.useCallback)((()=>{const{component:t}=i.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=L.current;return r.createElement(t,d({},e,{displaySets:[n,I],viewportOptions:{viewportType:"volume",toolGroupId:f,orientation:o.orientation,viewportId:o.viewportId},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{x(e.detail.element)})(t)},onElementDisabled:j}))}),[w,I,f]),q=(0,r.useCallback)((e=>{const t=I.displaySetInstanceUID,n=v.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let s=C+e;s>=o-1?s=1:0===s&&(s=o-1),v.jumpToSegmentCenter(t,s,f),N(s)}),[C]);(0,r.useEffect)((()=>{O||l({servicesManager:s,viewportId:w,rtDisplaySet:I,preHydrateCallbacks:[F],hydrateRTDisplaySet:Y}).then((e=>{e&&A(!0)}))}),[s,w,I,O]),(0,r.useEffect)((()=>{const{unsubscribe:e}=v.subscribe(v.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.rtDisplaySet.displaySetInstanceUID===I.displaySetInstanceUID&&R(!1),e.overlappingSegments&&y.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[I]),(0,r.useEffect)((()=>{const{unsubscribe:e}=v.subscribe(v.EVENTS.SEGMENT_LOADING_COMPLETE,(({percentComplete:e,numSegments:t})=>{M({percentComplete:e,totalSegments:t})}));return()=>{e()}}),[I]),(0,r.useEffect)((()=>{const e=m.subscribe(m.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=U.get(_);e.includes(t.displaySetInstanceUID)&&T.setDisplaySetsForViewport({viewportId:_,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=S.getToolGroup(f);if(!e)return e=p(S,E,f),D(!0),()=>{v.removeSegmentationRepresentationFromToolGroup(f),S.destroyToolGroup(f)}}),[]),(0,r.useEffect)((()=>(A(I.isHydrated),()=>{v.removeSegmentationRepresentationFromToolGroup(f),L.current=null})),[I]);let W=null;if(!L.current||H.displaySetInstanceUID!==L.current.displaySet.displaySetInstanceUID)return null;t&&t.length&&(W=t.map(((e,t)=>e&&r.cloneElement(e,{viewportId:w,key:t}))));const $=(0,r.useCallback)((async()=>{F();const e=await Y({rtDisplaySet:I,viewportId:w});A(e)}),[Y,I,F,w]);return(0,r.useEffect)((()=>{g.setComponents([{viewportId:w,id:"viewportStatusComponent",component:u({isHydrated:k,onStatusClick:$}),indexPriority:-100,location:g.LOCATIONS.topLeft},{viewportId:w,id:"viewportActionArrowsComponent",component:r.createElement(a.$I,{key:"actionArrows",onArrowsClick:q,className:w===_?"visible":"invisible group-hover:visible"}),indexPriority:0,location:g.LOCATIONS.topRight}])}),[_,k,q,$,g,w]),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},O&&r.createElement(a.pT,{className:"h-full w-full",totalNumbers:G.totalSegments,percentComplete:G.percentComplete,loadingText:"Loading RTSTRUCT..."}),B(),W))}m.propTypes={displaySets:s().arrayOf(s().object),viewportId:s().string.isRequired,dataSource:s().object,children:s().node,customProps:s().object},m.defaultProps={customProps:{}};const S=m}}]); //# sourceMappingURL=121.bundle.4a7d29cc6f09edf7eca8.js.map