Compare commits

..
Author SHA1 Message Date
ohif-bot 3f7eb8a5d3 chore(release): publish [skip ci]
- @ohif/extension-vtk@1.2.14
 - @ohif/core@2.3.8
 - @ohif/viewer@3.4.14
2020-02-06 02:56:29 +00:00
Gustavo André LelisandDanny Brown 7b2d44f2c1 fix: Remove trash data from redux storage after updates (#1358)
* Remove tash data from redux storage after updates

* Imprelemnted more unit tests

* Remove missing comment

Co-authored-by: Danny Brown <danny.ri.brown@gmail.com>
2020-02-05 21:54:57 -05:00
8 changed files with 344 additions and 41 deletions

No files matched your search

+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.2.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.2.13...@ohif/extension-vtk@1.2.14) (2020-02-06)
**Note:** Version bump only for package @ohif/extension-vtk
## [1.2.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.2.12...@ohif/extension-vtk@1.2.13) (2020-01-30)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-vtk",
"version": "1.2.13",
"version": "1.2.14",
"description": "OHIF extension for VTK.js",
"author": "OHIF",
"license": "MIT",
@@ -52,7 +52,7 @@
"react-vtkjs-viewport": "^0.8.3"
},
"devDependencies": {
"@ohif/core": "^2.3.7",
"@ohif/core": "^2.3.8",
"@ohif/ui": "^1.1.9",
"cornerstone-tools": "^4.12.0",
"cornerstone-wado-image-loader": "^3.0.0",
+11
View File
@@ -3,6 +3,17 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.3.8](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.7...@ohif/core@2.3.8) (2020-02-06)
### Bug Fixes
* Remove trash data from redux storage after updates ([#1358](https://github.com/OHIF/Viewers/issues/1358)) ([7b2d44f](https://github.com/OHIF/Viewers/commit/7b2d44f2c18241ea521b8d3652aee32e36eaddb8))
## [2.3.7](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.6...@ohif/core@2.3.7) (2020-01-30)
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/core",
"version": "2.3.7",
"version": "2.3.8",
"description": "Generic business logic for web-based medical imaging applications",
"author": "OHIF Core Team",
"license": "MIT",
+83 -8
View File
@@ -11,20 +11,63 @@ import {
SET_VIEWPORT_LAYOUT_AND_DATA,
} from './../constants/ActionTypes.js';
const DEFAULT_STATE = {
export const DEFAULT_STATE = {
numRows: 1,
numColumns: 1,
activeViewportIndex: 0,
layout: {
viewports: [
{
// plugin: 'cornerstone',
},
],
viewports: [{}],
},
viewportSpecificData: {},
};
/**
* Take the new number of rows and columns, delete all not used viewport data and also set
* active viewport as default in case current one is not available anymore.
*
* @param {Number} numRows
* @param {Number} numColumns
* @param {Object} currentViewportSpecificData
* @returns
*/
const findActiveViewportSpecificData = (
numRows,
numColumns,
currentViewportSpecificData = {}
) => {
const numberOfViewports = numRows * numColumns;
const viewportSpecificData = cloneDeep(currentViewportSpecificData);
if (numberOfViewports < Object.keys(viewportSpecificData).length) {
Object.keys(viewportSpecificData).forEach(key => {
if (key > numberOfViewports - 1) {
delete viewportSpecificData[key];
}
});
}
return viewportSpecificData;
};
/**
* Take new number of rows and columns and make sure the current active viewport index is still available, if not, return the default
*
* @param {Number} numRows
* @param {Number} numColumns
* @param {Number} currentActiveViewportIndex
* @returns
*/
const getActiveViewportIndex = (
numRows,
numColumns,
currentActiveViewportIndex
) => {
const numberOfViewports = numRows * numColumns;
return currentActiveViewportIndex > numberOfViewports - 1
? DEFAULT_STATE.activeViewportIndex
: currentActiveViewportIndex;
};
/**
* The definition of a viewport action.
*
@@ -50,7 +93,12 @@ const viewports = (state = DEFAULT_STATE, action) => {
* @return {Object} New state.
*/
case SET_VIEWPORT_ACTIVE: {
return { ...state, activeViewportIndex: action.viewportIndex };
const activeViewportIndex = getActiveViewportIndex(
state.numRows,
state.numColumns,
action.viewportIndex
);
return { ...state, activeViewportIndex };
}
/**
@@ -59,11 +107,25 @@ const viewports = (state = DEFAULT_STATE, action) => {
* @return {Object} New state.
*/
case SET_VIEWPORT_LAYOUT: {
const { numRows, numColumns } = action;
const viewportSpecificData = findActiveViewportSpecificData(
numRows,
numColumns,
state.viewportSpecificData
);
const activeViewportIndex = getActiveViewportIndex(
numRows,
numColumns,
state.activeViewportIndex
);
return {
...state,
numRows: action.numRows,
numColumns: action.numColumns,
layout: { viewports: [...action.viewports] },
viewportSpecificData,
activeViewportIndex,
};
}
@@ -73,12 +135,25 @@ const viewports = (state = DEFAULT_STATE, action) => {
* @return {Object} New state.
*/
case SET_VIEWPORT_LAYOUT_AND_DATA: {
const { numRows, numColumns } = action;
const viewportSpecificData = findActiveViewportSpecificData(
numRows,
numColumns,
action.viewportSpecificData
);
const activeViewportIndex = getActiveViewportIndex(
numRows,
numColumns,
state.activeViewportIndex
);
return {
...state,
numRows: action.numRows,
numColumns: action.numColumns,
layout: { viewports: [...action.viewports] },
viewportSpecificData: cloneDeep(action.viewportSpecificData),
viewportSpecificData,
activeViewportIndex,
};
}
@@ -1,35 +1,61 @@
// https://medium.com/@netxm/testing-redux-reducers-with-jest-6653abbfe3e1
import reducer from './viewports.js';
import { Reducer } from 'redux-testkit';
import reducer, { DEFAULT_STATE } from './viewports.js';
import * as types from './../constants/ActionTypes.js';
describe('viewports reducer', () => {
it('should return the initial state', () => {
expect(reducer(undefined, {})).toEqual({
activeViewportIndex: 0,
numRows: 1,
numColumns: 1,
layout: {
viewports: [{}],
},
viewportSpecificData: {},
});
expect(reducer(undefined, {})).toEqual(DEFAULT_STATE);
});
it('should handle SET_VIEWPORT_ACTIVE', () => {
const setViewportActiveAction = {
it('should handle SET_VIEWPORT_ACTIVE with inexistent viewport index', () => {
const initialState = {
numRows: 4,
numColumns: 4,
activeViewportIndex: 0,
};
const action = {
type: types.SET_VIEWPORT_ACTIVE,
viewportIndex: 100,
};
const updatedState = reducer({}, setViewportActiveAction);
const expectedToChangeInState = {
activeViewportIndex: 0,
};
expect(updatedState.activeViewportIndex).toEqual(
setViewportActiveAction.viewportIndex
);
Reducer(reducer)
.withState(initialState)
.expect(action)
.toChangeInState(expectedToChangeInState);
});
it('should handle SET_VIEWPORT_ACTIVE with existent viewport index', () => {
const initialState = {
numRows: 4,
numColumns: 4,
activeViewportIndex: 0,
};
const action = {
type: types.SET_VIEWPORT_ACTIVE,
viewportIndex: 5,
};
const expectedToChangeInState = {
activeViewportIndex: 5,
};
Reducer(reducer)
.withState(initialState)
.expect(action)
.toChangeInState(expectedToChangeInState);
});
it('should handle SET_VIEWPORT_LAYOUT', () => {
const setViewportLayoutAction = {
const initialState = DEFAULT_STATE;
const action = {
type: types.SET_VIEWPORT_LAYOUT,
numRows: 1,
numColumns: 2,
@@ -43,18 +69,193 @@ describe('viewports reducer', () => {
],
};
const updatedState = reducer({}, setViewportLayoutAction);
const expectedToChangeInState = {
numRows: 1,
numColumns: 2,
layout: {
viewports: [
{
plugin: 'cornerstone',
},
{
plugin: 'vtk',
},
],
},
};
expect(updatedState.numRows).toEqual(setViewportLayoutAction.numRows);
expect(updatedState.numColumns).toEqual(setViewportLayoutAction.numColumns);
expect(updatedState.layout.viewports).toEqual(
setViewportLayoutAction.viewports
);
Reducer(reducer)
.withState(initialState)
.expect(action)
.toChangeInState(expectedToChangeInState);
});
it('should handle SET_VIEWPORT_LAYOUT when we reduce the number of viewports', () => {
const initialState = {
numRows: 1,
numColumns: 2,
viewportSpecificData: {
0: { viewportData0: 'viewportData0' },
1: { viewportData1: 'viewportData1' },
},
layout: {
viewports: [],
},
activeViewportIndex: 0,
};
const action = {
type: types.SET_VIEWPORT_LAYOUT,
numRows: 1,
numColumns: 1,
viewports: [],
};
const expectedState = {
numRows: 1,
numColumns: 1,
viewportSpecificData: {
0: { viewportData0: 'viewportData0' },
},
layout: {
viewports: [],
},
activeViewportIndex: 0,
};
Reducer(reducer)
.withState(initialState)
.expect(action)
.toReturnState(expectedState);
});
it('should handle SET_VIEWPORT_LAYOUT_AND_DATA', () => {
const initialState = {
numRows: 1,
numColumns: 1,
viewportSpecificData: {
0: { viewportData0: 'data0' },
},
layout: {
viewports: [{ plugin: 'cornerstone' }],
},
activeViewportIndex: 0,
};
const action = {
type: types.SET_VIEWPORT_LAYOUT_AND_DATA,
numRows: 1,
numColumns: 2,
viewports: [{ plugin: 'cornerstone' }, { plugin: 'cornerstone' }],
viewportSpecificData: {
0: { viewportData0: 'NEWdata0' },
1: { viewportData1: 'NEWdata1' },
},
};
const expectedState = {
numRows: 1,
numColumns: 2,
viewportSpecificData: {
0: { viewportData0: 'NEWdata0' },
1: { viewportData1: 'NEWdata1' },
},
layout: {
viewports: [{ plugin: 'cornerstone' }, { plugin: 'cornerstone' }],
},
activeViewportIndex: 0,
};
Reducer(reducer)
.withState(initialState)
.expect(action)
.toReturnState(expectedState);
});
it('should handle SET_VIEWPORT_LAYOUT_AND_DATA when we reduce the number of viewports', () => {
const initialState = {
numRows: 1,
numColumns: 3,
viewportSpecificData: {
0: { viewportData0: 'vtkData0' },
1: { viewportData1: 'vtkData1' },
2: { viewportData2: 'vtkData2' },
},
layout: {
viewports: [{ plugin: 'vtk' }, { plugin: 'vtk' }, { plugin: 'vtk' }],
},
activeViewportIndex: 0,
};
const action = {
type: types.SET_VIEWPORT_LAYOUT_AND_DATA,
numRows: 1,
numColumns: 1,
viewports: [{ plugin: 'cornerstone' }],
viewportSpecificData: {
0: { viewportData0: 'cornerstoneData0' },
},
};
const expectedState = {
numRows: 1,
numColumns: 1,
viewportSpecificData: {
0: { viewportData0: 'cornerstoneData0' },
},
layout: {
viewports: [{ plugin: 'cornerstone' }],
},
activeViewportIndex: 0,
};
Reducer(reducer)
.withState(initialState)
.expect(action)
.toReturnState(expectedState);
});
it('should handle SET_VIEWPORT when we only set one viewport specific data', () => {
const initialState = {
numRows: 1,
numColumns: 2,
viewportSpecificData: {
0: { viewportData0: 'data0' },
1: { viewportData1: 'data1' },
},
layout: {
viewports: [{ plugin: 'cornerstone' }, { plugin: 'cornerstone' }],
},
activeViewportIndex: 0,
};
const action = {
type: types.SET_VIEWPORT,
viewportIndex: 1,
viewportSpecificData: {
viewportData1: 'NEWdata1',
},
};
const expectedState = {
numRows: 1,
numColumns: 2,
viewportSpecificData: {
0: { viewportData0: 'data0' },
1: { viewportData1: 'NEWdata1' },
},
layout: {
viewports: [{ plugin: 'cornerstone' }, { plugin: 'cornerstone' }],
},
activeViewportIndex: 0,
};
Reducer(reducer)
.withState(initialState)
.expect(action)
.toReturnState(expectedState);
});
// If there were previous keys, this would have
// "merge" behavior, not a clear & set
// May be worth another test?
it('should handle SET_VIEWPORT', () => {
const viewportToSet = 0;
const setViewportAction = {
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.4.14](https://github.com/OHIF/Viewers/compare/@ohif/viewer@3.4.13...@ohif/viewer@3.4.14) (2020-02-06)
**Note:** Version bump only for package @ohif/viewer
## [3.4.13](https://github.com/OHIF/Viewers/compare/@ohif/viewer@3.4.12...@ohif/viewer@3.4.13) (2020-01-30)
**Note:** Version bump only for package @ohif/viewer
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@ohif/viewer",
"version": "3.4.13",
"version": "3.4.14",
"description": "OHIF Viewer",
"author": "OHIF Contributors",
"license": "MIT",
@@ -45,12 +45,12 @@
},
"dependencies": {
"@babel/runtime": "^7.5.5",
"@ohif/core": "^2.3.7",
"@ohif/core": "^2.3.8",
"@ohif/extension-cornerstone": "^2.2.2",
"@ohif/extension-dicom-html": "^1.1.0",
"@ohif/extension-dicom-microscopy": "^0.50.6",
"@ohif/extension-dicom-pdf": "^1.0.1",
"@ohif/extension-vtk": "^1.2.13",
"@ohif/extension-vtk": "^1.2.14",
"@ohif/i18n": "^0.52.5",
"@ohif/ui": "^1.1.9",
"@tanem/react-nprogress": "^1.1.25",