labo-components
Version:
88 lines (73 loc) • 3.94 kB
JSX
import ProjectAPI from './api/ProjectAPI';
import SessionStorageHandler from "./util/SessionStorageHandler";
//bookmark and annotation view
import ProjectBookmarkView from './components/workspace/projects/bookmark/ProjectBookmarkView';
import ProjectAnnotationView from './components/workspace/projects/annotation/ProjectAnnotationView';
//basic crud views
import ProjectListView from './components/workspace/projects/crud/ProjectListView';
import ProjectCreateView from './components/workspace/projects/crud/ProjectCreateView';
import ProjectDetailsView from './components/workspace/projects/crud/ProjectDetailsView';
import ProjectEditView from './components/workspace/projects/crud/ProjectEditView';
//session view
import ProjectSessionView from './components/workspace/projects/session/ProjectSessionView';
import ProjectSessionCreateView from './components/workspace/projects/session/ProjectSessionCreateView';
//queries view
import ProjectQueriesView from './components/workspace/projects/query/ProjectQueriesView';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import {
Switch,
BrowserRouter as Router,
Route,
Redirect
} from 'react-router-dom'
class WorkspaceProjects extends Component {
constructor(props){
super(props);
this.state={}
}
getPropsRenderer(RenderComponent, props, extraProps={}){
return (routeProps) => (
<RenderComponent {...routeProps} {...props} {...extraProps} />
)
}
//FIXME there is an overload of properties being passed to the components, many are not used in individual components (e.g. see ProjectDetailsView.PropTypes)
render() {
return(
<Router>
<Switch>
<Route exact path="/workspace/projects/session/create/:tool"
render={this.getPropsRenderer(ProjectSessionCreateView, this.props, {api: ProjectAPI})} />
<Route exact path="/workspace/projects"
render={this.getPropsRenderer(ProjectListView, this.props, {api: ProjectAPI} )} />
<Route exact path="/workspace/projects/create"
render={this.getPropsRenderer(ProjectCreateView, this.props, {api: ProjectAPI} )} />
<Route exact path="/workspace/projects/:id" render={({ match }) => (
<Redirect to={`/workspace/projects/${match.params.id}/${SessionStorageHandler.get("bg__project-tab","details")}`} />
)} />
<Route path="/workspace/projects/:id/bookmarks"
render={this.getPropsRenderer(ProjectBookmarkView, this.props, {api: ProjectAPI})} />
<Route path="/workspace/projects/:id/annotations"
render={this.getPropsRenderer(ProjectAnnotationView, this.props, {api: ProjectAPI})} />
<Route path="/workspace/projects/:id/sessions"
render={this.getPropsRenderer(ProjectSessionView, this.props, {api: ProjectAPI})} />
<Route path="/workspace/projects/:id/queries"
render={this.getPropsRenderer(ProjectQueriesView, this.props)} />
<Route path="/workspace/projects/:id/details"
render={this.getPropsRenderer(ProjectDetailsView, this.props, {api: ProjectAPI})} />
<Route path="/workspace/projects/:id/edit"
render={this.getPropsRenderer(ProjectEditView, this.props, {api: ProjectAPI})} />
</Switch>
</Router>
);
}
}
WorkspaceProjects.propTypes = {
// project api
api: PropTypes.func.isRequired,
// current user object used for defining access roles per project
user: PropTypes.shape({
id: PropTypes.string.isRequired
}).isRequired,
};
export default WorkspaceProjects;