@ohif/app 3.7.0-beta.62 → 3.7.0-beta.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{12.bundle.80f93cf58aa62145ca65.js → 12.bundle.c80ff2e8651297d7aec8.js} +2 -2
- package/dist/{125.bundle.1ae4c6313c31cd0502cc.js → 125.bundle.aeaad798561853bf6939.js} +2 -2
- package/dist/{128.bundle.e9cd21f29f78e27c11c9.js → 128.bundle.8d7db97e0d90ba8be751.js} +3 -3
- package/dist/{150.bundle.a9e3e6a75a8374f87913.js → 150.bundle.0ed8ccb7f15a603151b6.js} +17 -11
- package/dist/{181.bundle.70c4340cbe29bd14aafc.js → 181.bundle.1accc89eac7f1b4bc752.js} +96 -92
- package/dist/{236.bundle.a99d4eca55b331878a02.js → 236.bundle.308648f0e447eaaeda67.js} +37 -62
- package/dist/{250.bundle.0d497b1b8afb0cbbe02f.js → 250.bundle.1543b1b8466d43f3465d.js} +17 -13
- package/dist/{281.bundle.1e8645e250e4cd6ba6ca.js → 281.bundle.015cf8cb9625c7fb3dd5.js} +2 -2
- package/dist/{30.bundle.427ef5434fd52819af9f.js → 30.bundle.4d8b67d4ed86238948ca.js} +64 -62
- package/dist/{348.bundle.f35989e2daa0e3ab2e96.js → 348.bundle.81366dddd24e78113662.js} +3 -3
- package/dist/{359.bundle.cf89aee1673022259ad4.js → 359.bundle.1c14405c9d974bb5a30f.js} +3 -3
- package/dist/{362.bundle.2a151f9133ec69afe62f.js → 362.bundle.11a6a0792b8042b5c81b.js} +127 -123
- package/dist/{410.bundle.02c8a49bdca46910e344.js → 410.bundle.c0ed86f4d3cbc0939903.js} +3 -3
- package/dist/{451.bundle.a573877dff7b43382138.js → 451.bundle.b3d9a67d4b2a962be96b.js} +26 -26
- package/dist/{471.bundle.e9ecd59867a19e323234.js → 471.bundle.87b1c57d4c04ae35cb88.js} +26 -26
- package/dist/{506.bundle.530f88c83a16373f284b.js → 506.bundle.a9e9ceb9fc71cdf45d91.js} +14 -7
- package/dist/{663.bundle.458432a201e239a1a576.js → 663.bundle.05e8cc381eadc38f9755.js} +4 -4
- package/dist/{678.bundle.ba62e1ffbd6eb423e1cc.js → 678.bundle.784d7fb157d76611068d.js} +190 -246
- package/dist/{686.bundle.70565410179f1e7d22e6.js → 686.bundle.b3dbf84eefbef768843f.js} +2 -2
- package/dist/{378.bundle.e40da18053d1dff916df.js → 687.bundle.3de11e7a373ee3588813.js} +210 -3
- package/dist/{782.bundle.93b1a0f86a4deb12426e.js → 782.bundle.082672a46147b8402d4a.js} +58 -39
- package/dist/{814.bundle.982d5c1771891684f23a.js → 814.bundle.35355762730e3b4ee89f.js} +2 -2
- package/dist/{822.bundle.99bf759483aa32086346.js → 822.bundle.00dacc09a7d028fca29b.js} +21 -23
- package/dist/{886.bundle.c5a6b96760ea43352375.js → 886.bundle.d0915318107cf24e8beb.js} +19 -20
- package/dist/app.bundle.css +1 -1
- package/dist/{app.bundle.6aab67e2d86a83eb6712.js → app.bundle.eeda76c463f838f592c1.js} +592 -599
- package/dist/assets/yandex-browser-manifest.json +1 -1
- package/dist/es6-shim.min.js +3569 -2
- package/dist/google.js +1 -2
- package/dist/index.html +1 -1
- package/dist/init-service-worker.js +3 -5
- package/dist/oidc-client.min.js +10857 -39
- package/dist/polyfill.min.js +184 -1
- package/dist/silent-refresh.html +18 -9
- package/dist/sw.js +1 -1
- package/package.json +18 -18
|
@@ -23,10 +23,10 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
|
|
|
23
23
|
var esm = __webpack_require__(26925);
|
|
24
24
|
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 337 modules
|
|
25
25
|
var dist_esm = __webpack_require__(45754);
|
|
26
|
-
// EXTERNAL MODULE: ../../core/src/index.ts +
|
|
27
|
-
var src = __webpack_require__(
|
|
26
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 107 modules
|
|
27
|
+
var src = __webpack_require__(3854);
|
|
28
28
|
// EXTERNAL MODULE: ../../ui/src/index.js + 458 modules
|
|
29
|
-
var ui_src = __webpack_require__(
|
|
29
|
+
var ui_src = __webpack_require__(88344);
|
|
30
30
|
// EXTERNAL MODULE: ../../../extensions/cornerstone/src/state.ts
|
|
31
31
|
var state = __webpack_require__(73704);
|
|
32
32
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.css
|
|
@@ -41,7 +41,7 @@ var state = __webpack_require__(73704);
|
|
|
41
41
|
function CornerstoneImageScrollbar(_ref) {
|
|
42
42
|
let {
|
|
43
43
|
viewportData,
|
|
44
|
-
|
|
44
|
+
viewportId,
|
|
45
45
|
element,
|
|
46
46
|
imageSliceData,
|
|
47
47
|
setImageSliceData,
|
|
@@ -52,9 +52,7 @@ function CornerstoneImageScrollbar(_ref) {
|
|
|
52
52
|
cineService,
|
|
53
53
|
cornerstoneViewportService
|
|
54
54
|
} = servicesManager.services;
|
|
55
|
-
const onImageScrollbarChange = (imageIndex,
|
|
56
|
-
const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
|
|
57
|
-
const viewportId = viewportInfo.getViewportId();
|
|
55
|
+
const onImageScrollbarChange = (imageIndex, viewportId) => {
|
|
58
56
|
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
59
57
|
const {
|
|
60
58
|
isCineEnabled
|
|
@@ -63,7 +61,7 @@ function CornerstoneImageScrollbar(_ref) {
|
|
|
63
61
|
// on image scrollbar change, stop the CINE if it is playing
|
|
64
62
|
cineService.stopClip(element);
|
|
65
63
|
cineService.setCine({
|
|
66
|
-
id:
|
|
64
|
+
id: viewportId,
|
|
67
65
|
isPlaying: false
|
|
68
66
|
});
|
|
69
67
|
}
|
|
@@ -76,7 +74,7 @@ function CornerstoneImageScrollbar(_ref) {
|
|
|
76
74
|
if (!viewportData) {
|
|
77
75
|
return;
|
|
78
76
|
}
|
|
79
|
-
const viewport = cornerstoneViewportService.
|
|
77
|
+
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
80
78
|
if (!viewport) {
|
|
81
79
|
return;
|
|
82
80
|
}
|
|
@@ -102,7 +100,7 @@ function CornerstoneImageScrollbar(_ref) {
|
|
|
102
100
|
numberOfSlices
|
|
103
101
|
});
|
|
104
102
|
}
|
|
105
|
-
}, [
|
|
103
|
+
}, [viewportId, viewportData]);
|
|
106
104
|
(0,react.useEffect)(() => {
|
|
107
105
|
if (viewportData?.viewportType !== dist_esm.Enums.ViewportType.STACK) {
|
|
108
106
|
return;
|
|
@@ -143,7 +141,7 @@ function CornerstoneImageScrollbar(_ref) {
|
|
|
143
141
|
};
|
|
144
142
|
}, [viewportData, element]);
|
|
145
143
|
return /*#__PURE__*/react.createElement(ui_src/* ImageScrollbar */.Ln, {
|
|
146
|
-
onChange: evt => onImageScrollbarChange(evt,
|
|
144
|
+
onChange: evt => onImageScrollbarChange(evt, viewportId),
|
|
147
145
|
max: imageSliceData.numberOfSlices ? imageSliceData.numberOfSlices - 1 : 0,
|
|
148
146
|
height: scrollbarHeight,
|
|
149
147
|
value: imageSliceData.imageIndex
|
|
@@ -151,7 +149,7 @@ function CornerstoneImageScrollbar(_ref) {
|
|
|
151
149
|
}
|
|
152
150
|
CornerstoneImageScrollbar.propTypes = {
|
|
153
151
|
viewportData: (prop_types_default()).object,
|
|
154
|
-
|
|
152
|
+
viewportId: (prop_types_default()).string.isRequired,
|
|
155
153
|
element: prop_types_default().instanceOf(Element),
|
|
156
154
|
scrollbarHeight: (prop_types_default()).string,
|
|
157
155
|
imageSliceData: (prop_types_default()).object.isRequired,
|
|
@@ -291,11 +289,11 @@ function VOIOverlayItem(_ref) {
|
|
|
291
289
|
}, /*#__PURE__*/react.createElement("span", {
|
|
292
290
|
className: "mr-1 shrink-0"
|
|
293
291
|
}, "W:"), /*#__PURE__*/react.createElement("span", {
|
|
294
|
-
className: "ml-1 mr-2 font-light
|
|
292
|
+
className: "ml-1 mr-2 shrink-0 font-light"
|
|
295
293
|
}, windowWidth.toFixed(0)), /*#__PURE__*/react.createElement("span", {
|
|
296
294
|
className: "mr-1 shrink-0"
|
|
297
295
|
}, "L:"), /*#__PURE__*/react.createElement("span", {
|
|
298
|
-
className: "ml-1 font-light
|
|
296
|
+
className: "ml-1 shrink-0 font-light"
|
|
299
297
|
}, windowCenter.toFixed(0)));
|
|
300
298
|
}
|
|
301
299
|
|
|
@@ -352,7 +350,7 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
352
350
|
element,
|
|
353
351
|
viewportData,
|
|
354
352
|
imageSliceData,
|
|
355
|
-
|
|
353
|
+
viewportId,
|
|
356
354
|
servicesManager
|
|
357
355
|
} = _ref4;
|
|
358
356
|
const {
|
|
@@ -382,10 +380,10 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
382
380
|
}, [viewportData, imageIndex]);
|
|
383
381
|
const instanceNumber = (0,react.useMemo)(() => {
|
|
384
382
|
if (viewportData != null) {
|
|
385
|
-
return _getInstanceNumber(viewportData,
|
|
383
|
+
return _getInstanceNumber(viewportData, viewportId, imageIndex, cornerstoneViewportService);
|
|
386
384
|
}
|
|
387
385
|
return null;
|
|
388
|
-
}, [viewportData,
|
|
386
|
+
}, [viewportData, viewportId, imageIndex, cornerstoneViewportService]);
|
|
389
387
|
|
|
390
388
|
/**
|
|
391
389
|
* Initial toolbar state
|
|
@@ -422,7 +420,7 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
422
420
|
return () => {
|
|
423
421
|
element.removeEventListener(dist_esm.Enums.Events.VOI_MODIFIED, updateVOI);
|
|
424
422
|
};
|
|
425
|
-
}, [
|
|
423
|
+
}, [viewportId, viewportData, voi, element]);
|
|
426
424
|
|
|
427
425
|
/**
|
|
428
426
|
* Updating the scale when the viewport changes its zoom
|
|
@@ -434,7 +432,7 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
434
432
|
camera
|
|
435
433
|
} = eventDetail.detail;
|
|
436
434
|
if (previousCamera.parallelScale !== camera.parallelScale || previousCamera.scale !== camera.scale) {
|
|
437
|
-
const viewport = cornerstoneViewportService.
|
|
435
|
+
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
438
436
|
if (!viewport) {
|
|
439
437
|
return;
|
|
440
438
|
}
|
|
@@ -458,7 +456,7 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
458
456
|
return () => {
|
|
459
457
|
element.removeEventListener(dist_esm.Enums.Events.CAMERA_MODIFIED, updateScale);
|
|
460
458
|
};
|
|
461
|
-
}, [
|
|
459
|
+
}, [viewportId, viewportData, cornerstoneViewportService, element]);
|
|
462
460
|
|
|
463
461
|
/**
|
|
464
462
|
* Updating the active tools when the toolbar changes
|
|
@@ -479,7 +477,7 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
479
477
|
element,
|
|
480
478
|
viewportData,
|
|
481
479
|
imageSliceData,
|
|
482
|
-
|
|
480
|
+
viewportId,
|
|
483
481
|
servicesManager,
|
|
484
482
|
customization: item,
|
|
485
483
|
formatters: {
|
|
@@ -506,7 +504,7 @@ function CustomizableViewportOverlay(_ref4) {
|
|
|
506
504
|
return renderItem.content(overlayItemProps);
|
|
507
505
|
}
|
|
508
506
|
}
|
|
509
|
-
}, [element, viewportData, imageSliceData,
|
|
507
|
+
}, [element, viewportData, imageSliceData, viewportId, servicesManager, customizationService, instance, voi, scale, instanceNumber]);
|
|
510
508
|
const getTopLeftContent = (0,react.useCallback)(() => {
|
|
511
509
|
const items = topLeftCustomization?.items || [{
|
|
512
510
|
id: 'WindowLevel',
|
|
@@ -557,7 +555,7 @@ function _getViewportInstance(viewportData, imageIndex) {
|
|
|
557
555
|
}
|
|
558
556
|
return imageId ? dist_esm.metaData.get('instance', imageId) || {} : {};
|
|
559
557
|
}
|
|
560
|
-
function _getInstanceNumber(viewportData,
|
|
558
|
+
function _getInstanceNumber(viewportData, viewportId, imageIndex, cornerstoneViewportService) {
|
|
561
559
|
let instanceNumber;
|
|
562
560
|
if (viewportData.viewportType === dist_esm.Enums.ViewportType.STACK) {
|
|
563
561
|
instanceNumber = _getInstanceNumberFromStack(viewportData, imageIndex);
|
|
@@ -565,7 +563,7 @@ function _getInstanceNumber(viewportData, viewportIndex, imageIndex, cornerstone
|
|
|
565
563
|
return null;
|
|
566
564
|
}
|
|
567
565
|
} else if (viewportData.viewportType === dist_esm.Enums.ViewportType.ORTHOGRAPHIC) {
|
|
568
|
-
instanceNumber = _getInstanceNumberFromVolume(viewportData, imageIndex,
|
|
566
|
+
instanceNumber = _getInstanceNumberFromVolume(viewportData, imageIndex, viewportId, cornerstoneViewportService);
|
|
569
567
|
}
|
|
570
568
|
return instanceNumber;
|
|
571
569
|
}
|
|
@@ -589,7 +587,7 @@ function _getInstanceNumberFromStack(viewportData, imageIndex) {
|
|
|
589
587
|
// Since volume viewports can be in any view direction, they can render
|
|
590
588
|
// a reconstructed image which don't have imageIds; therefore, no instance and instanceNumber
|
|
591
589
|
// Here we check if viewport is in the acquisition direction and if so, we get the instanceNumber
|
|
592
|
-
function _getInstanceNumberFromVolume(viewportData,
|
|
590
|
+
function _getInstanceNumberFromVolume(viewportData, viewportId, cornerstoneViewportService) {
|
|
593
591
|
const volumes = viewportData.volumes;
|
|
594
592
|
|
|
595
593
|
// Todo: support fusion of acquisition plane which has instanceNumber
|
|
@@ -601,7 +599,7 @@ function _getInstanceNumberFromVolume(viewportData, imageIndex, viewportIndex, c
|
|
|
601
599
|
direction,
|
|
602
600
|
imageIds
|
|
603
601
|
} = volume;
|
|
604
|
-
const cornerstoneViewport = cornerstoneViewportService.
|
|
602
|
+
const cornerstoneViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
|
605
603
|
if (!cornerstoneViewport) {
|
|
606
604
|
return;
|
|
607
605
|
}
|
|
@@ -630,7 +628,7 @@ function _getInstanceNumberFromVolume(viewportData, imageIndex, viewportIndex, c
|
|
|
630
628
|
CustomizableViewportOverlay.propTypes = {
|
|
631
629
|
viewportData: (prop_types_default()).object,
|
|
632
630
|
imageIndex: (prop_types_default()).number,
|
|
633
|
-
|
|
631
|
+
viewportId: (prop_types_default()).string
|
|
634
632
|
};
|
|
635
633
|
/* harmony default export */ const Overlays_CustomizableViewportOverlay = (CustomizableViewportOverlay);
|
|
636
634
|
// EXTERNAL MODULE: ../../../node_modules/classnames/index.js
|
|
@@ -656,7 +654,7 @@ function ViewportOrientationMarkers(_ref) {
|
|
|
656
654
|
element,
|
|
657
655
|
viewportData,
|
|
658
656
|
imageSliceData,
|
|
659
|
-
|
|
657
|
+
viewportId,
|
|
660
658
|
servicesManager,
|
|
661
659
|
orientationMarkers = ['top', 'left']
|
|
662
660
|
} = _ref;
|
|
@@ -726,7 +724,7 @@ function ViewportOrientationMarkers(_ref) {
|
|
|
726
724
|
return '';
|
|
727
725
|
}
|
|
728
726
|
const markers = _getOrientationMarkers(rowCosines, columnCosines, rotation, flipVertical, flipHorizontal);
|
|
729
|
-
const ohifViewport = cornerstoneViewportService.
|
|
727
|
+
const ohifViewport = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
730
728
|
if (!ohifViewport) {
|
|
731
729
|
console.log('ViewportOrientationMarkers::No viewport');
|
|
732
730
|
return null;
|
|
@@ -858,9 +856,9 @@ function ViewportImageSliceLoadingIndicator(_ref) {
|
|
|
858
856
|
}, [element, viewportData]);
|
|
859
857
|
if (error) {
|
|
860
858
|
return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
|
|
861
|
-
className: "
|
|
859
|
+
className: "absolute top-0 left-0 h-full w-full bg-black opacity-50"
|
|
862
860
|
}, /*#__PURE__*/react.createElement("div", {
|
|
863
|
-
className: "flex
|
|
861
|
+
className: "transparent flex h-full w-full items-center justify-center"
|
|
864
862
|
}, /*#__PURE__*/react.createElement("p", {
|
|
865
863
|
className: "text-primary-light text-xl font-light"
|
|
866
864
|
}, /*#__PURE__*/react.createElement("h4", null, "Error Loading Image"), /*#__PURE__*/react.createElement("p", null, "An error has occurred."), /*#__PURE__*/react.createElement("p", null, error)))));
|
|
@@ -871,9 +869,9 @@ function ViewportImageSliceLoadingIndicator(_ref) {
|
|
|
871
869
|
// IMPORTANT: we need to use the pointer-events-none class to prevent the loading indicator from
|
|
872
870
|
// interacting with the mouse, since scrolling should propagate to the viewport underneath
|
|
873
871
|
react.createElement("div", {
|
|
874
|
-
className: "pointer-events-none
|
|
872
|
+
className: "pointer-events-none absolute top-0 left-0 h-full w-full bg-black opacity-50"
|
|
875
873
|
}, /*#__PURE__*/react.createElement("div", {
|
|
876
|
-
className: "flex
|
|
874
|
+
className: "transparent flex h-full w-full items-center justify-center"
|
|
877
875
|
}, /*#__PURE__*/react.createElement("p", {
|
|
878
876
|
className: "text-primary-light text-xl font-light"
|
|
879
877
|
}, "Loading...")))
|
|
@@ -899,7 +897,7 @@ ViewportImageSliceLoadingIndicator.defaultProps = {
|
|
|
899
897
|
|
|
900
898
|
function CornerstoneOverlays(props) {
|
|
901
899
|
const {
|
|
902
|
-
|
|
900
|
+
viewportId,
|
|
903
901
|
element,
|
|
904
902
|
scrollbarHeight,
|
|
905
903
|
servicesManager
|
|
@@ -916,7 +914,7 @@ function CornerstoneOverlays(props) {
|
|
|
916
914
|
const {
|
|
917
915
|
unsubscribe
|
|
918
916
|
} = cornerstoneViewportService.subscribe(cornerstoneViewportService.EVENTS.VIEWPORT_DATA_CHANGED, props => {
|
|
919
|
-
if (props.
|
|
917
|
+
if (props.viewportId !== viewportId) {
|
|
920
918
|
return;
|
|
921
919
|
}
|
|
922
920
|
setViewportData(props.viewportData);
|
|
@@ -924,12 +922,12 @@ function CornerstoneOverlays(props) {
|
|
|
924
922
|
return () => {
|
|
925
923
|
unsubscribe();
|
|
926
924
|
};
|
|
927
|
-
}, [
|
|
925
|
+
}, [viewportId]);
|
|
928
926
|
if (!element) {
|
|
929
927
|
return null;
|
|
930
928
|
}
|
|
931
929
|
if (viewportData) {
|
|
932
|
-
const viewportInfo = cornerstoneViewportService.
|
|
930
|
+
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
933
931
|
if (viewportInfo?.viewportOptions?.customViewportProps?.hideOverlays) {
|
|
934
932
|
return null;
|
|
935
933
|
}
|
|
@@ -937,7 +935,7 @@ function CornerstoneOverlays(props) {
|
|
|
937
935
|
return /*#__PURE__*/react.createElement("div", {
|
|
938
936
|
className: "noselect"
|
|
939
937
|
}, /*#__PURE__*/react.createElement(ViewportImageScrollbar, {
|
|
940
|
-
|
|
938
|
+
viewportId: viewportId,
|
|
941
939
|
viewportData: viewportData,
|
|
942
940
|
element: element,
|
|
943
941
|
imageSliceData: imageSliceData,
|
|
@@ -947,7 +945,7 @@ function CornerstoneOverlays(props) {
|
|
|
947
945
|
}), /*#__PURE__*/react.createElement(Overlays_CustomizableViewportOverlay, {
|
|
948
946
|
imageSliceData: imageSliceData,
|
|
949
947
|
viewportData: viewportData,
|
|
950
|
-
|
|
948
|
+
viewportId: viewportId,
|
|
951
949
|
servicesManager: servicesManager,
|
|
952
950
|
element: element
|
|
953
951
|
}), /*#__PURE__*/react.createElement(Overlays_ViewportImageSliceLoadingIndicator, {
|
|
@@ -958,7 +956,7 @@ function CornerstoneOverlays(props) {
|
|
|
958
956
|
element: element,
|
|
959
957
|
viewportData: viewportData,
|
|
960
958
|
servicesManager: servicesManager,
|
|
961
|
-
|
|
959
|
+
viewportId: viewportId
|
|
962
960
|
}));
|
|
963
961
|
}
|
|
964
962
|
/* harmony default export */ const Overlays_CornerstoneOverlays = (CornerstoneOverlays);
|
|
@@ -971,7 +969,7 @@ var getSOPInstanceAttributes = __webpack_require__(87172);
|
|
|
971
969
|
function WrappedCinePlayer(_ref) {
|
|
972
970
|
let {
|
|
973
971
|
enabledVPElement,
|
|
974
|
-
|
|
972
|
+
viewportId,
|
|
975
973
|
servicesManager
|
|
976
974
|
} = _ref;
|
|
977
975
|
const {
|
|
@@ -983,7 +981,7 @@ function WrappedCinePlayer(_ref) {
|
|
|
983
981
|
cines
|
|
984
982
|
}, cineService] = (0,ui_src/* useCine */.vQ)();
|
|
985
983
|
const [{
|
|
986
|
-
|
|
984
|
+
activeViewportId
|
|
987
985
|
}] = (0,ui_src/* useViewportGrid */.O_)();
|
|
988
986
|
const {
|
|
989
987
|
component: CinePlayerComponent = ui_src/* CinePlayer */.H6
|
|
@@ -1001,10 +999,10 @@ function WrappedCinePlayer(_ref) {
|
|
|
1001
999
|
});
|
|
1002
1000
|
};
|
|
1003
1001
|
const cineHandler = () => {
|
|
1004
|
-
if (!cines || !cines[
|
|
1002
|
+
if (!cines || !cines[viewportId] || !enabledVPElement) {
|
|
1005
1003
|
return;
|
|
1006
1004
|
}
|
|
1007
|
-
const cine = cines[
|
|
1005
|
+
const cine = cines[viewportId];
|
|
1008
1006
|
const isPlaying = cine.isPlaying || false;
|
|
1009
1007
|
const frameRate = cine.frameRate || 24;
|
|
1010
1008
|
const validFrameRate = Math.max(frameRate, 1);
|
|
@@ -1020,35 +1018,35 @@ function WrappedCinePlayer(_ref) {
|
|
|
1020
1018
|
dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
|
|
1021
1019
|
return () => {
|
|
1022
1020
|
cineService.setCine({
|
|
1023
|
-
id:
|
|
1021
|
+
id: viewportId,
|
|
1024
1022
|
isPlaying: false
|
|
1025
1023
|
});
|
|
1026
1024
|
dist_esm.eventTarget.removeEventListener(dist_esm.Enums.Events.STACK_VIEWPORT_NEW_STACK, cineHandler);
|
|
1027
1025
|
};
|
|
1028
1026
|
}, [enabledVPElement]);
|
|
1029
1027
|
(0,react.useEffect)(() => {
|
|
1030
|
-
if (!cines || !cines[
|
|
1028
|
+
if (!cines || !cines[viewportId] || !enabledVPElement) {
|
|
1031
1029
|
return;
|
|
1032
1030
|
}
|
|
1033
1031
|
cineHandler();
|
|
1034
1032
|
return () => {
|
|
1035
|
-
if (enabledVPElement && cines?.[
|
|
1033
|
+
if (enabledVPElement && cines?.[viewportId]?.isPlaying) {
|
|
1036
1034
|
cineService.stopClip(enabledVPElement);
|
|
1037
1035
|
}
|
|
1038
1036
|
};
|
|
1039
|
-
}, [cines,
|
|
1040
|
-
const cine = cines[
|
|
1037
|
+
}, [cines, viewportId, cineService, enabledVPElement, cineHandler]);
|
|
1038
|
+
const cine = cines[viewportId];
|
|
1041
1039
|
const isPlaying = cine && cine.isPlaying || false;
|
|
1042
1040
|
return isCineEnabled && /*#__PURE__*/react.createElement(CinePlayerComponent, {
|
|
1043
|
-
className: "absolute left-1/2 -translate-x-1/2
|
|
1041
|
+
className: "absolute left-1/2 bottom-3 -translate-x-1/2",
|
|
1044
1042
|
isPlaying: isPlaying,
|
|
1045
1043
|
onClose: handleCineClose,
|
|
1046
1044
|
onPlayPauseChange: isPlaying => cineService.setCine({
|
|
1047
|
-
id:
|
|
1045
|
+
id: activeViewportId,
|
|
1048
1046
|
isPlaying
|
|
1049
1047
|
}),
|
|
1050
1048
|
onFrameRateChange: frameRate => cineService.setCine({
|
|
1051
|
-
id:
|
|
1049
|
+
id: activeViewportId,
|
|
1052
1050
|
frameRate
|
|
1053
1051
|
})
|
|
1054
1052
|
});
|
|
@@ -1093,6 +1091,9 @@ function areEqual(prevProps, nextProps) {
|
|
|
1093
1091
|
if (prevProps.viewportOptions.viewportType !== nextProps.viewportOptions.viewportType) {
|
|
1094
1092
|
return false;
|
|
1095
1093
|
}
|
|
1094
|
+
if (nextProps.viewportOptions.needsRerendering) {
|
|
1095
|
+
return false;
|
|
1096
|
+
}
|
|
1096
1097
|
const prevDisplaySets = prevProps.displaySets;
|
|
1097
1098
|
const nextDisplaySets = nextProps.displaySets;
|
|
1098
1099
|
if (prevDisplaySets.length !== nextDisplaySets.length) {
|
|
@@ -1126,7 +1127,6 @@ function areEqual(prevProps, nextProps) {
|
|
|
1126
1127
|
// Then we don't need to worry about the re-renders if the props change.
|
|
1127
1128
|
const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
1128
1129
|
const {
|
|
1129
|
-
viewportIndex,
|
|
1130
1130
|
displaySets,
|
|
1131
1131
|
dataSource,
|
|
1132
1132
|
viewportOptions,
|
|
@@ -1141,6 +1141,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1141
1141
|
// to set the initial state of the viewport's first image to render
|
|
1142
1142
|
initialImageIndex
|
|
1143
1143
|
} = props;
|
|
1144
|
+
const viewportId = viewportOptions.viewportId;
|
|
1144
1145
|
const [scrollbarHeight, setScrollbarHeight] = (0,react.useState)('100px');
|
|
1145
1146
|
const [enabledVPElement, setEnabledVPElement] = (0,react.useState)(null);
|
|
1146
1147
|
const elementRef = (0,react.useRef)();
|
|
@@ -1169,17 +1170,12 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1169
1170
|
setImageScrollBarHeight();
|
|
1170
1171
|
}
|
|
1171
1172
|
}, [elementRef]);
|
|
1172
|
-
const cleanUpServices = (0,react.useCallback)(
|
|
1173
|
-
const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
|
|
1174
|
-
if (!viewportInfo) {
|
|
1175
|
-
return;
|
|
1176
|
-
}
|
|
1177
|
-
const viewportId = viewportInfo.getViewportId();
|
|
1173
|
+
const cleanUpServices = (0,react.useCallback)(viewportInfo => {
|
|
1178
1174
|
const renderingEngineId = viewportInfo.getRenderingEngineId();
|
|
1179
1175
|
const syncGroups = viewportInfo.getSyncGroups();
|
|
1180
1176
|
toolGroupService.removeViewportFromToolGroup(viewportId, renderingEngineId);
|
|
1181
1177
|
syncGroupService.removeViewportFromSyncGroup(viewportId, renderingEngineId, syncGroups);
|
|
1182
|
-
}, [
|
|
1178
|
+
}, [viewportId]);
|
|
1183
1179
|
const elementEnabledHandler = (0,react.useCallback)(evt => {
|
|
1184
1180
|
// check this is this element reference and return early if doesn't match
|
|
1185
1181
|
if (evt.detail.element !== elementRef.current) {
|
|
@@ -1190,8 +1186,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1190
1186
|
element
|
|
1191
1187
|
} = evt.detail;
|
|
1192
1188
|
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
1193
|
-
|
|
1194
|
-
(0,state/* setEnabledElement */.Yc)(viewportIndex, element);
|
|
1189
|
+
(0,state/* setEnabledElement */.Yc)(viewportId, element);
|
|
1195
1190
|
setEnabledVPElement(element);
|
|
1196
1191
|
const renderingEngineId = viewportInfo.getRenderingEngineId();
|
|
1197
1192
|
const toolGroupId = viewportInfo.getToolGroupId();
|
|
@@ -1201,20 +1196,22 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1201
1196
|
if (onElementEnabled) {
|
|
1202
1197
|
onElementEnabled(evt);
|
|
1203
1198
|
}
|
|
1204
|
-
}, [
|
|
1199
|
+
}, [viewportId, onElementEnabled, toolGroupService]);
|
|
1205
1200
|
|
|
1206
1201
|
// disable the element upon unmounting
|
|
1207
1202
|
(0,react.useEffect)(() => {
|
|
1208
|
-
cornerstoneViewportService.enableViewport(
|
|
1203
|
+
cornerstoneViewportService.enableViewport(viewportId, elementRef.current);
|
|
1209
1204
|
dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.ELEMENT_ENABLED, elementEnabledHandler);
|
|
1210
1205
|
setImageScrollBarHeight();
|
|
1211
1206
|
return () => {
|
|
1212
|
-
|
|
1213
|
-
|
|
1207
|
+
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
1208
|
+
if (!viewportInfo) {
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
cleanUpServices(viewportInfo);
|
|
1212
|
+
cornerstoneViewportService.storePresentation({
|
|
1213
|
+
viewportId
|
|
1214
1214
|
});
|
|
1215
|
-
cleanUpServices();
|
|
1216
|
-
const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
|
|
1217
|
-
cornerstoneViewportService.disableElement(viewportIndex);
|
|
1218
1215
|
if (onElementDisabled) {
|
|
1219
1216
|
onElementDisabled(viewportInfo);
|
|
1220
1217
|
}
|
|
@@ -1241,18 +1238,18 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1241
1238
|
if (!invalidateData) {
|
|
1242
1239
|
return;
|
|
1243
1240
|
}
|
|
1244
|
-
const viewportInfo = cornerstoneViewportService.
|
|
1241
|
+
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
1245
1242
|
if (viewportInfo.hasDisplaySet(invalidatedDisplaySetInstanceUID)) {
|
|
1246
1243
|
const viewportData = viewportInfo.getViewportData();
|
|
1247
1244
|
const newViewportData = await cornerstoneCacheService.invalidateViewportData(viewportData, invalidatedDisplaySetInstanceUID, dataSource, displaySetService);
|
|
1248
1245
|
const keepCamera = true;
|
|
1249
|
-
cornerstoneViewportService.updateViewport(
|
|
1246
|
+
cornerstoneViewportService.updateViewport(viewportId, newViewportData, keepCamera);
|
|
1250
1247
|
}
|
|
1251
1248
|
});
|
|
1252
1249
|
return () => {
|
|
1253
1250
|
unsubscribe();
|
|
1254
1251
|
};
|
|
1255
|
-
}, [
|
|
1252
|
+
}, [viewportId]);
|
|
1256
1253
|
(0,react.useEffect)(() => {
|
|
1257
1254
|
// handle the default viewportType to be stack
|
|
1258
1255
|
if (!viewportOptions.viewportType) {
|
|
@@ -1276,13 +1273,23 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1276
1273
|
lutPresentation: lutPresentationStore[presentationIds?.lutPresentationId]
|
|
1277
1274
|
};
|
|
1278
1275
|
let measurement;
|
|
1279
|
-
if (cacheJumpToMeasurementEvent?.
|
|
1276
|
+
if (cacheJumpToMeasurementEvent?.viewportId === viewportId) {
|
|
1280
1277
|
measurement = cacheJumpToMeasurementEvent.measurement;
|
|
1281
1278
|
// Delete the position presentation so that viewport navigates direct
|
|
1282
1279
|
presentations.positionPresentation = null;
|
|
1283
1280
|
cacheJumpToMeasurementEvent = null;
|
|
1284
1281
|
}
|
|
1285
|
-
|
|
1282
|
+
|
|
1283
|
+
// Note: This is a hack to get the grid to re-render the OHIFCornerstoneViewport component
|
|
1284
|
+
// Used for segmentation hydration right now, since the logic to decide whether
|
|
1285
|
+
// a viewport needs to render a segmentation lives inside the CornerstoneViewportService
|
|
1286
|
+
// so we need to re-render (force update via change of the needsRerendering) so that React
|
|
1287
|
+
// does the diffing and decides we should render this again (although the id and element has not changed)
|
|
1288
|
+
// so that the CornerstoneViewportService can decide whether to render the segmentation or not. Not that we reached here we can turn it off.
|
|
1289
|
+
if (viewportOptions.needsRerendering) {
|
|
1290
|
+
viewportOptions.needsRerendering = false;
|
|
1291
|
+
}
|
|
1292
|
+
cornerstoneViewportService.setViewportData(viewportId, viewportData, viewportOptions, displaySetOptions, presentations);
|
|
1286
1293
|
if (measurement) {
|
|
1287
1294
|
esm.annotation.selection.setAnnotationSelected(measurement.uid);
|
|
1288
1295
|
}
|
|
@@ -1304,12 +1311,12 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1304
1311
|
if (isJumpToMeasurementDisabled) {
|
|
1305
1312
|
return;
|
|
1306
1313
|
}
|
|
1307
|
-
const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef,
|
|
1308
|
-
_checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef,
|
|
1314
|
+
const unsubscribeFromJumpToMeasurementEvents = _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService);
|
|
1315
|
+
_checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService);
|
|
1309
1316
|
return () => {
|
|
1310
1317
|
unsubscribeFromJumpToMeasurementEvents();
|
|
1311
1318
|
};
|
|
1312
|
-
}, [displaySets, elementRef,
|
|
1319
|
+
}, [displaySets, elementRef, viewportId]);
|
|
1313
1320
|
return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
|
|
1314
1321
|
className: "viewport-wrapper"
|
|
1315
1322
|
}, /*#__PURE__*/react.createElement(index_esm/* default */.ZP, {
|
|
@@ -1328,18 +1335,18 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1328
1335
|
onMouseDown: e => e.preventDefault(),
|
|
1329
1336
|
ref: elementRef
|
|
1330
1337
|
}), /*#__PURE__*/react.createElement(Overlays_CornerstoneOverlays, {
|
|
1331
|
-
|
|
1338
|
+
viewportId: viewportId,
|
|
1332
1339
|
toolBarService: toolbarService,
|
|
1333
1340
|
element: elementRef.current,
|
|
1334
1341
|
scrollbarHeight: scrollbarHeight,
|
|
1335
1342
|
servicesManager: servicesManager
|
|
1336
1343
|
}), /*#__PURE__*/react.createElement(components_CinePlayer, {
|
|
1337
1344
|
enabledVPElement: enabledVPElement,
|
|
1338
|
-
|
|
1345
|
+
viewportId: viewportId,
|
|
1339
1346
|
servicesManager: servicesManager
|
|
1340
1347
|
})), /*#__PURE__*/react.createElement("div", {
|
|
1341
1348
|
className: "absolute w-full"
|
|
1342
|
-
}, viewportDialogState.
|
|
1349
|
+
}, viewportDialogState.viewportId === viewportId && /*#__PURE__*/react.createElement(ui_src/* Notification */.P_, {
|
|
1343
1350
|
id: "viewport-notification",
|
|
1344
1351
|
message: viewportDialogState.message,
|
|
1345
1352
|
type: viewportDialogState.type,
|
|
@@ -1348,14 +1355,13 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
|
|
|
1348
1355
|
onOutsideClick: viewportDialogState.onOutsideClick
|
|
1349
1356
|
})));
|
|
1350
1357
|
}, areEqual);
|
|
1351
|
-
function _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef,
|
|
1352
|
-
const displaysUIDs = displaySets.map(displaySet => displaySet.displaySetInstanceUID);
|
|
1358
|
+
function _subscribeToJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService) {
|
|
1353
1359
|
const {
|
|
1354
1360
|
unsubscribe
|
|
1355
1361
|
} = measurementService.subscribe(src.MeasurementService.EVENTS.JUMP_TO_MEASUREMENT_VIEWPORT, props => {
|
|
1356
1362
|
cacheJumpToMeasurementEvent = props;
|
|
1357
1363
|
const {
|
|
1358
|
-
|
|
1364
|
+
viewportId: jumpId,
|
|
1359
1365
|
measurement,
|
|
1360
1366
|
isConsumed
|
|
1361
1367
|
} = props;
|
|
@@ -1364,20 +1370,20 @@ function _subscribeToJumpToMeasurementEvents(measurementService, displaySetServi
|
|
|
1364
1370
|
}
|
|
1365
1371
|
if (cacheJumpToMeasurementEvent.cornerstoneViewport === undefined) {
|
|
1366
1372
|
// Decide on which viewport should handle this
|
|
1367
|
-
cacheJumpToMeasurementEvent.cornerstoneViewport = cornerstoneViewportService.
|
|
1373
|
+
cacheJumpToMeasurementEvent.cornerstoneViewport = cornerstoneViewportService.getViewportIdToJump(jumpId, measurement.displaySetInstanceUID, {
|
|
1368
1374
|
referencedImageId: measurement.referencedImageId
|
|
1369
1375
|
});
|
|
1370
1376
|
}
|
|
1371
|
-
if (cacheJumpToMeasurementEvent.cornerstoneViewport !==
|
|
1377
|
+
if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportId) {
|
|
1372
1378
|
return;
|
|
1373
1379
|
}
|
|
1374
|
-
_jumpToMeasurement(measurement, elementRef,
|
|
1380
|
+
_jumpToMeasurement(measurement, elementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
|
|
1375
1381
|
});
|
|
1376
1382
|
return unsubscribe;
|
|
1377
1383
|
}
|
|
1378
1384
|
|
|
1379
1385
|
// Check if there is a queued jumpToMeasurement event
|
|
1380
|
-
function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef,
|
|
1386
|
+
function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetService, elementRef, viewportId, displaySets, viewportGridService, cornerstoneViewportService) {
|
|
1381
1387
|
if (!cacheJumpToMeasurementEvent) {
|
|
1382
1388
|
return;
|
|
1383
1389
|
}
|
|
@@ -1396,11 +1402,11 @@ function _checkForCachedJumpToMeasurementEvents(measurementService, displaySetSe
|
|
|
1396
1402
|
} = cacheJumpToMeasurementEvent;
|
|
1397
1403
|
if (measurement && elementRef) {
|
|
1398
1404
|
if (displaysUIDs.includes(measurement?.displaySetInstanceUID)) {
|
|
1399
|
-
_jumpToMeasurement(measurement, elementRef,
|
|
1405
|
+
_jumpToMeasurement(measurement, elementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService);
|
|
1400
1406
|
}
|
|
1401
1407
|
}
|
|
1402
1408
|
}
|
|
1403
|
-
function _jumpToMeasurement(measurement, targetElementRef,
|
|
1409
|
+
function _jumpToMeasurement(measurement, targetElementRef, viewportId, measurementService, displaySetService, viewportGridService, cornerstoneViewportService) {
|
|
1404
1410
|
const targetElement = targetElementRef.current;
|
|
1405
1411
|
const {
|
|
1406
1412
|
displaySetInstanceUID,
|
|
@@ -1417,9 +1423,8 @@ function _jumpToMeasurement(measurement, targetElementRef, viewportIndex, measur
|
|
|
1417
1423
|
// to set it properly
|
|
1418
1424
|
// setCornerstoneMeasurementActive(measurement);
|
|
1419
1425
|
|
|
1420
|
-
viewportGridService.
|
|
1426
|
+
viewportGridService.setActiveViewportId(viewportId);
|
|
1421
1427
|
const enabledElement = (0,dist_esm.getEnabledElement)(targetElement);
|
|
1422
|
-
const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
|
|
1423
1428
|
if (enabledElement) {
|
|
1424
1429
|
// See how the jumpToSlice() of Cornerstone3D deals with imageIdx param.
|
|
1425
1430
|
const viewport = enabledElement.viewport;
|
|
@@ -1469,7 +1474,6 @@ OHIFCornerstoneViewport.defaultProps = {
|
|
|
1469
1474
|
isJumpToMeasurementDisabled: false
|
|
1470
1475
|
};
|
|
1471
1476
|
OHIFCornerstoneViewport.propTypes = {
|
|
1472
|
-
viewportIndex: (prop_types_default()).number.isRequired,
|
|
1473
1477
|
displaySets: (prop_types_default()).array.isRequired,
|
|
1474
1478
|
dataSource: (prop_types_default()).object.isRequired,
|
|
1475
1479
|
viewportOptions: (prop_types_default()).object,
|