UNPKG

dicomweb-proxy

Version:

A proxy to translate between dicomweb and dimse

2 lines 32 kB
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2932,8402],{11026:(e,t,n)=>{n.d(t,{A:()=>i,v:()=>s});var r=n(40680);const a={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3},s={STANDARD:"standard",SIMPLIFIED:"simplified",NONE:"none"};const i=function({servicesManager:e,extensionManager:t},n,i){const{uiViewportDialogService:o,customizationService:c}=e.services,d=t._appConfig,{viewportId:u,StudyInstanceUID:S,SeriesInstanceUID:l}=i.data||i;return new Promise((async function(e,t){const n=d?.measurementTrackingMode===s.STANDARD;let i;i=d?.measurementTrackingMode===s.NONE?a.NO_NEVER:n?await function(e,t,n){return new Promise((function(s,i){const o=t.getCustomization("viewportNotification.beginTrackingMessage"),c=[{id:"prompt-begin-tracking-cancel",type:"secondary",text:r.A.t("Common:No"),value:a.CANCEL},{id:"prompt-begin-tracking-no-do-not-ask-again",type:"secondary",text:r.A.t("MeasurementTable:No, do not ask again"),value:a.NO_NEVER},{id:"prompt-begin-tracking-yes",type:"primary",text:r.A.t("Common:Yes"),value:a.SET_STUDY_AND_SERIES}],d=t=>{e.hide(),s(t)};e.show({viewportId:n,id:"measurement-tracking-prompt-begin-tracking",type:"info",message:o,actions:c,onSubmit:d,onOutsideClick:()=>{e.hide(),s(a.CANCEL)},onKeyPress:e=>{if("Enter"===e.key){const e=c.find((e=>"prompt-begin-tracking-yes"===e.id));d(e.value)}}})}))}(o,c,u):a.SET_STUDY_AND_SERIES,e({userResponse:i,StudyInstanceUID:S,SeriesInstanceUID:l,viewportId:u})}))}},55844:(e,t,n)=>{n.d(t,{A:()=>w,B:()=>M});var r=n(86326),a=n(97598),s=n.n(a),i=n(70574),o=n(95261),c=n(2836);const d={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4,HYDRATE_REPORT:5},u={id:"measurementTracking",initial:"idle",context:{activeViewportId:null,trackedStudy:"",trackedSeries:[],ignoredSeries:[],prevTrackedStudy:"",prevTrackedSeries:[],prevIgnoredSeries:[],ignoredSRSeriesForHydration:[],isDirty:!1},states:{off:{type:"final"},labellingOnly:{on:{TRACK_SERIES:[{target:"promptLabelAnnotation",actions:["setPreviousState"]},{target:"off"}]}},idle:{entry:"clearContext",on:{TRACK_SERIES:[{target:"promptLabelAnnotation",cond:"isLabelOnMeasure",actions:["setPreviousState"]},{target:"promptBeginTracking",actions:["setPreviousState"]}],SET_TRACKED_SERIES:[{target:"tracking",actions:["setTrackedStudyAndMultipleSeries","setIsDirtyToClean"]}],PROMPT_HYDRATE_SR:{target:"promptHydrateStructuredReport",cond:"hasNotIgnoredSRSeriesForHydration"},RESTORE_PROMPT_HYDRATE_SR:"promptHydrateStructuredReport",HYDRATE_SR:"hydrateStructuredReport",UPDATE_ACTIVE_VIEWPORT_ID:{actions:(0,i.kp)({activeViewportId:(e,t)=>t.activeViewportId})}}},promptBeginTracking:{invoke:{src:"promptBeginTracking",onDone:[{target:"tracking",actions:["setTrackedStudyAndSeries","setIsDirty"],cond:"shouldSetStudyAndSeries"},{target:"labellingOnly",cond:"isLabelOnMeasureAndShouldKillMachine"},{target:"off",cond:"shouldKillMachine"},{target:"idle"}],onError:{target:"idle"}}},tracking:{on:{TRACK_SERIES:[{target:"promptLabelAnnotation",cond:"isLabelOnMeasure",actions:["setPreviousState"]},{target:"promptTrackNewStudy",cond:"isNewStudy"},{target:"promptTrackNewSeries",cond:"isNewSeries"}],UNTRACK_SERIES:[{target:"tracking",actions:["removeTrackedSeries","setIsDirty","clearDisplaySetHydratedState"],cond:"hasRemainingTrackedSeries"},{target:"idle"}],UNTRACK_ALL:[{target:"tracking",actions:["clearContext","setIsDirtyToClean","clearDisplaySetHydratedState","clearAllMeasurements"]},{target:"idle"}],SET_TRACKED_SERIES:[{target:"tracking",actions:["setTrackedStudyAndMultipleSeries"]}],SAVE_REPORT:"promptSaveReport",SET_DIRTY:[{target:"tracking",actions:["setIsDirty"],cond:"shouldSetDirty"},{target:"tracking"}],CHECK_DIRTY:{target:"promptHasDirtyAnnotations",cond:"hasDirtyAndSimplified"},PROMPT_HYDRATE_SR:{target:"promptHydrateStructuredReport",cond:"isSimplifiedConfig",actions:["clearAllMeasurements","clearDisplaySetHydratedState"]}}},promptTrackNewSeries:{invoke:{src:"promptTrackNewSeries",onDone:[{target:"tracking",actions:["addTrackedSeries","setIsDirty"],cond:"shouldAddSeries"},{target:"tracking",actions:["discardPreviouslyTrackedMeasurements","setTrackedStudyAndSeries","setIsDirty"],cond:"shouldSetStudyAndSeries"},{target:"promptSaveReport",cond:"shouldPromptSaveReport"},{target:"tracking"}],onError:{target:"idle"}}},promptTrackNewStudy:{invoke:{src:"promptTrackNewStudy",onDone:[{target:"tracking",actions:["discardPreviouslyTrackedMeasurements","setTrackedStudyAndSeries","setIsDirty"],cond:"shouldSetStudyAndSeries"},{target:"tracking",actions:["ignoreSeries"],cond:"shouldAddIgnoredSeries"},{target:"promptSaveReport",cond:"shouldPromptSaveReport"},{target:"tracking"}],onError:{target:"idle"}}},promptSaveReport:{invoke:{src:"promptSaveReport",onDone:[{target:"tracking",actions:["clearAllMeasurements","clearDisplaySetHydratedState","setIsDirty","updatedViewports"],cond:"simplifiedAndLoadSR"},{target:"idle",actions:["clearAllMeasurements","showStructuredReportDisplaySetInActiveViewport"],cond:"shouldSaveAndContinueWithSameReport"},{target:"tracking",actions:["discardPreviouslyTrackedMeasurements","setTrackedStudyAndSeries"],cond:"shouldSaveAndStartNewReport"},{target:"tracking"}],onError:{target:"idle"}}},promptHydrateStructuredReport:{invoke:{src:"promptHydrateStructuredReport",onDone:[{target:"tracking",actions:["setTrackedStudyAndMultipleSeries","jumpToSameImageInActiveViewport","setIsDirtyToClean"],cond:"shouldHydrateStructuredReport"},{target:"idle",actions:["ignoreHydrationForSRSeries"],cond:"shouldIgnoreHydrationForSR"}],onError:{target:"idle"}}},hydrateStructuredReport:{invoke:{src:"hydrateStructuredReport",onDone:[{target:"tracking",actions:["setTrackedStudyAndMultipleSeries","jumpToSameImageInActiveViewport","setIsDirtyToClean"]}],onError:{target:"idle"}}},promptLabelAnnotation:{invoke:{src:"promptLabelAnnotation",onDone:[{target:"labellingOnly",cond:"wasLabellingOnly"},{target:"promptBeginTracking",cond:"wasIdle"},{target:"promptTrackNewStudy",cond:"wasTrackingAndIsNewStudy"},{target:"promptTrackNewSeries",cond:"wasTrackingAndIsNewSeries"},{target:"tracking",cond:"wasTracking"},{target:"off"}]}},promptHasDirtyAnnotations:{invoke:{src:"promptHasDirtyAnnotations",onDone:[{target:"tracking",actions:["clearAllMeasurements","clearDisplaySetHydratedState","setIsDirty","updatedViewports"],cond:"shouldSetStudyAndSeries"},{target:"promptSaveReport",cond:"shouldPromptSaveReport"},{target:"tracking"}]}}},strict:!0},S={services:{promptBeginTracking:(e,t)=>{},promptTrackNewStudy:(e,t)=>{},promptTrackNewSeries:(e,t)=>{}},actions:{discardPreviouslyTrackedMeasurements:(e,t)=>{console.log("discardPreviouslyTrackedMeasurements: not implemented")},clearAllMeasurements:(e,t)=>{console.log("clearAllMeasurements: not implemented")},jumpToFirstMeasurementInActiveViewport:(e,t)=>{console.warn("jumpToFirstMeasurementInActiveViewport: not implemented")},showStructuredReportDisplaySetInActiveViewport:(e,t)=>{console.warn("showStructuredReportDisplaySetInActiveViewport: not implemented")},clearContext:(0,i.kp)({trackedStudy:"",trackedSeries:[],ignoredSeries:[],prevTrackedStudy:"",prevTrackedSeries:[],prevIgnoredSeries:[]}),setTrackedStudyAndSeries:(0,i.kp)(((e,t)=>({prevTrackedStudy:e.trackedStudy,prevTrackedSeries:e.trackedSeries.slice(),prevIgnoredSeries:e.ignoredSeries.slice(),trackedStudy:t.data.StudyInstanceUID,trackedSeries:[t.data.SeriesInstanceUID],ignoredSeries:[]}))),setTrackedStudyAndMultipleSeries:(0,i.kp)(((e,t)=>{const n=t.StudyInstanceUID||t.data.StudyInstanceUID,r=t.SeriesInstanceUIDs||t.data.SeriesInstanceUIDs;return{prevTrackedStudy:e.trackedStudy,prevTrackedSeries:e.trackedSeries.slice(),prevIgnoredSeries:e.ignoredSeries.slice(),trackedStudy:n,trackedSeries:[...e.trackedSeries,...r],ignoredSeries:[]}})),setIsDirtyToClean:(0,i.kp)(((e,t)=>({isDirty:!1}))),setIsDirty:(0,i.kp)(((e,t)=>({isDirty:!0}))),ignoreSeries:(0,i.kp)(((e,t)=>({prevIgnoredSeries:[...e.ignoredSeries],ignoredSeries:[...e.ignoredSeries,t.data.SeriesInstanceUID]}))),ignoreHydrationForSRSeries:(0,i.kp)(((e,t)=>({ignoredSRSeriesForHydration:[...e.ignoredSRSeriesForHydration,t.data.srSeriesInstanceUID]}))),addTrackedSeries:(0,i.kp)(((e,t)=>({prevTrackedSeries:[...e.trackedSeries],trackedSeries:[...e.trackedSeries,t.data.SeriesInstanceUID]}))),removeTrackedSeries:(0,i.kp)(((e,t)=>({prevTrackedSeries:e.trackedSeries.slice().filter((e=>e!==t.SeriesInstanceUID)),trackedSeries:e.trackedSeries.slice().filter((e=>e!==t.SeriesInstanceUID))}))),setPreviousState:(0,i.kp)(((e,t,n)=>({prevState:n.state.value})))},guards:{shouldSetDirty:(e,t)=>void 0===t.SeriesInstanceUID||e.trackedSeries.includes(t.SeriesInstanceUID),wasLabellingOnly:(e,t,n)=>"labellingOnly"===e.prevState,wasIdle:(e,t,n)=>"idle"===e.prevState,wasTracking:(e,t,n)=>"tracking"===e.prevState,wasTrackingAndIsNewStudy:(e,t,n)=>"tracking"===e.prevState&&!e.ignoredSeries.includes(t.data.SeriesInstanceUID)&&e.trackedStudy!==t.data.StudyInstanceUID,wasTrackingAndIsNewSeries:(e,t,n)=>"tracking"===e.prevState&&!e.ignoredSeries.includes(t.data.SeriesInstanceUID)&&!e.trackedSeries.includes(t.data.SeriesInstanceUID),shouldKillMachine:(e,t)=>t.data&&t.data.userResponse===d.NO_NEVER,shouldAddSeries:(e,t)=>t.data&&t.data.userResponse===d.ADD_SERIES,shouldSetStudyAndSeries:(e,t)=>t.data&&t.data.userResponse===d.SET_STUDY_AND_SERIES,shouldAddIgnoredSeries:(e,t)=>t.data&&t.data.userResponse===d.NO_NOT_FOR_SERIES,shouldPromptSaveReport:(e,t)=>t.data&&t.data.userResponse===d.CREATE_REPORT,shouldIgnoreHydrationForSR:(e,t)=>t.data&&t.data.userResponse===d.CANCEL,shouldSaveAndContinueWithSameReport:(e,t)=>t.data&&t.data.userResponse===d.CREATE_REPORT&&!0===t.data.isBackupSave,shouldSaveAndStartNewReport:(e,t)=>t.data&&t.data.userResponse===d.CREATE_REPORT&&!1===t.data.isBackupSave,shouldHydrateStructuredReport:(e,t)=>t.data&&t.data.userResponse===d.HYDRATE_REPORT,hasRemainingTrackedSeries:(e,t)=>e.trackedSeries.length>1||!e.trackedSeries.includes(t.SeriesInstanceUID),hasNotIgnoredSRSeriesForHydration:(e,t)=>!e.ignoredSRSeriesForHydration.includes(t.SeriesInstanceUID),isNewStudy:(e,t)=>!e.ignoredSeries.includes(t.SeriesInstanceUID)&&e.trackedStudy!==t.StudyInstanceUID,isNewSeries:(e,t)=>!e.ignoredSeries.includes(t.SeriesInstanceUID)&&!e.trackedSeries.includes(t.SeriesInstanceUID)}};var l=n(11026),p=n(34113);const m=function({servicesManager:e,extensionManager:t,commandsManager:n,appConfig:r},a,s){const{displaySetService:i}=e.services,{viewportId:o,displaySetInstanceUID:c}=s,d=i.getDisplaySetByUID(c);return new Promise(((a,i)=>{const u=(0,p.hydrateStructuredReport)({servicesManager:e,extensionManager:t,commandsManager:n,appConfig:r},c),S=u.StudyInstanceUID,l=u.SeriesInstanceUIDs;a({displaySetInstanceUID:s.displaySetInstanceUID,srSeriesInstanceUID:d.SeriesInstanceUID,viewportId:o,StudyInstanceUID:S,SeriesInstanceUIDs:l})}))};var g=n(45981);const I=({servicesManager:e,extensionManager:t},n,r)=>{const{customizationService:a}=e.services;return a.getCustomization("measurement.promptBeginTracking")({servicesManager:e,extensionManager:t},n,r)},y=({servicesManager:e,extensionManager:t,commandsManager:n,appConfig:r},a,s)=>{const{customizationService:i}=e.services;return i.getCustomization("measurement.promptHydrateStructuredReport")({servicesManager:e,extensionManager:t,commandsManager:n,appConfig:r},a,s)},v=({servicesManager:e,extensionManager:t},n,r)=>{const{customizationService:a}=e.services;return a.getCustomization("measurement.promptTrackNewSeries")({servicesManager:e,extensionManager:t},n,r)},D=({servicesManager:e,extensionManager:t},n,r)=>{const{customizationService:a}=e.services;return a.getCustomization("measurement.promptTrackNewStudy")({servicesManager:e,extensionManager:t},n,r)},E=({servicesManager:e},t,n)=>{const{customizationService:r}=e.services;return r.getCustomization("measurement.promptLabelAnnotation")({servicesManager:e},t,n)},R=({servicesManager:e,commandsManager:t,extensionManager:n},r,a)=>{const{customizationService:s}=e.services;return s.getCustomization("measurement.promptSaveReport")({servicesManager:e,commandsManager:t,extensionManager:n},r,a)},T=({servicesManager:e,commandsManager:t,extensionManager:n},r,a)=>{const{customizationService:s}=e.services;return s.getCustomization("measurement.promptHasDirtyAnnotations")({servicesManager:e,commandsManager:t,extensionManager:n},r,a)},k=r.createContext();k.displayName="TrackedMeasurementsContext";const M=()=>(0,r.useContext)(k),A="@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr";function C({servicesManager:e,commandsManager:t,extensionManager:n},{children:a}){const[s]=(0,g.r)(),[p,M]=(0,c.ihW)(),{activeViewportId:C,viewports:w}=p,{measurementService:f,displaySetService:N,customizationService:_}=e.services,U=Object.assign({},S);U.actions=Object.assign({},U.actions,{jumpToFirstMeasurementInActiveViewport:(e,t)=>{const{trackedStudy:n,trackedSeries:r}=e,{viewportId:a}=t.data,s=f.getMeasurements().filter((e=>n===e.referenceStudyUID&&r.includes(e.referenceSeriesUID)));console.log("jumping to measurement reset viewport",a,s[0]);const i=s[0].displaySetInstanceUID,o=N.getDisplaySetByUID(i).images,c=o[0].imageId.startsWith("volumeId"),d=s[0].data;let u=0;!c&&d&&(u=o.findIndex((e=>{const t=Object.keys(d)[0].substring(8);return e.imageId===t})),-1===u&&(console.warn("Could not find image index for tracked measurement, using 0"),u=0)),M.setDisplaySetsForViewport({viewportId:a,displaySetInstanceUIDs:[i],viewportOptions:{initialImageOptions:{index:u}}})},jumpToSameImageInActiveViewport:(e,n)=>{const{trackedStudy:r,trackedSeries:a}=e,{viewportId:s}=n.data,i=f.getMeasurements(),o=i.filter((e=>r===e.referenceStudyUID&&a.includes(e.referenceSeriesUID)));if(!o?.length)return void console.warn("Didn't find any tracked measurements",i,r,a);const c=o[o.length-1],d=c.displaySetInstanceUID;t.runCommand("updateStoredPositionPresentation",{viewportId:s,displaySetInstanceUID:d,referencedImageId:c.referencedImageId}),M.setDisplaySetsForViewport({viewportId:s,displaySetInstanceUIDs:[d]})},showStructuredReportDisplaySetInActiveViewport:(e,t)=>{if(t.data.createdDisplaySetInstanceUIDs.length>0){const e=t.data.createdDisplaySetInstanceUIDs[0];M.setDisplaySetsForViewport({viewportId:t.data.viewportId,displaySetInstanceUIDs:[e]})}},discardPreviouslyTrackedMeasurements:(e,t)=>{const n=f.getMeasurements().filter((t=>e.prevTrackedSeries.includes(t.referenceSeriesUID))).map((e=>e.id));for(let e=0;e<n.length;e++)f.remove(n[e])},clearAllMeasurements:(e,t)=>{const n=f.getMeasurements().map((e=>e.uid));for(let e=0;e<n.length;e++)f.remove(n[e]);f.setIsMeasurementDeletedIndividually(!1)},clearDisplaySetHydratedState:(e,t)=>{const{displaySetInstanceUID:n}=t.data??t,r=N.getActiveDisplaySets();r?.forEach((e=>{"SR"===e.Modality&&e.displaySetInstanceUID!==n&&e.isHydrated&&(e.isHydrated=!1,e.isLoaded=!1)}))},updatedViewports:(t,n)=>{const{hangingProtocolService:r}=e.services,{displaySetInstanceUID:a,viewportId:s}=n.data??n,i=r.getViewportsRequireUpdate(s,a);M.setDisplaySetsForViewports(i)}}),U.services=Object.assign({},U.services,{promptBeginTracking:I.bind(null,{servicesManager:e,extensionManager:n,appConfig:s}),promptTrackNewSeries:v.bind(null,{servicesManager:e,extensionManager:n,appConfig:s}),promptTrackNewStudy:D.bind(null,{servicesManager:e,extensionManager:n,appConfig:s}),promptSaveReport:R.bind(null,{servicesManager:e,commandsManager:t,extensionManager:n,appConfig:s}),promptHydrateStructuredReport:y.bind(null,{servicesManager:e,extensionManager:n,commandsManager:t,appConfig:s}),promptHasDirtyAnnotations:T.bind(null,{servicesManager:e,extensionManager:n,commandsManager:t,appConfig:s}),hydrateStructuredReport:m.bind(null,{servicesManager:e,extensionManager:n,commandsManager:t,appConfig:s}),promptLabelAnnotation:E.bind(null,{servicesManager:e,extensionManager:n,commandsManager:t})}),U.guards=Object.assign({},U.guards,{isLabelOnMeasure:(e,t,n)=>{const r=_.getCustomization("measurementLabels");return r?.labelOnMeasure},isLabelOnMeasureAndShouldKillMachine:(e,t,n)=>{const r=_.getCustomization("measurementLabels");return t.data&&t.data.userResponse===d.NO_NEVER&&r?.labelOnMeasure},isSimplifiedConfig:(e,t,n)=>s?.measurementTrackingMode===l.v.SIMPLIFIED,simplifiedAndLoadSR:(e,t,n)=>s?.measurementTrackingMode===l.v.SIMPLIFIED&&!1===t.data.isBackupSave,hasDirtyAndSimplified:(e,t,n)=>{const r=f.getMeasurements(),a=r.some((e=>e.isDirty))||r.length&&f.getIsMeasurementDeletedIndividually();return s?.measurementTrackingMode===l.v.SIMPLIFIED&&a}});const h=(0,r.useMemo)((()=>(0,i.u5)(u,U)),[]),[O,b]=(0,o.zl)(h);return(0,r.useEffect)((()=>{b("UPDATE_ACTIVE_VIEWPORT_ID",{activeViewportId:C})}),[C,b]),(0,r.useEffect)((()=>{(async()=>{if(w.size>0){const t=w.get(C);if(!t||!t?.displaySetInstanceUIDs?.length)return;const{displaySetService:n}=e.services,r=n.getDisplaySetByUID(t.displaySetInstanceUIDs[0]);if(!r)return;if(r.SOPClassHandlerId===A&&!r.isLoaded&&r.load&&await r.load(),r.SOPClassHandlerId===A&&!0===r.isRehydratable&&!r.isHydrated){const e={displaySetInstanceUID:r.displaySetInstanceUID,SeriesInstanceUID:r.SeriesInstanceUID,viewportId:C},t=s?.disableConfirmationPrompts;b(t?"HYDRATE_SR":"PROMPT_HYDRATE_SR",e)}}})()}),[O,C,b,e.services,w,s]),(0,r.useEffect)((()=>{t.registerCommand("DEFAULT","loadTrackedSRMeasurements",{commandFn:e=>b("HYDRATE_SR",e)})}),[t,b]),r.createElement(k.Provider,{value:[O,b]},a)}C.propTypes={children:s().oneOf([s().func,s().node]),appConfig:s().object};const w=function({servicesManager:e,extensionManager:t,commandsManager:n}){const r=C.bind(null,{servicesManager:e,extensionManager:t,commandsManager:n});return[{name:"TrackedMeasurementsContext",context:k,provider:r}]}},3427:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j,measurementTrackingMode:()=>U.v});var r=n(86326),a=n(55844),s=n(97598),i=n.n(s),o=n(62037),c=n(40565),d=n(2836);function u({hide:e,onConfirm:t,message:n}){return r.createElement("div",{className:"text-foreground text-[13px]"},r.createElement("div",null,r.createElement("p",null,n),r.createElement("p",{className:"mt-2"},"This action cannot be undone and will delete all your existing measurements.")),r.createElement(d.esu,{className:"mt-4"},r.createElement(d.esu.Right,null,r.createElement(d.esu.Secondary,{onClick:e},"Cancel"),r.createElement(d.esu.Primary,{onClick:()=>{t(),e()}},"Untrack"))))}const S=["SR","SEG","SM","RTSTRUCT","RTPLAN","RTDOSE","DOC","OT","PMAP"];function l({getImageSrc:e,getStudiesForPatientByMRN:t,requestDisplaySetCreationForStudy:n,dataSource:s}){const{servicesManager:i}=(0,o.Jg)(),{displaySetService:d,uiModalService:l,measurementService:p,viewportGridService:m}=i.services,[g,I]=(0,a.B)(),{trackedSeries:y}=g.context,v=e=>{if("SR"===d.getDisplaySetByUID(e).Modality){const t=m.getActiveViewportId();I("CHECK_DIRTY",{viewportId:t,displaySetInstanceUID:e})}};(0,r.useEffect)((()=>{const e=m.subscribe(m.EVENTS.VIEWPORT_ONDROP_HANDLED,(({eventData:e})=>{v(e.displaySetInstanceUID)}));return()=>{e.unsubscribe()}}),[]);const D=e=>S.includes(e.Modality)||e?.unsupported?"thumbnailNoImage":"thumbnailTracked";return r.createElement(c.A,{getImageSrc:e,getStudiesForPatientByMRN:t,requestDisplaySetCreationForStudy:n,dataSource:s,customMapDisplaySets:(e,t,n,r)=>{const a=[],s=[];return e.filter((e=>!e.excludeFromThumbnailBrowser)).forEach((e=>{const{thumbnailSrc:r,displaySetInstanceUID:i}=e,o=D(e),c="thumbnailTracked"===o?a:s,d=t?.[i];c.push({displaySetInstanceUID:i,description:e.SeriesDescription||"",seriesNumber:e.SeriesNumber,modality:e.Modality,seriesDate:e.SeriesDate?new Date(e.SeriesDate).toLocaleDateString():"",numInstances:e.numImageFrames,loadingProgress:d,countIcon:e.countIcon,messages:e.messages,StudyInstanceUID:e.StudyInstanceUID,componentType:o,imageSrc:r||n[i],dragData:{type:"displayset",displaySetInstanceUID:i},isTracked:y.includes(e.SeriesInstanceUID),isHydratedForDerivedDisplaySet:e.isHydrated})})),[...a,...s]},onClickUntrack:e=>{l.show({title:"Untrack Series",content:u,contentProps:{onConfirm:()=>{const t=d.getDisplaySetByUID(e);I("UNTRACK_SERIES",{SeriesInstanceUID:t.SeriesInstanceUID});p.getMeasurements().forEach((e=>{e.referenceSeriesUID===t.SeriesInstanceUID&&p.remove(e.uid)}))},message:"Are you sure you want to untrack this series?"}})},onDoubleClickThumbnailHandlerCallBack:v})}l.propTypes={dataSource:i().shape({getImageIdsForDisplaySet:i().func.isRequired}).isRequired,getImageSrc:i().func.isRequired,getStudiesForPatientByMRN:i().func.isRequired,requestDisplaySetCreationForStudy:i().func.isRequired};const p=function(e,t){return new Promise(((n,r)=>{const a=document.createElement("canvas");e.utilities.loadImageToCanvas({canvas:a,imageId:t,thumbnail:!0}).then((e=>{n(a.toDataURL())})).catch(r)}))};var m=n(43984);const g=function(){const{extensionManager:e}=(0,o.Jg)(),t=e.getActiveDataSource()[0],n=function(e){const t=e.getModuleEntry("@ohif/extension-default.utilityModule.common"),{getStudiesForPatientByMRN:n}=t.exports;return n}(e).bind(null,t),a=(0,r.useCallback)(function(e){const t=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common");try{const{cornerstone:e}=t.exports.getCornerstoneLibraries();return p.bind(null,e)}catch(e){throw new Error("Required command not found")}}(e),[]),s=m.requestDisplaySetCreationForStudy.bind(null,t);return r.createElement(l,{dataSource:t,getImageSrc:a,getStudiesForPatientByMRN:n,requestDisplaySetCreationForStudy:s})};var I=n(7241);function y(){return y=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},y.apply(null,arguments)}const{filterAnd:v,filterPlanarMeasurement:D,filterMeasurementsBySeriesUID:E}=o.Wp.MeasurementFilters;const R=function(e){const[t]=(0,d.ihW)(),{measurementService:n,uiModalService:s}=e.servicesManager.services,[i,o]=(0,a.B)(),{trackedStudy:c,trackedSeries:S}=i.context,l=c?v(D,E(S)):D,p=()=>{o("UNTRACK_ALL",{})},m={createSR:({StudyInstanceUID:e})=>{o("SAVE_REPORT",{viewportId:t.activeViewportId,isBackupSave:!0,StudyInstanceUID:e,measurementFilter:l})},onDelete:()=>{n.getMeasurements().some((e=>e.isDirty))?s.show({title:"Untrack Study",content:u,contentProps:{onConfirm:p,message:"Are you sure you want to untrack study and delete all measurements?"}}):p()}},g=e=>r.createElement(d.$m7,{asChild:!0,className:"px-0"},r.createElement("div",{"data-cy":"TrackingHeader"},r.createElement(I.StudySummaryFromMetadata,y({},e,{actions:m}))));return r.createElement(d.FKN,null,r.createElement("div",{"data-cy":"trackedMeasurements-panel"},r.createElement(I.PanelMeasurement,{measurementFilter:l,emptyComponent:()=>r.createElement("div",{"data-cy":"trackedMeasurements-panel"},r.createElement(d.VaM,{title:"Measurements",isExpanded:!1},r.createElement(d.VaM.Body,null))),sourceChildren:e.children},r.createElement(I.StudyMeasurements,{grouping:e.grouping},r.createElement(I.AccordionGroup.Trigger,{key:"trackingMeasurementsHeader",asChild:!0},r.createElement(g,{key:"trackingHeadChild"})),r.createElement(I.MeasurementsOrAdditionalFindings,{key:"measurementsOrAdditionalFindings",activeStudyUID:c,customHeader:I.StudyMeasurementsActions,measurementFilter:l,actions:m})))))};var T=n(40680);function k(){return k=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},k.apply(null,arguments)}const M=function({commandsManager:e,extensionManager:t,servicesManager:n}){return[{name:"seriesList",iconName:"tab-studies",iconLabel:"Studies",label:T.A.t("SidePanel:Studies"),component:e=>r.createElement(g,e)},{name:"trackedMeasurements",iconName:"tab-linear",iconLabel:"Measure",label:T.A.t("SidePanel:Measurements"),component:a=>r.createElement(R,k({},a,{key:"trackedMeasurements-panel",commandsManager:e,extensionManager:t,servicesManager:n}))}]};function A(){return A=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},A.apply(null,arguments)}const C=r.lazy((()=>n.e(9862).then(n.bind(n,49862)))),w=e=>r.createElement(r.Suspense,{fallback:r.createElement("div",null,"Loading...")},r.createElement(C,e));const f=function({servicesManager:e,commandsManager:t,extensionManager:n}){return[{name:"cornerstone-tracked",component:a=>r.createElement(w,A({servicesManager:e,commandsManager:t,extensionManager:n},a)),isReferenceViewable:t=>I.utils.isReferenceViewable({...t,servicesManager:e})}]},N=JSON.parse('{"UU":"@ohif/extension-measurement-tracking"}').UU;var _=n(16076),U=n(11026);const h={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4};const O=function({servicesManager:e},t,n){const{viewportId:r,displaySetInstanceUID:a}=n.data||n;return new Promise((async function(t,n){const{uiViewportDialogService:s,customizationService:i}=e.services,o=await function(e,t,n){return new Promise((function(r,a){const s=t.getCustomization("viewportNotification.discardDirtyMessage"),i=[{id:"cancel",type:"cancel",text:"Cancel",value:h.CANCEL},{id:"discard-existing",type:"secondary",text:"No, discard existing",value:h.SET_STUDY_AND_SERIES},{id:"save-existing",type:"primary",text:"Yes",value:h.CREATE_REPORT}],o=t=>{e.hide(),r(t)};e.show({viewportId:n,id:"measurement-tracking-prompt-dirty-measurement",type:"info",message:s,actions:i,onSubmit:o,onOutsideClick:()=>{e.hide(),r(h.CANCEL)},onKeyPress:e=>{if("Enter"===e.key){const e=i.find((e=>"save-existing"===e.id));o(e.value)}}})}))}(s,i,r);t({displaySetInstanceUID:a,userResponse:o,viewportId:r,isBackupSave:!1})}))};var b=n(34113);const P={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4,HYDRATE_REPORT:5};const x=function({servicesManager:e,extensionManager:t,commandsManager:n,appConfig:r},a,s){const{uiViewportDialogService:i,displaySetService:o,customizationService:c}=e.services,{viewportId:d,displaySetInstanceUID:u}=s,S=o.getDisplaySetByUID(u);return new Promise((async function(a,o){const l=r?.measurementTrackingMode===U.v.STANDARD?await function(e,t,n){return new Promise((function(r,a){const s=t.getCustomization("viewportNotification.hydrateSRMessage"),i=[{id:"no-hydrate",type:"secondary",text:"No",value:P.CANCEL},{id:"yes-hydrate",type:"primary",text:"Yes",value:P.HYDRATE_REPORT}],o=t=>{e.hide(),r(t)};e.show({viewportId:n,type:"info",message:s,actions:i,onSubmit:o,onOutsideClick:()=>{e.hide(),r(P.CANCEL)},onKeyPress:e=>{if("Enter"===e.key){const e=i.find((e=>e.value===P.HYDRATE_REPORT));o(e.value)}}})}))}(i,c,d):P.HYDRATE_REPORT;let p,m;if(l===P.HYDRATE_REPORT){console.warn("!! HYDRATING STRUCTURED REPORT");const a=(0,b.hydrateStructuredReport)({servicesManager:e,extensionManager:t,commandsManager:n,appConfig:r},u);p=a.StudyInstanceUID,m=a.SeriesInstanceUIDs}a({userResponse:l,displaySetInstanceUID:s.displaySetInstanceUID,srSeriesInstanceUID:S.SeriesInstanceUID,viewportId:d,StudyInstanceUID:p,SeriesInstanceUIDs:m})}))},H={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4};const L=function({servicesManager:e,extensionManager:t},n,r){const{UIViewportDialogService:a,customizationService:s}=e.services,{viewportId:i,StudyInstanceUID:o,SeriesInstanceUID:c}=r.data||r;return new Promise((async function(e,r){const d=t._appConfig;let u=d?.measurementTrackingMode===U.v.STANDARD?await function(e,t,n){return new Promise((function(r,a){const s=t.getCustomization("viewportNotification.trackNewSeriesMessage"),i=[{type:"secondary",text:"Cancel",value:H.CANCEL},{type:"primary",text:"Create new report",value:H.CREATE_REPORT},{type:"primary",text:"Add to existing report",value:H.ADD_SERIES}],o=t=>{e.hide(),r(t)};e.show({viewportId:n,type:"info",message:s,actions:i,onSubmit:o,onOutsideClick:()=>{e.hide(),r(H.CANCEL)}})}))}(a,s,i):H.ADD_SERIES;u===H.CREATE_REPORT&&(u=n.isDirty?await function(e,t,n){return new Promise((function(r,a){const s=t.getCustomization("viewportNotification.discardSeriesMessage"),i=[{type:"secondary",text:"Cancel",value:H.CANCEL},{type:"secondary",text:"Save",value:H.CREATE_REPORT},{type:"primary",text:"Discard",value:H.SET_STUDY_AND_SERIES}],o=t=>{e.hide(),r(t)};e.show({viewportId:n,type:"warning",message:s,actions:i,onSubmit:o,onOutsideClick:()=>{e.hide(),r(H.CANCEL)}})}))}(a,s,i):H.SET_STUDY_AND_SERIES),e({userResponse:u,StudyInstanceUID:o,SeriesInstanceUID:c,viewportId:i,isBackupSave:!1})}))},V={NO_NEVER:-1,CANCEL:0,CREATE_REPORT:1,ADD_SERIES:2,SET_STUDY_AND_SERIES:3,NO_NOT_FOR_SERIES:4};const F=function({servicesManager:e,extensionManager:t},n,r){const{uiViewportDialogService:a,customizationService:s}=e.services,{viewportId:i,StudyInstanceUID:o,SeriesInstanceUID:c}=r.data||r;return new Promise((async function(e,r){const d=t._appConfig,u=d?.measurementTrackingMode===U.v.STANDARD,S=d?.measurementTrackingMode===U.v.SIMPLIFIED;let l=u?await function(e,t,n){return new Promise((function(r,a){const s=t.getCustomization("viewportNotification.trackNewStudyMessage"),i=[{type:"cancel",text:T.A.t("MeasurementTable:No"),value:V.CANCEL},{type:"secondary",text:T.A.t("MeasurementTable:No, do not ask again"),value:V.NO_NOT_FOR_SERIES},{type:"primary",text:T.A.t("MeasurementTable:Yes"),value:V.SET_STUDY_AND_SERIES}],o=t=>{e.hide(),r(t)};e.show({viewportId:n,type:"info",message:s,actions:i,onSubmit:o,onOutsideClick:()=>{e.hide(),r(V.CANCEL)},onKeyPress:e=>{if("Enter"===e.key){const e=i.find((e=>e.value===V.SET_STUDY_AND_SERIES));o(e.value)}}})}))}(a,s,i):V.SET_STUDY_AND_SERIES;l===V.SET_STUDY_AND_SERIES&&(l=n.isDirty&&(u||S)?await function(e,t,n){return new Promise((function(r,a){const s=t.getCustomization("viewportNotification.discardStudyMessage"),i=[{type:"cancel",text:"Cancel",value:V.CANCEL},{type:"secondary",text:"No, discard previously tracked series & measurements",value:V.SET_STUDY_AND_SERIES},{type:"primary",text:"Yes",value:V.CREATE_REPORT}],o=t=>{e.hide(),r(t)};e.show({viewportId:n,type:"warning",message:s,actions:i,onSubmit:o,onOutsideClick:()=>{e.hide(),r(V.CANCEL)}})}))}(a,s,i):V.SET_STUDY_AND_SERIES),e({userResponse:l,StudyInstanceUID:o,SeriesInstanceUID:c,viewportId:i,isBackupSave:!1})}))},Y={"measurement.promptBeginTracking":U.A,"measurement.promptHydrateStructuredReport":x,"measurement.promptTrackNewSeries":L,"measurement.promptTrackNewStudy":F,"measurement.promptLabelAnnotation":m.promptLabelAnnotation,"measurement.promptSaveReport":m.promptSaveReport,"measurement.promptHasDirtyAnnotations":O};const B={callbacks:[({activeViewportId:e,servicesManager:t,isHangingProtocolLayout:n,appConfig:r})=>async a=>{const{hangingProtocolService:s,viewportGridService:i,uiNotificationService:o}=t.services;let c=[];const d=e,u=K({servicesManager:t,appConfig:r,displaySetInstanceUID:a});try{u||(c=s.getViewportsRequireUpdate(d,a,n),i.setDisplaySetsForViewports(c))}catch(e){console.warn(e),o.show({title:"Thumbnail Double Click",message:"The selected display sets could not be added to the viewport.",type:"error",duration:3e3})}}]},z=async e=>{const t=K(e);return Promise.resolve({handled:t})},K=e=>{const{servicesManager:t,appConfig:n,displaySetInstanceUID:r}=e,a=n.measurementTrackingMode===U.v.SIMPLIFIED,{measurementService:s,displaySetService:i}=t.services,o=s.getMeasurements(),c=o.some((e=>e.isDirty))||o.length&&s.getIsMeasurementDeletedIndividually();return"SR"===i.getDisplaySetByUID(r).Modality&&a&&c},j={id:N,getContextModule:a.A,getPanelModule:M,getViewportModule:f,onModeEnter({servicesManager:e}){const{toolbarService:t,customizationService:n}=e.services;n.setCustomizations({"studyBrowser.thumbnailDoubleClickCallback":{$set:B},customOnDropHandler:{$set:z}}),t.addButtons([{id:"loadSRMeasurements",component:e=>r.createElement(d.N8H,e,_.A.t("Common:LOAD")),props:{commands:["loadTrackedSRMeasurements"]}}],!0)},getCustomizationModule:function(){return[{name:"default",value:{...Y}}]}}}}]); //# sourceMappingURL=2932.bundle.4b1a49548668859419d8.js.map