summaryrefslogtreecommitdiff
path: root/frontend/src/actions/topology
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/actions/topology')
-rw-r--r--frontend/src/actions/topology/building.js117
-rw-r--r--frontend/src/actions/topology/machine.js25
-rw-r--r--frontend/src/actions/topology/rack.js23
-rw-r--r--frontend/src/actions/topology/room.js48
4 files changed, 213 insertions, 0 deletions
diff --git a/frontend/src/actions/topology/building.js b/frontend/src/actions/topology/building.js
new file mode 100644
index 00000000..c6381a07
--- /dev/null
+++ b/frontend/src/actions/topology/building.js
@@ -0,0 +1,117 @@
+export const SET_CURRENT_DATACENTER = "SET_CURRENT_DATACENTER";
+export const RESET_CURRENT_DATACENTER = "RESET_CURRENT_DATACENTER";
+export const START_NEW_ROOM_CONSTRUCTION = "START_NEW_ROOM_CONSTRUCTION";
+export const START_NEW_ROOM_CONSTRUCTION_SUCCEEDED =
+ "START_NEW_ROOM_CONSTRUCTION_SUCCEEDED";
+export const FINISH_NEW_ROOM_CONSTRUCTION = "FINISH_NEW_ROOM_CONSTRUCTION";
+export const CANCEL_NEW_ROOM_CONSTRUCTION = "CANCEL_NEW_ROOM_CONSTRUCTION";
+export const CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED =
+ "CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED";
+export const START_ROOM_EDIT = "START_ROOM_EDIT";
+export const FINISH_ROOM_EDIT = "FINISH_ROOM_EDIT";
+export const ADD_TILE = "ADD_TILE";
+export const DELETE_TILE = "DELETE_TILE";
+
+export function setCurrentDatacenter(datacenterId) {
+ return {
+ type: SET_CURRENT_DATACENTER,
+ datacenterId
+ };
+}
+
+export function resetCurrentDatacenter() {
+ return {
+ type: RESET_CURRENT_DATACENTER
+ };
+}
+
+export function startNewRoomConstruction() {
+ return {
+ type: START_NEW_ROOM_CONSTRUCTION
+ };
+}
+
+export function startNewRoomConstructionSucceeded(roomId) {
+ return {
+ type: START_NEW_ROOM_CONSTRUCTION_SUCCEEDED,
+ roomId
+ };
+}
+
+export function finishNewRoomConstruction() {
+ return (dispatch, getState) => {
+ const { objects, construction } = getState();
+ if (
+ objects.room[construction.currentRoomInConstruction].tileIds.length === 0
+ ) {
+ dispatch(cancelNewRoomConstruction());
+ return;
+ }
+
+ dispatch({
+ type: FINISH_NEW_ROOM_CONSTRUCTION
+ });
+ };
+}
+
+export function cancelNewRoomConstruction() {
+ return {
+ type: CANCEL_NEW_ROOM_CONSTRUCTION
+ };
+}
+
+export function cancelNewRoomConstructionSucceeded() {
+ return {
+ type: CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED
+ };
+}
+
+export function startRoomEdit() {
+ return (dispatch, getState) => {
+ const { interactionLevel } = getState();
+ dispatch({
+ type: START_ROOM_EDIT,
+ roomId: interactionLevel.roomId
+ });
+ };
+}
+
+export function finishRoomEdit() {
+ return {
+ type: FINISH_ROOM_EDIT
+ };
+}
+
+export function toggleTileAtLocation(positionX, positionY) {
+ return (dispatch, getState) => {
+ const { objects, construction } = getState();
+
+ const tileIds =
+ objects.room[construction.currentRoomInConstruction].tileIds;
+ for (let index in tileIds) {
+ if (
+ objects.tile[tileIds[index]].positionX === positionX &&
+ objects.tile[tileIds[index]].positionY === positionY
+ ) {
+ dispatch(deleteTile(tileIds[index]));
+ return;
+ }
+ }
+ dispatch(addTile(positionX, positionY));
+ };
+}
+
+export function addTile(positionX, positionY) {
+ return {
+ type: ADD_TILE,
+ positionX,
+ positionY
+ };
+}
+
+export function deleteTile(tileId) {
+ return {
+ type: DELETE_TILE,
+ tileId
+ };
+}
diff --git a/frontend/src/actions/topology/machine.js b/frontend/src/actions/topology/machine.js
new file mode 100644
index 00000000..56968b7d
--- /dev/null
+++ b/frontend/src/actions/topology/machine.js
@@ -0,0 +1,25 @@
+export const DELETE_MACHINE = "DELETE_MACHINE";
+export const ADD_UNIT = "ADD_UNIT";
+export const DELETE_UNIT = "DELETE_UNIT";
+
+export function deleteMachine() {
+ return {
+ type: DELETE_MACHINE
+ };
+}
+
+export function addUnit(unitType, id) {
+ return {
+ type: ADD_UNIT,
+ unitType,
+ id
+ };
+}
+
+export function deleteUnit(unitType, index) {
+ return {
+ type: DELETE_UNIT,
+ unitType,
+ index
+ };
+}
diff --git a/frontend/src/actions/topology/rack.js b/frontend/src/actions/topology/rack.js
new file mode 100644
index 00000000..06988424
--- /dev/null
+++ b/frontend/src/actions/topology/rack.js
@@ -0,0 +1,23 @@
+export const EDIT_RACK_NAME = "EDIT_RACK_NAME";
+export const DELETE_RACK = "DELETE_RACK";
+export const ADD_MACHINE = "ADD_MACHINE";
+
+export function editRackName(name) {
+ return {
+ type: EDIT_RACK_NAME,
+ name
+ };
+}
+
+export function deleteRack() {
+ return {
+ type: DELETE_RACK
+ };
+}
+
+export function addMachine(position) {
+ return {
+ type: ADD_MACHINE,
+ position
+ };
+}
diff --git a/frontend/src/actions/topology/room.js b/frontend/src/actions/topology/room.js
new file mode 100644
index 00000000..4e0fc3a2
--- /dev/null
+++ b/frontend/src/actions/topology/room.js
@@ -0,0 +1,48 @@
+import { findTileWithPosition } from "../../util/tile-calculations";
+
+export const EDIT_ROOM_NAME = "EDIT_ROOM_NAME";
+export const DELETE_ROOM = "DELETE_ROOM";
+export const START_RACK_CONSTRUCTION = "START_RACK_CONSTRUCTION";
+export const STOP_RACK_CONSTRUCTION = "STOP_RACK_CONSTRUCTION";
+export const ADD_RACK_TO_TILE = "ADD_RACK_TO_TILE";
+
+export function editRoomName(name) {
+ return {
+ type: EDIT_ROOM_NAME,
+ name
+ };
+}
+
+export function startRackConstruction() {
+ return {
+ type: START_RACK_CONSTRUCTION
+ };
+}
+
+export function stopRackConstruction() {
+ return {
+ type: STOP_RACK_CONSTRUCTION
+ };
+}
+
+export function addRackToTile(positionX, positionY) {
+ return (dispatch, getState) => {
+ const { objects, interactionLevel } = getState();
+ const currentRoom = objects.room[interactionLevel.roomId];
+ const tiles = currentRoom.tileIds.map(tileId => objects.tile[tileId]);
+ const tile = findTileWithPosition(tiles, positionX, positionY);
+
+ if (tile !== null) {
+ dispatch({
+ type: ADD_RACK_TO_TILE,
+ tileId: tile.id
+ });
+ }
+ };
+}
+
+export function deleteRoom() {
+ return {
+ type: DELETE_ROOM
+ };
+}