summaryrefslogtreecommitdiff
path: root/frontend/src/sagas/scenarios.js
diff options
context:
space:
mode:
authorGeorgios Andreadis <info@gandreadis.com>2020-07-10 10:24:31 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-08-24 19:48:01 +0200
commit3b4e27320c479bd6ef48998f448ed070e8bd7511 (patch)
tree35ec6527e8d7a0b4093e18c8cb501c293a18b5eb /frontend/src/sagas/scenarios.js
parentb30906bbe0d5f343b337a80de1b4b70ebf288331 (diff)
parent8aa174e70c01631ae4e00a6d208966fcd77cf972 (diff)
Merge pull request #8 from atlarge-research/feature/portfolios-scenarios-frontend
Portfolios and scenarios on the frontend
Diffstat (limited to 'frontend/src/sagas/scenarios.js')
-rw-r--r--frontend/src/sagas/scenarios.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/frontend/src/sagas/scenarios.js b/frontend/src/sagas/scenarios.js
new file mode 100644
index 00000000..48b1e9be
--- /dev/null
+++ b/frontend/src/sagas/scenarios.js
@@ -0,0 +1,72 @@
+import { call, put, select } from 'redux-saga/effects'
+import { addPropToStoreObject, addToStore } from '../actions/objects'
+import { getProject } from '../api/routes/projects'
+import { fetchAndStoreAllSchedulers, fetchAndStoreAllTraces } from './objects'
+import { fetchAndStoreAllTopologiesOfProject } from './topology'
+import { addScenario, deleteScenario, updateScenario } from '../api/routes/scenarios'
+import { fetchPortfolioWithScenarios } from './portfolios'
+
+export function* onOpenScenarioSucceeded(action) {
+ try {
+ const project = yield call(getProject, action.projectId)
+ yield put(addToStore('project', project))
+ yield fetchAndStoreAllTopologiesOfProject(project._id)
+ yield fetchAndStoreAllSchedulers()
+ yield fetchAndStoreAllTraces()
+ yield fetchPortfolioWithScenarios(action.portfolioId)
+
+ // TODO Fetch scenario-specific metrics
+ } catch (error) {
+ console.error(error)
+ }
+}
+
+export function* onAddScenario(action) {
+ try {
+ const scenario = yield call(
+ addScenario,
+ action.scenario.portfolioId,
+ action.scenario,
+ )
+ yield put(addToStore('scenario', scenario))
+
+ const scenarioIds = yield select((state) => state.objects.portfolio[action.scenario.portfolioId].scenarioIds)
+ yield put(
+ addPropToStoreObject('portfolio', action.scenario.portfolioId, {
+ scenarioIds: scenarioIds.concat([scenario._id]),
+ }),
+ )
+ } catch (error) {
+ console.error(error)
+ }
+}
+
+export function* onUpdateScenario(action) {
+ try {
+ const scenario = yield call(
+ updateScenario,
+ action.scenario._id,
+ action.scenario,
+ )
+ yield put(addToStore('scenario', scenario))
+ } catch (error) {
+ console.error(error)
+ }
+}
+
+export function* onDeleteScenario(action) {
+ try {
+ yield call(deleteScenario, action.id)
+
+ const currentPortfolioId = yield select((state) => state.currentPortfolioId)
+ const scenarioIds = yield select((state) => state.objects.project[currentPortfolioId].scenarioIds)
+
+ yield put(
+ addPropToStoreObject('scenario', currentPortfolioId, {
+ scenarioIds: scenarioIds.filter((id) => id !== action.id),
+ }),
+ )
+ } catch (error) {
+ console.error(error)
+ }
+}