Skip to content

Commit

Permalink
fix(layouts): and fix thumbnail in touch and update migration guide f…
Browse files Browse the repository at this point in the history
…or 3.8 release (#4052)
  • Loading branch information
sedghi authored Apr 19, 2024
1 parent 28bc891 commit d250d04
Show file tree
Hide file tree
Showing 30 changed files with 208 additions and 157 deletions.
4 changes: 2 additions & 2 deletions extensions/cornerstone-dicom-seg/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^1.70.8",
"@cornerstonejs/core": "^1.70.8",
"@cornerstonejs/adapters": "^1.70.9",
"@cornerstonejs/core": "^1.70.9",
"@kitware/vtk.js": "30.3.3",
"react-color": "^2.19.3"
}
Expand Down
5 changes: 3 additions & 2 deletions extensions/cornerstone-dicom-seg/src/utils/hydrationUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ function getUpdatedViewportsForSegmentation({
const { hangingProtocolService, displaySetService, segmentationService, viewportGridService } =
servicesManager.services;

const { viewports } = viewportGridService.getState();
const { viewports, isHangingProtocolLayout } = viewportGridService.getState();

const viewport = getTargetViewport({ viewportId, viewportGridService });
const targetViewportId = viewport.viewportOptions.viewportId;
Expand All @@ -153,7 +153,8 @@ function getUpdatedViewportsForSegmentation({

const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(
targetViewportId,
referenceDisplaySetInstanceUID
referenceDisplaySetInstanceUID,
isHangingProtocolLayout
);

viewports.forEach((viewport, viewportId) => {
Expand Down
6 changes: 3 additions & 3 deletions extensions/cornerstone-dicom-sr/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^1.70.8",
"@cornerstonejs/core": "^1.70.8",
"@cornerstonejs/tools": "^1.70.8",
"@cornerstonejs/adapters": "^1.70.9",
"@cornerstonejs/core": "^1.70.9",
"@cornerstonejs/tools": "^1.70.9",
"classnames": "^2.3.2"
}
}
6 changes: 3 additions & 3 deletions extensions/cornerstone-dynamic-volume/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/core": "^1.70.8",
"@cornerstonejs/streaming-image-volume-loader": "^1.70.8",
"@cornerstonejs/tools": "^1.70.8",
"@cornerstonejs/core": "^1.70.9",
"@cornerstonejs/streaming-image-volume-loader": "^1.70.9",
"@cornerstonejs/tools": "^1.70.9",
"classnames": "^2.3.2"
}
}
10 changes: 5 additions & 5 deletions extensions/cornerstone/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2",
"@cornerstonejs/codec-openjpeg": "^1.2.2",
"@cornerstonejs/codec-openjph": "^2.4.2",
"@cornerstonejs/dicom-image-loader": "^1.70.8",
"@cornerstonejs/dicom-image-loader": "^1.70.9",
"@icr/polyseg-wasm": "^0.4.0",
"@ohif/core": "3.8.0-beta.85",
"@ohif/ui": "3.8.0-beta.85",
Expand All @@ -55,10 +55,10 @@
},
"dependencies": {
"@babel/runtime": "^7.20.13",
"@cornerstonejs/adapters": "^1.70.8",
"@cornerstonejs/core": "^1.70.8",
"@cornerstonejs/streaming-image-volume-loader": "^1.70.8",
"@cornerstonejs/tools": "^1.70.8",
"@cornerstonejs/adapters": "^1.70.9",
"@cornerstonejs/core": "^1.70.9",
"@cornerstonejs/streaming-image-volume-loader": "^1.70.9",
"@cornerstonejs/tools": "^1.70.9",
"@icr/polyseg-wasm": "^0.4.0",
"@kitware/vtk.js": "30.3.3",
"html2canvas": "^1.4.1",
Expand Down
12 changes: 1 addition & 11 deletions extensions/cornerstone/src/hps/mpr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,7 @@ export const mpr: Types.HangingProtocol.Protocol = {
numberOfPriorsReferenced: 0,
protocolMatchingRules: [],
imageLoadStrategy: 'nth',
callbacks: {
// Switches out of MPR mode when the layout change button is used
onLayoutChange: [
{
commandName: 'toggleHangingProtocol',
commandOptions: { protocolId: 'mpr' },
context: 'DEFAULT',
},
],
// Turns off crosshairs when switching out of MPR mode
},
callbacks: {},
displaySetSelectors: {
activeDisplaySet: {
seriesMatchingRules: [
Expand Down
1 change: 1 addition & 0 deletions extensions/cornerstone/src/initCornerstoneTools.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import ImageOverlayViewerTool from './tools/ImageOverlayViewerTool';
export default function initCornerstoneTools(configuration = {}) {
CrosshairsTool.isAnnotation = false;
ReferenceLinesTool.isAnnotation = false;
AdvancedMagnifyTool.isAnnotation = false;

init(configuration);
addTool(PanTool);
Expand Down
6 changes: 4 additions & 2 deletions extensions/default/src/Panels/PanelStudyBrowser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ function PanelStudyBrowser({
// doesn't have to have such an intense shape. This works well enough for now.
// Tabs --> Studies --> DisplaySets --> Thumbnails
const { StudyInstanceUIDs } = useImageViewer();
const [{ activeViewportId, viewports }, viewportGridService] = useViewportGrid();
const [{ activeViewportId, viewports, isHangingProtocolLayout }, viewportGridService] =
useViewportGrid();
const [activeTabName, setActiveTabName] = useState('primary');
const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = useState([
...StudyInstanceUIDs,
Expand All @@ -40,7 +41,8 @@ function PanelStudyBrowser({
try {
updatedViewports = hangingProtocolService.getViewportsRequireUpdate(
viewportId,
displaySetInstanceUID
displaySetInstanceUID,
isHangingProtocolLayout
);
} catch (error) {
console.warn(error);
Expand Down
4 changes: 4 additions & 0 deletions extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ const generateAdvancedPresets = ({ servicesManager }) => {
}
const displaySetInsaneUIDs = viewportGridService.getDisplaySetsUIDsForViewport(viewportId);

if (!displaySetInsaneUIDs) {
return [];
}

const displaySets = displaySetInsaneUIDs.map(uid => displaySetService.getDisplaySetByUID(uid));

return hangingProtocols
Expand Down
12 changes: 8 additions & 4 deletions extensions/default/src/commandsModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ const commandsModule = ({
const findOrCreateViewport = layoutFindOrCreate.bind(
null,
hangingProtocolService,
isHangingProtocolLayout,
stateReduce.viewportsByPosition
);

Expand All @@ -303,7 +304,7 @@ const commandsModule = ({

toggleOneUp() {
const viewportGridState = viewportGridService.getState();
const { activeViewportId, viewports, layout } = viewportGridState;
const { activeViewportId, viewports, layout, isHangingProtocolLayout } = viewportGridState;
const { displaySetInstanceUIDs, displaySetOptions, viewportOptions } =
viewports.get(activeViewportId);

Expand All @@ -330,7 +331,8 @@ const commandsModule = ({
.map(displaySetInstanceUID =>
hangingProtocolService.getViewportsRequireUpdate(
viewportIdToUpdate,
displaySetInstanceUID
displaySetInstanceUID,
isHangingProtocolLayout
)
)
.flat();
Expand Down Expand Up @@ -511,7 +513,8 @@ const commandsModule = ({

currentDisplaySets.sort(dsSortFn);

const { activeViewportId, viewports } = viewportGridService.getState();
const { activeViewportId, viewports, isHangingProtocolLayout } =
viewportGridService.getState();

const { displaySetInstanceUIDs } = viewports.get(activeViewportId);

Expand Down Expand Up @@ -545,7 +548,8 @@ const commandsModule = ({
try {
updatedViewports = hangingProtocolService.getViewportsRequireUpdate(
activeViewportId,
displaySetInstanceUID
displaySetInstanceUID,
isHangingProtocolLayout
);
} catch (error) {
console.warn(error);
Expand Down
10 changes: 8 additions & 2 deletions extensions/default/src/findViewportsByPosition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { StateSyncService } from '@ohif/core';
*/
export const findOrCreateViewport = (
hangingProtocolService,
isHangingProtocolLayout,
viewportsByPosition,
position: number,
positionId: string,
Expand All @@ -31,8 +32,13 @@ export const findOrCreateViewport = (
if (!options.inDisplay) {
options.inDisplay = [...viewportsByPosition.initialInDisplay];
}
// See if there is a default viewport for new views.
const missing = hangingProtocolService.getMissingViewport(protocolId, stageIndex, options);

// See if there is a default viewport for new views
const missing = hangingProtocolService.getMissingViewport(
isHangingProtocolLayout ? protocolId : 'default',
stageIndex,
options
);
if (missing) {
const displaySetInstanceUIDs = missing.displaySetsInfo.map(it => it.displaySetInstanceUID);
options.inDisplay.push(...displaySetInstanceUIDs);
Expand Down
6 changes: 4 additions & 2 deletions extensions/default/src/getSopClassHandlerModule.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ function getDisplaySetInfo(instances) {
const { isDynamicVolume, timePoints } = dynamicVolumeInfo;
let displaySetInfo;

const { appConfig } = appContext;

if (isDynamicVolume) {
const timePoint = timePoints[0];
const instancesMap = new Map();
Expand All @@ -46,9 +48,9 @@ function getDisplaySetInfo(instances) {

const firstTimePointInstances = timePoint.map(imageId => instancesMap.get(imageId));

displaySetInfo = isDisplaySetReconstructable(firstTimePointInstances);
displaySetInfo = isDisplaySetReconstructable(firstTimePointInstances, appConfig);
} else {
displaySetInfo = isDisplaySetReconstructable(instances);
displaySetInfo = isDisplaySetReconstructable(instances, appConfig);
}

return {
Expand Down
4 changes: 2 additions & 2 deletions extensions/measurement-tracking/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
"start": "yarn run dev"
},
"peerDependencies": {
"@cornerstonejs/core": "^1.70.8",
"@cornerstonejs/tools": "^1.70.8",
"@cornerstonejs/core": "^1.70.9",
"@cornerstonejs/tools": "^1.70.9",
"@ohif/core": "3.8.0-beta.85",
"@ohif/extension-cornerstone-dicom-sr": "3.8.0-beta.85",
"@ohif/ui": "3.8.0-beta.85",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ function PanelStudyBrowserTracking({
// doesn't have to have such an intense shape. This works well enough for now.
// Tabs --> Studies --> DisplaySets --> Thumbnails
const { StudyInstanceUIDs } = useImageViewer();
const [{ activeViewportId, viewports }, viewportGridService] = useViewportGrid();
const [{ activeViewportId, viewports, isHangingProtocolLayout }, viewportGridService] =
useViewportGrid();
const [trackedMeasurements, sendTrackedMeasurementsEvent] = useTrackedMeasurements();
const [activeTabName, setActiveTabName] = useState('primary');
const [expandedStudyInstanceUIDs, setExpandedStudyInstanceUIDs] = useState([
Expand All @@ -51,7 +52,8 @@ function PanelStudyBrowserTracking({
try {
updatedViewports = hangingProtocolService.getViewportsRequireUpdate(
viewportId,
displaySetInstanceUID
displaySetInstanceUID,
isHangingProtocolLayout
);
} catch (error) {
console.warn(error);
Expand Down
8 changes: 4 additions & 4 deletions modes/basic-test-mode/src/moreTools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ const moreTools = [
createButton({
id: 'Magnify',
icon: 'tool-magnify',
label: 'Magnify',
tooltip: 'Magnify',
label: 'Zoom-in',
tooltip: 'Zoom-in',
commands: setToolActiveToolbar,
evaluate: 'evaluate.cornerstoneTool',
}),
Expand Down Expand Up @@ -169,8 +169,8 @@ const moreTools = [
createButton({
id: 'AdvancedMagnify',
icon: 'icon-tool-loupe',
label: 'Loupe',
tooltip: 'Loupe',
label: 'Magnify Probe',
tooltip: 'Magnify Probe',
commands: 'toggleActiveDisabledToolbar',
evaluate: 'evaluate.cornerstoneTool.toggle.ifStrictlyDisabled',
}),
Expand Down
8 changes: 4 additions & 4 deletions modes/longitudinal/src/moreTools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ const moreTools = [
createButton({
id: 'Magnify',
icon: 'tool-magnify',
label: 'Magnify',
tooltip: 'Magnify',
label: 'Zoom-in',
tooltip: 'Zoom-in',
commands: setToolActiveToolbar,
evaluate: 'evaluate.cornerstoneTool',
}),
Expand All @@ -161,8 +161,8 @@ const moreTools = [
createButton({
id: 'AdvancedMagnify',
icon: 'icon-tool-loupe',
label: 'Loupe',
tooltip: 'Loupe',
label: 'Magnify Probe',
tooltip: 'Magnify Probe',
commands: 'toggleActiveDisabledToolbar',
evaluate: 'evaluate.cornerstoneTool.toggle.ifStrictlyDisabled',
}),
Expand Down
8 changes: 4 additions & 4 deletions modes/segmentation/src/toolbarButtons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,8 @@ const toolbarButtons: Button[] = [
createButton({
id: 'Magnify',
icon: 'tool-magnify',
label: 'Magnify',
tooltip: 'Magnify',
label: 'Zoom-in',
tooltip: 'Zoom-in',
commands: setToolActiveToolbar,
evaluate: 'evaluate.cornerstoneTool',
}),
Expand Down Expand Up @@ -238,8 +238,8 @@ const toolbarButtons: Button[] = [
createButton({
id: 'AdvancedMagnify',
icon: 'icon-tool-loupe',
label: 'Loupe',
tooltip: 'Loupe',
label: 'Magnify Probe',
tooltip: 'Magnify Probe',
commands: 'toggleActiveDisabledToolbar',
evaluate: 'evaluate.cornerstoneTool.toggle.ifStrictlyDisabled',
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ describe('OHIF Study List', function () {
'[data-cy="mode-basic-test-1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1"]'
).click();
cy.get('[data-cy="return-to-work-list"]').click();
cy.wait(2000);

cy.get('@searchResult2').should($list => {
expect($list.length).to.be.eq(1);
expect($list).to.contain('Juno');
Expand All @@ -72,6 +74,8 @@ describe('OHIF Study List', function () {
'[data-cy="mode-basic-test-1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1"]'
).click();
cy.get('[data-cy="return-to-work-list"]').click();
cy.wait(2000);

cy.get('@searchResult2').should($list => {
expect($list.length).to.be.eq(1);
expect($list).to.contain('0000003');
Expand All @@ -82,6 +86,7 @@ describe('OHIF Study List', function () {
cy.get('@AccessionNumber').type('321');
//Wait result list to be displayed
cy.waitStudyList();
cy.wait(2000);
cy.get('@searchResult2').should($list => {
expect($list.length).to.be.eq(1);
expect($list).to.contain('321');
Expand All @@ -92,11 +97,15 @@ describe('OHIF Study List', function () {
cy.get('@AccessionNumber').type('0000155811');
//Wait result list to be displayed
cy.waitStudyList();
cy.wait(2000);

cy.get('[data-cy="studyRow-1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1"]').click();
cy.get(
'[data-cy="mode-basic-test-1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1"]'
).click();
cy.get('[data-cy="return-to-work-list"]').click();
cy.wait(2000);

cy.get('@searchResult2').should($list => {
expect($list.length).to.be.eq(1);
expect($list).to.contain('0000155811');
Expand All @@ -107,6 +116,8 @@ describe('OHIF Study List', function () {
cy.get('@StudyDescription').type('PETCT');
//Wait result list to be displayed
cy.waitStudyList();
cy.wait(2000);

cy.get('@searchResult2').should($list => {
expect($list.length).to.be.eq(1);
expect($list).to.contain('PETCT');
Expand All @@ -117,13 +128,15 @@ describe('OHIF Study List', function () {
cy.get('@StudyDescription').type('PETCT');
//Wait result list to be displayed
cy.waitStudyList();
cy.wait(2000);

cy.get('[data-cy="studyRow-1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1"]').click();
cy.get(
'[data-cy="mode-basic-test-1.3.6.1.4.1.25403.345050719074.3824.20170125113417.1"]'
).click();
cy.get('[data-cy="return-to-work-list"]').click();
cy.wait(2000);

cy.wait(1000);
cy.get('@searchResult2').should($list => {
expect($list.length).to.be.eq(1);
expect($list).to.contain('PETCT');
Expand Down
Loading

0 comments on commit d250d04

Please sign in to comment.