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

View File

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

View File

@ -1,9 +1,10 @@
/* 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 { 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
@ -14,6 +15,7 @@ import { appConfig, extensionManager } from '../App.jsx';
* @param {function} props.children - Layout Template React Component
*/
function DataSourceWrapper(props) {
const { appConfig } = useContext(appConfigContext);
const { children: LayoutTemplate, history, ...rest } = props;
const queryFilterValues = _getQueryFilterValues(history.location.search);

View File

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

View File

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