From fc9c52a8f102202bd0e1a8a9dc4d8d68babe2304 Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Fri, 8 Sep 2017 10:27:00 +0200 Subject: Implement UI for unit addition and removal --- src/sagas/topology.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/sagas/topology.js') diff --git a/src/sagas/topology.js b/src/sagas/topology.js index 9eab4368..f507b2ad 100644 --- a/src/sagas/topology.js +++ b/src/sagas/topology.js @@ -7,7 +7,7 @@ import { fetchLatestDatacenterSucceeded, startNewRoomConstructionSucceeded } from "../actions/topology/building"; -import {deleteMachineSucceeded} from "../actions/topology/machine"; +import {addUnitSucceeded, deleteMachineSucceeded, deleteUnitSucceeded} from "../actions/topology/machine"; import {addMachineSucceeded, deleteRackSucceeded, editRackNameSucceeded} from "../actions/topology/rack"; import {addRackToTileSucceeded, deleteRoomSucceeded, editRoomNameSucceeded} from "../actions/topology/room"; import {addRoomToDatacenter} from "../api/routes/datacenters"; @@ -18,6 +18,7 @@ import { deleteMachineInRackOnTile, deleteRackFromTile, deleteTile, + updateMachineInRackOnTile, updateRackOnTile } from "../api/routes/tiles"; import { @@ -262,3 +263,36 @@ export function* onDeleteMachine() { console.log(error); } } + +export function* onAddUnit(action) { + try { + const tileId = yield select(state => state.interactionLevel.tileId); + const position = yield select(state => state.interactionLevel.position); + const machine = yield select(state => state.objects.machine[state.objects.rack[ + state.objects.tile[tileId].objectId].machineIds[position - 1]]); + const updatedMachine = Object.assign({}, machine, + {[action.unitType + "Ids"]: [...machine[action.unitType + "Ids"], action.id]}); + + yield call(updateMachineInRackOnTile, tileId, position, updatedMachine); + yield put(addUnitSucceeded(action.unitType, action.id)); + } catch (error) { + console.log(error); + } +} + +export function* onDeleteUnit(action) { + try { + const tileId = yield select(state => state.interactionLevel.tileId); + const position = yield select(state => state.interactionLevel.position); + const machine = yield select(state => state.objects.machine[state.objects.rack[ + state.objects.tile[tileId].objectId].machineIds[position - 1]]); + const unitIds = machine[action.unitType + "Ids"].slice(); + unitIds.splice(action.index, 1); + const updatedMachine = Object.assign({}, machine, {[action.unitType + "Ids"]: unitIds}); + + yield call(updateMachineInRackOnTile, tileId, position, updatedMachine); + yield put(deleteUnitSucceeded(action.unitType, action.index)); + } catch (error) { + console.log(error); + } +} -- cgit v1.2.3