diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-08-31 17:59:51 +0200 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-23 10:05:50 +0200 |
| commit | 3f736cd3db63f106eac02f220477b4a0f3b0eceb (patch) | |
| tree | 80afa73f8c4d281b2fccba8ad2baa7c10f7e7e84 /src/sagas/topology.js | |
| parent | b17f1d8cb4815f57a4b7043cc91b867ec3cbc867 (diff) | |
Implement room creation
Diffstat (limited to 'src/sagas/topology.js')
| -rw-r--r-- | src/sagas/topology.js | 74 |
1 files changed, 67 insertions, 7 deletions
diff --git a/src/sagas/topology.js b/src/sagas/topology.js index a15e6a30..815cd842 100644 --- a/src/sagas/topology.js +++ b/src/sagas/topology.js @@ -1,6 +1,15 @@ -import {put} from "redux-saga/effects"; -import {addPropToStoreObject} from "../actions/objects"; -import {fetchLatestDatacenterSucceeded} from "../actions/topology"; +import {call, put, select} from "redux-saga/effects"; +import {addPropToStoreObject, addToStore} from "../actions/objects"; +import { + addTileSucceeded, + cancelNewRoomConstructionSucceeded, + deleteTileSucceeded, + fetchLatestDatacenterSucceeded, + startNewRoomConstructionSucceeded +} from "../actions/topology"; +import {addRoomToDatacenter} from "../api/routes/datacenters"; +import {addTileToRoom, deleteRoom} from "../api/routes/rooms"; +import {deleteTile} from "../api/routes/tiles"; import { fetchAndStoreCoolingItem, fetchAndStoreDatacenter, @@ -27,11 +36,12 @@ export function* onFetchLatestDatacenter(action) { export function* fetchDatacenter(datacenterId) { try { - const datacenter = yield fetchAndStoreDatacenter(datacenterId); - datacenter.roomIds = (yield fetchAndStoreRoomsOfDatacenter(datacenterId)).map(room => room.id); + yield fetchAndStoreDatacenter(datacenterId); + const rooms = yield fetchAndStoreRoomsOfDatacenter(datacenterId); + yield put(addPropToStoreObject("datacenter", datacenterId, {roomIds: rooms.map(room => room.id)})); - for (let index in datacenter.roomIds) { - yield fetchRoom(datacenter.roomIds[index]); + for (let index in rooms) { + yield fetchRoom(rooms[index].id); } } catch (error) { console.log(error); @@ -69,3 +79,53 @@ function* fetchTile(tile) { console.warn("Unknown object type encountered while fetching tile objects"); } } + +export function* onStartNewRoomConstruction() { + try { + const datacenterId = yield select(state => state.currentDatacenterId); + const room = yield call(addRoomToDatacenter, { + id: -1, + datacenterId, + roomType: "SERVER" + }); + const roomWithEmptyTileList = Object.assign(room, {tileIds: []}); + yield put(addToStore("room", roomWithEmptyTileList)); + yield put(startNewRoomConstructionSucceeded(room.id)); + } catch (error) { + console.log(error); + } +} + +export function* onCancelNewRoomConstruction() { + try { + const roomId = yield select(state => state.currentRoomInConstruction); + yield call(deleteRoom, roomId); + yield put(cancelNewRoomConstructionSucceeded()); + } catch (error) { + console.log(error); + } +} + +export function* onAddTile(action) { + try { + const roomId = yield select(state => state.currentRoomInConstruction); + const tile = yield call(addTileToRoom, { + roomId, + positionX: action.positionX, + positionY: action.positionY + }); + yield put(addToStore("tile", tile)); + yield put(addTileSucceeded(tile.id)); + } catch (error) { + console.log(error); + } +} + +export function* onDeleteTile(action) { + try { + yield call(deleteTile, action.tileId); + yield put(deleteTileSucceeded(action.tileId)); + } catch (error) { + console.log(error); + } +} |
