Create a DataSourceWrapper to determine correct data source and provide data to layout component
This commit is contained in:
parent
068939b70f
commit
3238edddd2
32
platform/viewer/src/routes/DataSourceWrapper.jsx
Normal file
32
platform/viewer/src/routes/DataSourceWrapper.jsx
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* eslint-disable react/jsx-props-no-spreading */
|
||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
//
|
||||||
|
import { extensionManager } from '../App.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses route properties to determine the data source that should be passed
|
||||||
|
* to the child layout template. In some instances, initiates requests and
|
||||||
|
* passes data as props.
|
||||||
|
*
|
||||||
|
* @param {object} props
|
||||||
|
* @param {function} props.children - Layout Template React Component
|
||||||
|
*/
|
||||||
|
function DataSourceWrapper(props) {
|
||||||
|
const { children: LayoutTemplate, ...rest } = props;
|
||||||
|
console.log('data source wrapper', props);
|
||||||
|
console.log(extensionManager);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<LayoutTemplate {...rest} />
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
DataSourceWrapper.propTypes = {
|
||||||
|
/** Layout Component to wrap with a Data Source */
|
||||||
|
children: PropTypes.oneOfType([PropTypes.element, PropTypes.func]).isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DataSourceWrapper;
|
||||||
@ -2,16 +2,23 @@ import React from 'react';
|
|||||||
import { Switch, Route } from 'react-router-dom';
|
import { Switch, Route } from 'react-router-dom';
|
||||||
|
|
||||||
// Route Components
|
// Route Components
|
||||||
|
import DataSourceWrapper from './DataSourceWrapper';
|
||||||
import StudyListContainer from './StudyListContainer';
|
import StudyListContainer from './StudyListContainer';
|
||||||
import NotFound from './NotFound';
|
import NotFound from './NotFound';
|
||||||
|
|
||||||
const bakedInRoutes = [
|
const bakedInRoutes = [
|
||||||
{ path: '/', exact: true, component: StudyListContainer },
|
{
|
||||||
|
path: '/',
|
||||||
|
exact: true,
|
||||||
|
component: DataSourceWrapper,
|
||||||
|
props: { children: StudyListContainer },
|
||||||
|
},
|
||||||
{ component: NotFound },
|
{ component: NotFound },
|
||||||
];
|
];
|
||||||
|
|
||||||
const createRoutes = routes => {
|
const createRoutes = routes => {
|
||||||
console.log('Creating Routes: ', routes, bakedInRoutes);
|
console.log('Creating Routes: ', routes, bakedInRoutes);
|
||||||
|
// TODO: Shouldn't need to guard input routes with an empty array?
|
||||||
const allRoutes = [...(routes || []), ...bakedInRoutes];
|
const allRoutes = [...(routes || []), ...bakedInRoutes];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -23,8 +30,10 @@ const createRoutes = routes => {
|
|||||||
path={route.path}
|
path={route.path}
|
||||||
exact={route.exact}
|
exact={route.exact}
|
||||||
strict={route.strict}
|
strict={route.strict}
|
||||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
render={props => (
|
||||||
render={props => <route.component {...props} route={route} />}
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||||
|
<route.component {...props} {...route.props} route={route} />
|
||||||
|
)}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user