From ae0858bdd31132448cb0218c7a7dab9a7606aa4f Mon Sep 17 00:00:00 2001 From: dannyrb Date: Fri, 31 May 2019 11:55:44 -0400 Subject: [PATCH] Shift store init to own directory --- src/App.js | 20 +++------------ src/connectedComponents/ConnectedHeader.js | 4 +-- .../ConnectedToolbarRow.js | 8 ++++-- .../ConnectedUserPreferencesModal.js | 6 ++--- src/store/index.js | 25 +++++++++++++++++++ src/{redux => store/layout}/actions.js | 0 src/{redux/ui.js => store/layout/reducers.js} | 6 +++-- 7 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 src/store/index.js rename src/{redux => store/layout}/actions.js (100%) rename src/{redux/ui.js => store/layout/reducers.js} (92%) diff --git a/src/App.js b/src/App.js index 2d73bb449..6215a8a99 100644 --- a/src/App.js +++ b/src/App.js @@ -1,8 +1,6 @@ import './config'; -import { OidcProvider, reducer as oidcReducer } from 'redux-oidc'; import React, { Component } from 'react'; -import { combineReducers, createStore } from 'redux'; import { getDefaultToolbarButtons, getUserManagerForOpenIdConnectClient, @@ -17,32 +15,20 @@ import OHIFDicomMicroscopyExtension from 'ohif-dicom-microscopy-extension'; import OHIFDicomPDFExtension from 'ohif-dicom-pdf-extension'; import OHIFStandaloneViewer from './OHIFStandaloneViewer'; import OHIFVTKExtension from '@ohif/extension-vtk'; +import { OidcProvider } from 'redux-oidc'; import PropTypes from 'prop-types'; import { Provider } from 'react-redux'; import { BrowserRouter as Router } from 'react-router-dom'; import WhiteLabellingContext from './WhiteLabellingContext'; import setupTools from './setupTools'; -import ui from './redux/ui.js'; +import store from './store'; const { ExtensionManager } = OHIF.extensions; -const { reducers, localStorage } = OHIF.redux; - -reducers.ui = ui; -reducers.oidc = oidcReducer; - -const combined = combineReducers(reducers); -const store = createStore(combined, localStorage.loadState()); - -store.subscribe(() => { - localStorage.saveState({ - preferences: store.getState().preferences, - }); -}); setupTools(store); const children = { - viewport: [], + viewport: [], }; /** TODO: extensions should be passed in as prop as soon as we have the extensions as separate packages and then registered by ExtensionsManager */ diff --git a/src/connectedComponents/ConnectedHeader.js b/src/connectedComponents/ConnectedHeader.js index f07576589..73644c976 100644 --- a/src/connectedComponents/ConnectedHeader.js +++ b/src/connectedComponents/ConnectedHeader.js @@ -1,6 +1,6 @@ -import { connect } from 'react-redux'; import Header from '../components/Header/Header.js'; -import { setUserPreferencesModalOpen } from '../redux/actions.js'; +import { connect } from 'react-redux'; +import { setUserPreferencesModalOpen } from '../store/layout/actions.js'; const mapStateToProps = state => { return { diff --git a/src/connectedComponents/ConnectedToolbarRow.js b/src/connectedComponents/ConnectedToolbarRow.js index 58ca7b087..b887ff9c4 100644 --- a/src/connectedComponents/ConnectedToolbarRow.js +++ b/src/connectedComponents/ConnectedToolbarRow.js @@ -1,6 +1,10 @@ -import { connect } from 'react-redux'; +import { + setLeftSidebarOpen, + setRightSidebarOpen, +} from './../store/layout/actions.js'; + import ToolbarRow from './ToolbarRow'; -import { setLeftSidebarOpen, setRightSidebarOpen } from '../redux/actions.js'; +import { connect } from 'react-redux'; const defaultPlugin = 'cornerstone'; diff --git a/src/connectedComponents/ConnectedUserPreferencesModal.js b/src/connectedComponents/ConnectedUserPreferencesModal.js index 8d55b0ccd..26ed515eb 100644 --- a/src/connectedComponents/ConnectedUserPreferencesModal.js +++ b/src/connectedComponents/ConnectedUserPreferencesModal.js @@ -1,8 +1,8 @@ -import { connect } from 'react-redux'; -import { UserPreferencesModal } from 'react-viewerbase'; import OHIF from 'ohif-core'; -import { setUserPreferencesModalOpen } from '../redux/actions.js'; +import { UserPreferencesModal } from 'react-viewerbase'; import cloneDeep from 'lodash.clonedeep'; +import { connect } from 'react-redux'; +import { setUserPreferencesModalOpen } from './../store/layout/actions.js'; const { setUserPreferences } = OHIF.redux.actions; diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 000000000..04c81a2d6 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,25 @@ +import { combineReducers, createStore } from 'redux'; + +import layoutReducers from './layout/reducers.js'; +import { reducer as oidcReducer } from 'redux-oidc'; +import { redux } from 'ohif-core'; + +// Combine our ohif-core, ui, and oidc reducers +// Set init data, using values found in localStorage +const { reducers, localStorage } = redux; + +reducers.ui = layoutReducers; +reducers.oidc = oidcReducer; + +const combined = combineReducers(reducers); +const store = createStore(combined, localStorage.loadState()); + +// When the store's preferences change, +// Update our cached preferences in localStorage +store.subscribe(() => { + localStorage.saveState({ + preferences: store.getState().preferences, + }); +}); + +export default store; diff --git a/src/redux/actions.js b/src/store/layout/actions.js similarity index 100% rename from src/redux/actions.js rename to src/store/layout/actions.js diff --git a/src/redux/ui.js b/src/store/layout/reducers.js similarity index 92% rename from src/redux/ui.js rename to src/store/layout/reducers.js index 586d8d5e1..dde5baa45 100644 --- a/src/redux/ui.js +++ b/src/store/layout/reducers.js @@ -16,11 +16,12 @@ const ui = (state = defaultState, action) => { return Object.assign({}, state, { userPreferencesModalOpen: action.state, }); - case 'SET_LABELLING_FLOW_DATA': + case 'SET_LABELLING_FLOW_DATA': { const labelling = Object.assign({}, action.labellingFlowData); return Object.assign({}, state, { labelling }); - case 'SET_TOOL_CONTEXT_MENU_DATA': + } + case 'SET_TOOL_CONTEXT_MENU_DATA': { const contextMenu = Object.assign({}, state.contextMenu); contextMenu[action.viewportIndex] = Object.assign( @@ -29,6 +30,7 @@ const ui = (state = defaultState, action) => { ); return Object.assign({}, state, { contextMenu }); + } case 'RESET_LABELLING_AND_CONTEXT_MENU': return Object.assign({}, state, { labelling: defaultState.labelling,