Using appContext in DataSourceWrapper and createRoutes

This commit is contained in:
dannyrb 2020-05-17 22:18:25 -04:00
parent c2853f719a
commit 70ad940941
6 changed files with 31 additions and 34 deletions

View File

@ -7,7 +7,7 @@ import { ThemeWrapper } from '@ohif/ui';
// TODO: Should this influence study list? // TODO: Should this influence study list?
import { appConfigContext } from './state/appConfig.context'; import { appConfigContext } from './state/appConfig.context';
import { useAppConfig } from './hooks/useAppConfig'; import { useAppConfig } from './hooks/useAppConfig';
import createRoutes from './routes'; import createAppRoutes from './routes';
import appInit from './appInit.js'; import appInit from './appInit.js';
// Temporarily for testing // Temporarily for testing
@ -20,34 +20,26 @@ const Router = JSON.parse(process.env.USE_HASH_ROUTER)
? HashRouter ? HashRouter
: BrowserRouter; : BrowserRouter;
let appConfig, commandsManager, extensionManager, servicesManager; let commandsManager, extensionManager, servicesManager;
function App({ config, defaultExtensions }) { function App({ config, defaultExtensions }) {
const init = appInit(config, defaultExtensions); const init = appInit(config, defaultExtensions);
// Set above for named export // Set above for named export
appConfig = init.appConfig;
commandsManager = init.commandsManager; commandsManager = init.commandsManager;
extensionManager = init.extensionManager; extensionManager = init.extensionManager;
servicesManager = init.servicesManager; servicesManager = init.servicesManager;
// TODO: Expose configuration w/ context? // Set appConfig
// See: `setConfiguration` in master const appConfigContextApi = useAppConfig(init.appConfig);
const appConfigImp = useAppConfig(); const { routerBasename, modes, dataSources } = appConfigContextApi.appConfig;
console.log('appConfigImp: ', appConfigImp); // Use config to create routes
const appRoutes = createAppRoutes(modes, dataSources, extensionManager);
return ( return (
<appConfigContext.Provider value={appConfigImp}> <appConfigContext.Provider value={appConfigContextApi}>
<Router basename={appConfig.routerBasename}> <Router basename={routerBasename}>
<ThemeWrapper> <ThemeWrapper>{appRoutes}</ThemeWrapper>
{createRoutes(
appConfig.modes,
appConfig.dataSources,
extensionManager,
appConfig,
appConfigImp
)}
</ThemeWrapper>
</Router> </Router>
</appConfigContext.Provider> </appConfigContext.Provider>
); );
@ -92,4 +84,4 @@ App.defaultProps = {
export default App; export default App;
export { appConfig, commandsManager, extensionManager, servicesManager }; export { commandsManager, extensionManager, servicesManager };

View File

@ -59,6 +59,11 @@ function appInit(appConfigOrFunc, defaultExtensions) {
// TODO: We no longer init webWorkers at app level // TODO: We no longer init webWorkers at app level
// TODO: We no longer init the user Manager // TODO: We no longer init the user Manager
// TODO: Remove this
if (!appConfig.modes.length) {
appConfig.modes.push(window.exampleMode);
}
return { return {
appConfig, appConfig,
commandsManager, commandsManager,

View File

@ -4,14 +4,14 @@ import { useCallback, useState } from 'react';
* Implements the state/methods defined in `appConfig.context`. * Implements the state/methods defined in `appConfig.context`.
*/ */
export const useAppConfig = initialValue => { export const useAppConfig = initialValue => {
const [config, setConfig] = useState(initialValue || {}); const [appConfig, setAppConfig] = useState(initialValue || {});
const setCurrentConfig = useCallback(updatedConfig => { const setCurrentAppConfig = useCallback(updatedConfig => {
setConfig(updatedConfig); setAppConfig(updatedConfig);
}, []); }, []);
return { return {
config, appConfig,
setCurrentConfig, setCurrentAppConfig,
}; };
}; };

View File

@ -1,9 +1,10 @@
/* eslint-disable react/jsx-props-no-spreading */ /* eslint-disable react/jsx-props-no-spreading */
import React, { useEffect, useState } from 'react'; import React, { useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { MODULE_TYPES } from '@ohif/core'; import { MODULE_TYPES } from '@ohif/core';
// //
import { appConfig, extensionManager } from '../App.jsx'; import { appConfigContext } from '../state/appConfig.context';
import { extensionManager } from '../App.jsx';
/** /**
* Uses route properties to determine the data source that should be passed * Uses route properties to determine the data source that should be passed
@ -14,6 +15,7 @@ import { appConfig, extensionManager } from '../App.jsx';
* @param {function} props.children - Layout Template React Component * @param {function} props.children - Layout Template React Component
*/ */
function DataSourceWrapper(props) { function DataSourceWrapper(props) {
const { appConfig } = useContext(appConfigContext);
const { children: LayoutTemplate, history, ...rest } = props; const { children: LayoutTemplate, history, ...rest } = props;
const queryFilterValues = _getQueryFilterValues(history.location.search); const queryFilterValues = _getQueryFilterValues(history.location.search);

View File

@ -7,6 +7,7 @@ import NotFound from './NotFound';
import buildModeRoutes from './buildModeRoutes'; import buildModeRoutes from './buildModeRoutes';
// TODO: Make these configurable // TODO: Make these configurable
// TODO: Include "routes" debug route if dev build
const bakedInRoutes = [ const bakedInRoutes = [
// WORK LIST // WORK LIST
{ {
@ -19,16 +20,13 @@ const bakedInRoutes = [
{ component: NotFound }, { component: NotFound },
]; ];
const createRoutes = (modes, dataSources, extensionManager, t, t2) => { const createRoutes = (modes, dataSources, extensionManager) => {
console.log('Creating Routes: ', routes, bakedInRoutes);
console.log(modes, dataSources, extensionManager, t, t2);
if (!modes.length) {
modes.push(window.exampleMode);
}
const routes = buildModeRoutes(modes, dataSources, extensionManager) || []; const routes = buildModeRoutes(modes, dataSources, extensionManager) || [];
// TODO: Shouldn't need to guard input routes with an empty array? // TODO: Shouldn't need to guard input routes with an empty array?
const allRoutes = [...(routes || []), ...bakedInRoutes]; const allRoutes = [...(routes || []), ...bakedInRoutes];
console.log('Creating Routes: ', modes, dataSources, routes, bakedInRoutes, allRoutes);
return ( return (
<Switch> <Switch>
{allRoutes.map((route, i) => { {allRoutes.map((route, i) => {

View File

@ -1,8 +1,8 @@
import { createContext } from 'react'; import { createContext } from 'react';
export const APP_CONFIG_DEFAULT_VALUE = { export const APP_CONFIG_DEFAULT_VALUE = {
config: {}, appConfig: {},
setCurrentConfig: () => {}, setCurrentAppConfig: () => {},
}; };
export const appConfigContext = createContext(APP_CONFIG_DEFAULT_VALUE); export const appConfigContext = createContext(APP_CONFIG_DEFAULT_VALUE);