src/store/Store.js (140 lines of code) (raw):
/*
* Copyright 2021 EPAM Systems, Inc. (https://www.epam.com/)
* SPDX-License-Identifier: Apache-2.0
*/
//
import StoreActionType from './ActionTypes';
import ViewMode from './ViewMode';
import Modes2d from './Modes2d';
import Modes3d from './Modes3d';
//
// Global app settings with initial configuration
//
export const initialState = {
isLoaded: false, // true when file is loaded
fileName: 'brain.ktx', // file name
volumeSet: null, // Volume[]
volumeIndex: 0, // Index of volume (usually 0)
viewMode: ViewMode.VIEW_2D, // 2D or 3D
mode2d: Modes2d.TRANSVERSE, // 2D planar slice direction
sliceRatio: 0.5, // current slice number / slices amount
slider3d_r: 0.09, // 3D slicer Red
slider3d_g: 0.3, // 3D slicer Green
slider3d_b: 0.46, // 3D slicer Blue
mode3d: Modes3d.RAYCAST, // 3D rendering mode
opacityValue3D: 0.53, // 3D Opacity value
isoThresholdValue: 0.46, // Surface ISO threshold value
brightness3DValue: 0.56, // 3D brightness
cut3DRatio: 1.0, // Slice 3D ratio
quality3DStepSize: 0.35, // 3D quality
sliderErRadius: 50.0, // 3D eraser radius
sliderErDepth: 50.0, // 3D eraser depth
volumeRenderer: null,
indexTools2d: 0,
render2dZoom: 1.0,
render2dxPos: 0.0,
render2dyPos: 0.0,
graphics2d: null,
progress: 0, // 0 to 1
titleProgressBar: '',
dicomInfo: null,
isTool3D: false,
sliderContrast3D: 0.0,
arrErrors: [],
dicomSeries: [],
loaderDicom: null,
spinner: false, //true when mock data is loading
is16bit: false, //true when dicom files are loaded
showWindowRangeSlider: false,
showModalConfirmation: false,
showModalWindowCW: false,
showModalSelectFiles: false,
selectedColor: '#ffff00',
};
//
// App reducer
//
const medReducer = (state = initialState, action) => {
switch (action.type) {
case StoreActionType.SET_IS_LOADED:
return Object.assign({}, state, { isLoaded: action.isLoaded });
case StoreActionType.SET_FILENAME:
return Object.assign({}, state, { fileName: action.fileName });
case StoreActionType.SET_VOLUME_SET:
return Object.assign({}, state, { volumeSet: action.volumeSet });
case StoreActionType.SET_VOLUME_INDEX:
return Object.assign({}, state, { volumeIndex: action.volumeIndex });
case StoreActionType.SET_TEXTURE3D:
return Object.assign({}, state, { texture3d: action.texture3d });
case StoreActionType.SET_MODE_VIEW:
return Object.assign({}, state, { viewMode: action.viewMode });
case StoreActionType.SET_MODE_2D:
return Object.assign({}, state, { mode2d: action.mode2d });
case StoreActionType.SET_SLIDER_2D:
return Object.assign({}, state, { sliceRatio: action.sliceRatio });
case StoreActionType.SET_MODE_3D:
return Object.assign({}, state, { mode3d: action.mode3d });
case StoreActionType.SET_SLIDER_3DR:
return Object.assign({}, state, { slider3d_r: action.slider3d_r });
case StoreActionType.SET_SLIDER_3DG:
return Object.assign({}, state, { slider3d_g: action.slider3d_g });
case StoreActionType.SET_SLIDER_3DB:
return Object.assign({}, state, { slider3d_b: action.slider3d_b });
case StoreActionType.SET_SLIDER_Opacity:
return Object.assign({}, state, { opacityValue3D: action.opacityValue3D });
case StoreActionType.SET_SLIDER_Isosurface:
return Object.assign({}, state, { isoThresholdValue: action.isoThresholdValue });
case StoreActionType.SET_SLIDER_ErRadius:
return Object.assign({}, state, { sliderErRadius: action.sliderErRadius });
case StoreActionType.SET_SLIDER_ErDepth:
return Object.assign({}, state, { sliderErDepth: action.sliderErDepth });
case StoreActionType.SET_VOLUME_Renderer:
return Object.assign({}, state, { volumeRenderer: action.volumeRenderer });
case StoreActionType.SET_SLIDER_Brightness:
return Object.assign({}, state, { brightness3DValue: action.brightness3DValue });
case StoreActionType.SET_SLIDER_Cut:
return Object.assign({}, state, { cut3DRatio: action.cut3DRatio });
case StoreActionType.SET_SLIDER_Quality:
return Object.assign({}, state, { quality3DStepSize: action.quality3DStepSize });
case StoreActionType.SET_2D_TOOLS_INDEX:
return Object.assign({}, state, { indexTools2d: action.indexTools2d });
case StoreActionType.SET_2D_ZOOM:
return Object.assign({}, state, { render2dZoom: action.render2dZoom });
case StoreActionType.SET_2D_X_POS:
return Object.assign({}, state, { render2dxPos: action.render2dxPos });
case StoreActionType.SET_2D_Y_POS:
return Object.assign({}, state, { render2dyPos: action.render2dyPos });
case StoreActionType.SET_GRAPHICS_2D:
return Object.assign({}, state, { graphics2d: action.graphics2d });
case StoreActionType.SET_PROGRESS:
return Object.assign({}, state, { progress: action.progress });
case StoreActionType.SET_PROGRESS_INFO:
return Object.assign({}, state, { titleProgressBar: action.titleProgressBar });
case StoreActionType.SET_DICOM_INFO:
return Object.assign({}, state, { dicomInfo: action.dicomInfo });
case StoreActionType.SET_IS_TOOL3D:
return Object.assign({}, state, { isTool3D: action.isTool3D });
case StoreActionType.SET_SLIDER_Contrast3D:
return Object.assign({}, state, { sliderContrast3D: action.sliderContrast3D });
case StoreActionType.SET_ERR_ARRAY:
return Object.assign({}, state, { arrErrors: action.arrErrors });
case StoreActionType.SET_DICOM_SERIES:
return Object.assign({}, state, { dicomSeries: action.dicomSeries });
case StoreActionType.SET_LOADER_DICOM:
return Object.assign({}, state, { loaderDicom: action.loaderDicom });
case StoreActionType.SET_MODAL_TEXT:
return Object.assign({}, state, { showModalText: action.showModalText });
case StoreActionType.SET_MODAL_ALERT:
return Object.assign({}, state, { showModalAlert: action.showModalAlert });
case StoreActionType.SET_SPINNER:
return Object.assign({}, state, { spinner: action.spinner });
case StoreActionType.SET_IS_16_BIT:
return Object.assign({}, state, { is16bit: action.is16bit });
case StoreActionType.SET_SHOW_WINDOW_RANGE:
return Object.assign({}, state, { showWindowRangeSlider: action.showWindowRangeSlider });
case StoreActionType.SET_SHOW_MODAL_CONFIRMATION:
return Object.assign({}, state, { showModalConfirmation: action.showModalConfirmation });
case StoreActionType.SET_SHOW_MODAL_WINDOW_WC:
return Object.assign({}, state, { showModalWindowCW: action.showModalWindowCW });
case StoreActionType.SET_SHOW_MODAL_SELECT_FILES:
return Object.assign({}, state, { showModalSelectFiles: action.showModalSelectFiles });
case StoreActionType.SET_SPINNER_TITLE:
return Object.assign({}, state, { spinnerTitle: action.spinnerTitle });
case StoreActionType.SET_SPINNER_PROGRESS:
return Object.assign({}, state, { spinnerProgress: action.spinnerProgress });
case StoreActionType.SET_SELECTED_COLOR:
return Object.assign({}, state, { selectedColor: action.selectedColor });
default:
return state;
}
};
export default medReducer;