summaryrefslogtreecommitdiff
path: root/src/sagas/topology.js
diff options
context:
space:
mode:
authorGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-08-31 17:59:51 +0200
committerGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-23 10:05:50 +0200
commit3f736cd3db63f106eac02f220477b4a0f3b0eceb (patch)
tree80afa73f8c4d281b2fccba8ad2baa7c10f7e7e84 /src/sagas/topology.js
parentb17f1d8cb4815f57a4b7043cc91b867ec3cbc867 (diff)
Implement room creation
Diffstat (limited to 'src/sagas/topology.js')
-rw-r--r--src/sagas/topology.js74
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);
+ }
+}