summaryrefslogtreecommitdiff
path: root/frontend/src/containers
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/containers')
-rw-r--r--frontend/src/containers/app/sidebars/project/PortfolioListContainer.js47
-rw-r--r--frontend/src/containers/app/sidebars/project/ProjectSidebarContainer.js7
-rw-r--r--frontend/src/containers/app/sidebars/project/ScenarioListContainer.js45
-rw-r--r--frontend/src/containers/app/sidebars/project/TopologyListContainer.js29
-rw-r--r--frontend/src/containers/experiments/ExperimentListContainer.js28
-rw-r--r--frontend/src/containers/experiments/ExperimentRowContainer.js30
-rw-r--r--frontend/src/containers/experiments/NewExperimentButtonContainer.js15
-rw-r--r--frontend/src/containers/modals/NewExperimentModal.js39
-rw-r--r--frontend/src/containers/modals/NewPortfolioModal.js32
-rw-r--r--frontend/src/containers/modals/NewScenarioModal.js46
10 files changed, 192 insertions, 126 deletions
diff --git a/frontend/src/containers/app/sidebars/project/PortfolioListContainer.js b/frontend/src/containers/app/sidebars/project/PortfolioListContainer.js
new file mode 100644
index 00000000..d32a5c60
--- /dev/null
+++ b/frontend/src/containers/app/sidebars/project/PortfolioListContainer.js
@@ -0,0 +1,47 @@
+import { connect } from 'react-redux'
+import { withRouter } from 'react-router-dom'
+import PortfolioListComponent from '../../../../components/app/sidebars/project/PortfolioListComponent'
+import { deletePortfolio, setCurrentPortfolio } from '../../../../actions/portfolios'
+import { openNewPortfolioModal } from '../../../../actions/modals/portfolios'
+import { getState } from '../../../../util/state-utils'
+import { setCurrentTopology } from '../../../../actions/topology/building'
+
+const mapStateToProps = state => {
+ let portfolios = state.objects.project[state.currentProjectId] ? state.objects.project[state.currentProjectId].portfolioIds.map(t => (
+ state.objects.portfolio[t]
+ )) : []
+ if (portfolios.filter(t => !t).length > 0) {
+ portfolios = []
+ }
+
+ return {
+ currentProjectId: state.currentProjectId,
+ currentPortfolioId: state.currentPortfolioId,
+ portfolios,
+ }
+}
+
+const mapDispatchToProps = (dispatch, ownProps) => {
+ return {
+ onNewPortfolio: () => {
+ dispatch(openNewPortfolioModal())
+ },
+ onChoosePortfolio: (portfolioId) => {
+ dispatch(setCurrentPortfolio(portfolioId))
+ },
+ onDeletePortfolio: async (id) => {
+ if (id) {
+ const state = await getState(dispatch)
+ dispatch(deletePortfolio(id))
+ dispatch(setCurrentTopology(state.objects.project[state.currentProjectId].topologyIds[0]))
+ ownProps.history.push(`/projects/${state.currentProjectId}`)
+ }
+ },
+ }
+}
+
+const PortfolioListContainer = withRouter(connect(mapStateToProps, mapDispatchToProps)(
+ PortfolioListComponent,
+))
+
+export default PortfolioListContainer
diff --git a/frontend/src/containers/app/sidebars/project/ProjectSidebarContainer.js b/frontend/src/containers/app/sidebars/project/ProjectSidebarContainer.js
index ced0b18b..3951c24a 100644
--- a/frontend/src/containers/app/sidebars/project/ProjectSidebarContainer.js
+++ b/frontend/src/containers/app/sidebars/project/ProjectSidebarContainer.js
@@ -1,5 +1,10 @@
+import React from 'react'
+import { withRouter } from 'react-router-dom'
import ProjectSidebarComponent from '../../../../components/app/sidebars/project/ProjectSidebarComponent'
-const ProjectSidebarContainer = ProjectSidebarComponent
+const ProjectSidebarContainer = withRouter(({ location, ...props }) => (
+ <ProjectSidebarComponent
+ collapsible={location.pathname.indexOf('portfolios') === -1 && location.pathname.indexOf('scenarios') === -1} {...props}/>
+))
export default ProjectSidebarContainer
diff --git a/frontend/src/containers/app/sidebars/project/ScenarioListContainer.js b/frontend/src/containers/app/sidebars/project/ScenarioListContainer.js
new file mode 100644
index 00000000..2fd56d2b
--- /dev/null
+++ b/frontend/src/containers/app/sidebars/project/ScenarioListContainer.js
@@ -0,0 +1,45 @@
+import { connect } from 'react-redux'
+import ScenarioListComponent from '../../../../components/app/sidebars/project/ScenarioListComponent'
+import { openNewScenarioModal } from '../../../../actions/modals/scenarios'
+import { deleteScenario, setCurrentScenario } from '../../../../actions/scenarios'
+import { setCurrentPortfolio } from '../../../../actions/portfolios'
+
+const mapStateToProps = (state, ownProps) => {
+ let scenarios = state.objects.portfolio[ownProps.portfolioId] ? state.objects.portfolio[ownProps.portfolioId].scenarioIds.map(t => (
+ state.objects.scenario[t]
+ )) : []
+ if (scenarios.filter(t => !t).length > 0) {
+ scenarios = []
+ }
+
+ return {
+ currentProjectId: state.currentProjectId,
+ currentScenarioId: state.currentScenarioId,
+ scenarios,
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ onNewScenario: (currentPortfolioId) => {
+ dispatch(setCurrentPortfolio(currentPortfolioId))
+ dispatch(openNewScenarioModal())
+ },
+ onChooseScenario: (portfolioId, scenarioId) => {
+ dispatch(setCurrentScenario(portfolioId, scenarioId))
+ },
+ onDeleteScenario: (id) => {
+ if (id) {
+ dispatch(
+ deleteScenario(id),
+ )
+ }
+ },
+ }
+}
+
+const ScenarioListContainer = connect(mapStateToProps, mapDispatchToProps)(
+ ScenarioListComponent,
+)
+
+export default ScenarioListContainer
diff --git a/frontend/src/containers/app/sidebars/project/TopologyListContainer.js b/frontend/src/containers/app/sidebars/project/TopologyListContainer.js
index cab47c8d..6905c7c5 100644
--- a/frontend/src/containers/app/sidebars/project/TopologyListContainer.js
+++ b/frontend/src/containers/app/sidebars/project/TopologyListContainer.js
@@ -2,7 +2,9 @@ import { connect } from 'react-redux'
import TopologyListComponent from '../../../../components/app/sidebars/project/TopologyListComponent'
import { setCurrentTopology } from '../../../../actions/topology/building'
import { openNewTopologyModal } from '../../../../actions/modals/topology'
-import { deleteTopology } from '../../../../actions/topologies'
+import { withRouter } from 'react-router-dom'
+import { getState } from '../../../../util/state-utils'
+import { deleteScenario } from '../../../../actions/scenarios'
const mapStateToProps = state => {
let topologies = state.objects.project[state.currentProjectId] ? state.objects.project[state.currentProjectId].topologyIds.map(t => (
@@ -13,34 +15,35 @@ const mapStateToProps = state => {
}
return {
- show: state.modals.changeTopologyModalVisible,
currentTopologyId: state.currentTopologyId,
topologies,
+
}
}
-const mapDispatchToProps = dispatch => {
+const mapDispatchToProps = (dispatch, ownProps) => {
return {
- onChooseTopology: (id) => {
- dispatch(
- setCurrentTopology(id),
- )
+ onChooseTopology: async (id) => {
+ dispatch(setCurrentTopology(id))
+ const state = await getState(dispatch)
+ ownProps.history.push(`/projects/${state.currentProjectId}`)
},
onNewTopology: () => {
dispatch(openNewTopologyModal())
},
- onDeleteTopology: (id) => {
+ onDeleteTopology: async (id) => {
if (id) {
- dispatch(
- deleteTopology(id),
- )
+ const state = await getState(dispatch)
+ dispatch(deleteScenario(id))
+ dispatch(setCurrentTopology(state.objects.project[state.currentProjectId].topologyIds[0]))
+ ownProps.history.push(`/projects/${state.currentProjectId}`)
}
},
}
}
-const TopologyListContainer = connect(mapStateToProps, mapDispatchToProps)(
+const TopologyListContainer = withRouter(connect(mapStateToProps, mapDispatchToProps)(
TopologyListComponent,
-)
+))
export default TopologyListContainer
diff --git a/frontend/src/containers/experiments/ExperimentListContainer.js b/frontend/src/containers/experiments/ExperimentListContainer.js
deleted file mode 100644
index 0b3b70ca..00000000
--- a/frontend/src/containers/experiments/ExperimentListContainer.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { connect } from 'react-redux'
-import ExperimentListComponent from '../../components/experiments/ExperimentListComponent'
-
-const mapStateToProps = state => {
- if (
- state.currentProjectId === '-1' ||
- !('experimentIds' in state.objects.project[state.currentProjectId])
- ) {
- return {
- loading: true,
- experimentIds: [],
- }
- }
-
- const experimentIds =
- state.objects.project[state.currentProjectId].experimentIds
- if (experimentIds) {
- return {
- experimentIds,
- }
- }
-}
-
-const ExperimentListContainer = connect(mapStateToProps)(
- ExperimentListComponent,
-)
-
-export default ExperimentListContainer
diff --git a/frontend/src/containers/experiments/ExperimentRowContainer.js b/frontend/src/containers/experiments/ExperimentRowContainer.js
deleted file mode 100644
index 87d8af67..00000000
--- a/frontend/src/containers/experiments/ExperimentRowContainer.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { connect } from 'react-redux'
-import { deleteExperiment } from '../../actions/experiments'
-import ExperimentRowComponent from '../../components/experiments/ExperimentRowComponent'
-
-const mapStateToProps = (state, ownProps) => {
- const experiment = Object.assign(
- {},
- state.objects.experiment[ownProps.experimentId],
- )
- experiment.trace = state.objects.trace[experiment.traceId]
- experiment.scheduler = state.objects.scheduler[experiment.schedulerName]
- experiment.topology = state.objects.topology[experiment.topologyId]
-
- return {
- experiment,
- projectId: state.currentProjectId,
- }
-}
-
-const mapDispatchToProps = dispatch => {
- return {
- onDelete: id => dispatch(deleteExperiment(id)),
- }
-}
-
-const ExperimentRowContainer = connect(mapStateToProps, mapDispatchToProps)(
- ExperimentRowComponent,
-)
-
-export default ExperimentRowContainer
diff --git a/frontend/src/containers/experiments/NewExperimentButtonContainer.js b/frontend/src/containers/experiments/NewExperimentButtonContainer.js
deleted file mode 100644
index 41895d8a..00000000
--- a/frontend/src/containers/experiments/NewExperimentButtonContainer.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { connect } from 'react-redux'
-import { openNewExperimentModal } from '../../actions/modals/experiments'
-import NewExperimentButtonComponent from '../../components/experiments/NewExperimentButtonComponent'
-
-const mapDispatchToProps = dispatch => {
- return {
- onClick: () => dispatch(openNewExperimentModal()),
- }
-}
-
-const NewExperimentButtonContainer = connect(undefined, mapDispatchToProps)(
- NewExperimentButtonComponent,
-)
-
-export default NewExperimentButtonContainer
diff --git a/frontend/src/containers/modals/NewExperimentModal.js b/frontend/src/containers/modals/NewExperimentModal.js
deleted file mode 100644
index f07b53e6..00000000
--- a/frontend/src/containers/modals/NewExperimentModal.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import { connect } from 'react-redux'
-import { addExperiment } from '../../actions/experiments'
-import { closeNewExperimentModal } from '../../actions/modals/experiments'
-import NewExperimentModalComponent from '../../components/modals/custom-components/NewExperimentModalComponent'
-
-const mapStateToProps = state => {
- return {
- show: state.modals.newExperimentModalVisible,
- topologies: state.objects.project[state.currentProjectId].topologyIds.map(t => (
- state.objects.topology[t]
- )),
- traces: Object.values(state.objects.trace),
- schedulers: Object.values(state.objects.scheduler),
- }
-}
-
-const mapDispatchToProps = dispatch => {
- return {
- callback: (name, topologyId, traceId, schedulerName) => {
- if (name) {
- dispatch(
- addExperiment({
- name,
- topologyId,
- traceId,
- schedulerName,
- }),
- )
- }
- dispatch(closeNewExperimentModal())
- },
- }
-}
-
-const NewExperimentModal = connect(mapStateToProps, mapDispatchToProps)(
- NewExperimentModalComponent,
-)
-
-export default NewExperimentModal
diff --git a/frontend/src/containers/modals/NewPortfolioModal.js b/frontend/src/containers/modals/NewPortfolioModal.js
new file mode 100644
index 00000000..5c4644d5
--- /dev/null
+++ b/frontend/src/containers/modals/NewPortfolioModal.js
@@ -0,0 +1,32 @@
+import { connect } from 'react-redux'
+import NewPortfolioModalComponent from '../../components/modals/custom-components/NewPortfolioModalComponent'
+import { addPortfolio } from '../../actions/portfolios'
+import { closeNewPortfolioModal } from '../../actions/modals/portfolios'
+
+const mapStateToProps = state => {
+ return {
+ show: state.modals.newPortfolioModalVisible,
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ callback: (name, targets) => {
+ if (name) {
+ dispatch(
+ addPortfolio({
+ name,
+ targets
+ }),
+ )
+ }
+ dispatch(closeNewPortfolioModal())
+ },
+ }
+}
+
+const NewPortfolioModal = connect(mapStateToProps, mapDispatchToProps)(
+ NewPortfolioModalComponent,
+)
+
+export default NewPortfolioModal
diff --git a/frontend/src/containers/modals/NewScenarioModal.js b/frontend/src/containers/modals/NewScenarioModal.js
new file mode 100644
index 00000000..0b273ed0
--- /dev/null
+++ b/frontend/src/containers/modals/NewScenarioModal.js
@@ -0,0 +1,46 @@
+import { connect } from 'react-redux'
+import NewScenarioModalComponent from '../../components/modals/custom-components/NewScenarioModalComponent'
+import { addScenario } from '../../actions/scenarios'
+import { closeNewScenarioModal } from '../../actions/modals/scenarios'
+
+const mapStateToProps = state => {
+ let topologies = state.currentProjectId !== '-1' ? state.objects.project[state.currentProjectId].topologyIds.map(t => (
+ state.objects.topology[t]
+ )) : []
+ if (topologies.filter(t => !t).length > 0) {
+ topologies = []
+ }
+
+ return {
+ show: state.modals.newScenarioModalVisible,
+ currentPortfolioId: state.currentPortfolioId,
+ traces: Object.values(state.objects.trace),
+ topologies,
+ schedulers: Object.values(state.objects.scheduler),
+ }
+}
+
+const mapDispatchToProps = dispatch => {
+ return {
+ callback: (name, portfolioId, trace, topology, operational) => {
+ if (name) {
+ dispatch(
+ addScenario({
+ portfolioId,
+ name,
+ trace,
+ topology,
+ operational,
+ }),
+ )
+ }
+ dispatch(closeNewScenarioModal())
+ },
+ }
+}
+
+const NewScenarioModal = connect(mapStateToProps, mapDispatchToProps)(
+ NewScenarioModalComponent,
+)
+
+export default NewScenarioModal