summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/redux/sagas
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-07-07 15:07:11 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-07-07 15:07:11 +0200
commitaa788a3ad18badfac8beaabdaffc88b9e52f9306 (patch)
tree2046d0a401ca0853d5e85de9d6360edcb79f7ebd /opendc-web/opendc-web-ui/src/redux/sagas
parent1ce8bf170cda2afab334cd330325cd4fbb97dab4 (diff)
ui: Remove current ids state from Redux
This change removes the current active identifiers from the Redux state. Instead, we use the router query to track the active project, portfolio and topology.
Diffstat (limited to 'opendc-web/opendc-web-ui/src/redux/sagas')
-rw-r--r--opendc-web/opendc-web-ui/src/redux/sagas/portfolios.js48
-rw-r--r--opendc-web/opendc-web-ui/src/redux/sagas/projects.js2
-rw-r--r--opendc-web/opendc-web-ui/src/redux/sagas/scenarios.js8
-rw-r--r--opendc-web/opendc-web-ui/src/redux/sagas/topology.js28
4 files changed, 39 insertions, 47 deletions
diff --git a/opendc-web/opendc-web-ui/src/redux/sagas/portfolios.js b/opendc-web/opendc-web-ui/src/redux/sagas/portfolios.js
index 340cb490..48d1ad3e 100644
--- a/opendc-web/opendc-web-ui/src/redux/sagas/portfolios.js
+++ b/opendc-web/opendc-web-ui/src/redux/sagas/portfolios.js
@@ -12,35 +12,37 @@ export function* onOpenPortfolioSucceeded(action) {
const project = yield call(getProject, auth, action.projectId)
yield put(addToStore('project', project))
yield fetchAndStoreAllTopologiesOfProject(project._id)
- yield fetchPortfoliosOfProject()
+ yield fetchPortfoliosOfProject(project)
yield fetchAndStoreAllSchedulers()
yield fetchAndStoreAllTraces()
- yield watchForPortfolioResults()
+ yield watchForPortfolioResults(action.portfolioId)
} catch (error) {
console.error(error)
}
}
-export function* watchForPortfolioResults() {
+export function* watchForPortfolioResults(portfolioId) {
try {
- const currentPortfolioId = yield select((state) => state.currentPortfolioId)
- let unfinishedScenarios = yield getCurrentUnfinishedScenarios()
+ let unfinishedScenarios = yield getCurrentUnfinishedScenarios(portfolioId)
while (unfinishedScenarios.length > 0) {
yield delay(3000)
- yield fetchPortfolioWithScenarios(currentPortfolioId)
- unfinishedScenarios = yield getCurrentUnfinishedScenarios()
+ yield fetchPortfolioWithScenarios(portfolioId)
+ unfinishedScenarios = yield getCurrentUnfinishedScenarios(portfolioId)
}
} catch (error) {
console.error(error)
}
}
-export function* getCurrentUnfinishedScenarios() {
+export function* getCurrentUnfinishedScenarios(portfolioId) {
try {
- const currentPortfolioId = yield select((state) => state.currentPortfolioId)
- const scenarioIds = yield select((state) => state.objects.portfolio[currentPortfolioId].scenarioIds)
+ if (!portfolioId) {
+ return []
+ }
+
+ const scenarioIds = yield select((state) => state.objects.portfolio[portfolioId].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')
@@ -49,16 +51,13 @@ export function* getCurrentUnfinishedScenarios() {
}
}
-export function* fetchPortfoliosOfProject() {
+export function* fetchPortfoliosOfProject(project) {
try {
- const currentProjectId = yield select((state) => state.currentProjectId)
- const currentProject = yield select((state) => state.objects.project[currentProjectId])
-
yield fetchAndStoreAllSchedulers()
yield fetchAndStoreAllTraces()
- for (let i in currentProject.portfolioIds) {
- yield fetchPortfolioWithScenarios(currentProject.portfolioIds[i])
+ for (const i in project.portfolioIds) {
+ yield fetchPortfolioWithScenarios(project.portfolioIds[i])
}
} catch (error) {
console.error(error)
@@ -83,22 +82,22 @@ export function* fetchPortfolioWithScenarios(portfolioId) {
export function* onAddPortfolio(action) {
try {
- const currentProjectId = yield select((state) => state.currentProjectId)
+ const { projectId } = action
const auth = yield getContext('auth')
const portfolio = yield call(
addPortfolio,
auth,
- currentProjectId,
+ projectId,
Object.assign({}, action.portfolio, {
- projectId: currentProjectId,
+ projectId: projectId,
scenarioIds: [],
})
)
yield put(addToStore('portfolio', portfolio))
- const portfolioIds = yield select((state) => state.objects.project[currentProjectId].portfolioIds)
+ const portfolioIds = yield select((state) => state.objects.project[projectId].portfolioIds)
yield put(
- addPropToStoreObject('project', currentProjectId, {
+ addPropToStoreObject('project', projectId, {
portfolioIds: portfolioIds.concat([portfolio._id]),
})
)
@@ -120,13 +119,14 @@ export function* onUpdatePortfolio(action) {
export function* onDeletePortfolio(action) {
try {
const auth = yield getContext('auth')
+ const portfolio = yield select((state) => state.objects.portfolio[action.id])
+
yield call(deletePortfolio, auth, action.id)
- const currentProjectId = yield select((state) => state.currentProjectId)
- const portfolioIds = yield select((state) => state.objects.project[currentProjectId].portfolioIds)
+ const portfolioIds = yield select((state) => state.objects.project[portfolio.projectId].portfolioIds)
yield put(
- addPropToStoreObject('project', currentProjectId, {
+ addPropToStoreObject('project', portfolio.projectId, {
portfolioIds: portfolioIds.filter((id) => id !== action.id),
})
)
diff --git a/opendc-web/opendc-web-ui/src/redux/sagas/projects.js b/opendc-web/opendc-web-ui/src/redux/sagas/projects.js
index 506df6ed..0689090a 100644
--- a/opendc-web/opendc-web-ui/src/redux/sagas/projects.js
+++ b/opendc-web/opendc-web-ui/src/redux/sagas/projects.js
@@ -13,7 +13,7 @@ export function* onOpenProjectSucceeded(action) {
yield put(addToStore('project', project))
yield fetchAndStoreAllTopologiesOfProject(action.id, true)
- yield fetchPortfoliosOfProject()
+ yield fetchPortfoliosOfProject(project)
yield fetchAndStoreAllSchedulers()
yield fetchAndStoreAllTraces()
} catch (error) {
diff --git a/opendc-web/opendc-web-ui/src/redux/sagas/scenarios.js b/opendc-web/opendc-web-ui/src/redux/sagas/scenarios.js
index bdb7c45d..b2979636 100644
--- a/opendc-web/opendc-web-ui/src/redux/sagas/scenarios.js
+++ b/opendc-web/opendc-web-ui/src/redux/sagas/scenarios.js
@@ -34,7 +34,7 @@ export function* onAddScenario(action) {
scenarioIds: scenarioIds.concat([scenario._id]),
})
)
- yield watchForPortfolioResults()
+ yield watchForPortfolioResults(action.scenario.portfolioId)
} catch (error) {
console.error(error)
}
@@ -53,13 +53,13 @@ export function* onUpdateScenario(action) {
export function* onDeleteScenario(action) {
try {
const auth = yield getContext('auth')
+ const scenario = yield select((state) => state.objects.scenario[action.id])
yield call(deleteScenario, auth, action.id)
- const currentPortfolioId = yield select((state) => state.currentPortfolioId)
- const scenarioIds = yield select((state) => state.objects.portfolio[currentPortfolioId].scenarioIds)
+ const scenarioIds = yield select((state) => state.objects.portfolio[scenario.portfolioId].scenarioIds)
yield put(
- addPropToStoreObject('scenario', currentPortfolioId, {
+ addPropToStoreObject('scenario', scenario.portfolioId, {
scenarioIds: scenarioIds.filter((id) => id !== action.id),
})
)
diff --git a/opendc-web/opendc-web-ui/src/redux/sagas/topology.js b/opendc-web/opendc-web-ui/src/redux/sagas/topology.js
index e5fd3d39..4f7bc8db 100644
--- a/opendc-web/opendc-web-ui/src/redux/sagas/topology.js
+++ b/opendc-web/opendc-web-ui/src/redux/sagas/topology.js
@@ -38,31 +38,23 @@ export function* fetchAndStoreAllTopologiesOfProject(projectId, setTopology = fa
export function* onAddTopology(action) {
try {
- const currentProjectId = yield select((state) => state.currentProjectId)
+ const { projectId, duplicateId, name } = action
let topologyToBeCreated
- if (action.duplicateId) {
- topologyToBeCreated = yield getTopologyAsObject(action.duplicateId, false)
- topologyToBeCreated = Object.assign({}, topologyToBeCreated, {
- name: action.name,
- })
+ if (duplicateId) {
+ topologyToBeCreated = yield getTopologyAsObject(duplicateId, false)
+ topologyToBeCreated = { ...topologyToBeCreated, name }
} else {
topologyToBeCreated = { name: action.name, rooms: [] }
}
const auth = yield getContext('auth')
- const topology = yield call(
- addTopology,
- auth,
- Object.assign({}, topologyToBeCreated, {
- projectId: currentProjectId,
- })
- )
+ const topology = yield call(addTopology, auth, { ...topologyToBeCreated, projectId })
yield fetchAndStoreTopology(topology._id)
- const topologyIds = yield select((state) => state.objects.project[currentProjectId].topologyIds)
+ const topologyIds = yield select((state) => state.objects.project[projectId].topologyIds)
yield put(
- addPropToStoreObject('project', currentProjectId, {
+ addPropToStoreObject('project', projectId, {
topologyIds: topologyIds.concat([topology._id]),
})
)
@@ -74,8 +66,8 @@ export function* onAddTopology(action) {
export function* onDeleteTopology(action) {
try {
- const currentProjectId = yield select((state) => state.currentProjectId)
- const topologyIds = yield select((state) => state.objects.project[currentProjectId].topologyIds)
+ const topology = yield select((state) => state.objects.topologies[action.id])
+ const topologyIds = yield select((state) => state.objects.project[topology.projectId].topologyIds)
const currentTopologyId = yield select((state) => state.currentTopologyId)
if (currentTopologyId === action.id) {
yield put(setCurrentTopology(topologyIds.filter((t) => t !== action.id)[0]))
@@ -85,7 +77,7 @@ export function* onDeleteTopology(action) {
yield call(deleteTopology, auth, action.id)
yield put(
- addPropToStoreObject('project', currentProjectId, {
+ addPropToStoreObject('project', topology.projectId, {
topologyIds: topologyIds.filter((id) => id !== action.id),
})
)