summaryrefslogtreecommitdiff
path: root/frontend/src/sagas/portfolios.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/sagas/portfolios.js')
-rw-r--r--frontend/src/sagas/portfolios.js43
1 files changed, 33 insertions, 10 deletions
diff --git a/frontend/src/sagas/portfolios.js b/frontend/src/sagas/portfolios.js
index cda1be9b..ed9bfd29 100644
--- a/frontend/src/sagas/portfolios.js
+++ b/frontend/src/sagas/portfolios.js
@@ -1,4 +1,4 @@
-import { call, put, select } from 'redux-saga/effects'
+import { call, put, select, delay } from 'redux-saga/effects'
import { addPropToStoreObject, addToStore } from '../actions/objects'
import { addPortfolio, deletePortfolio, getPortfolio, updatePortfolio } from '../api/routes/portfolios'
import { getProject } from '../api/routes/projects'
@@ -15,7 +15,34 @@ export function* onOpenPortfolioSucceeded(action) {
yield fetchAndStoreAllSchedulers()
yield fetchAndStoreAllTraces()
- // TODO Fetch portfolio-specific metrics
+ yield watchForPortfolioResults()
+ } catch (error) {
+ console.error(error)
+ }
+}
+
+export function* watchForPortfolioResults() {
+ try {
+ const currentPortfolioId = yield select((state) => state.currentPortfolioId)
+ let unfinishedScenarios = yield getCurrentUnfinishedScenarios()
+
+ while (unfinishedScenarios.length > 0) {
+ yield delay(3000)
+ yield fetchPortfolioWithScenarios(currentPortfolioId)
+ unfinishedScenarios = yield getCurrentUnfinishedScenarios()
+ }
+ } catch (error) {
+ console.error(error)
+ }
+}
+
+export function* getCurrentUnfinishedScenarios() {
+ try {
+ const currentPortfolioId = yield select((state) => state.currentPortfolioId)
+ const scenarioIds = yield select((state) => state.objects.portfolio[currentPortfolioId].scenarioIds)
+ const scenarioObjects = yield select((state) => state.objects.scenario)
+ const scenarios = scenarioIds.map((s) => scenarioObjects[s])
+ return scenarios.filter((s) => !s || s.simulation.state === 'QUEUED' || s.simulation.state === 'RUNNING')
} catch (error) {
console.error(error)
}
@@ -62,7 +89,7 @@ export function* onAddPortfolio(action) {
Object.assign({}, action.portfolio, {
projectId: currentProjectId,
scenarioIds: [],
- }),
+ })
)
yield put(addToStore('portfolio', portfolio))
@@ -70,7 +97,7 @@ export function* onAddPortfolio(action) {
yield put(
addPropToStoreObject('project', currentProjectId, {
portfolioIds: portfolioIds.concat([portfolio._id]),
- }),
+ })
)
} catch (error) {
console.error(error)
@@ -79,11 +106,7 @@ export function* onAddPortfolio(action) {
export function* onUpdatePortfolio(action) {
try {
- const portfolio = yield call(
- updatePortfolio,
- action.portfolio._id,
- action.portfolio,
- )
+ const portfolio = yield call(updatePortfolio, action.portfolio._id, action.portfolio)
yield put(addToStore('portfolio', portfolio))
} catch (error) {
console.error(error)
@@ -100,7 +123,7 @@ export function* onDeletePortfolio(action) {
yield put(
addPropToStoreObject('project', currentProjectId, {
portfolioIds: portfolioIds.filter((id) => id !== action.id),
- }),
+ })
)
} catch (error) {
console.error(error)