diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-07 22:15:17 +0200 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-23 10:05:58 +0200 |
| commit | 1b5d2658f9ec06308b2a5ed062f6f5b4798ed733 (patch) | |
| tree | 84d35684a50f897fc4c5f460bed595adf22c9e66 /src/actions/topology | |
| parent | 8218c3d3c21bfa7c4f3ee4872722b9b1261576fb (diff) | |
Reorganize actions and state tree
Diffstat (limited to 'src/actions/topology')
| -rw-r--r-- | src/actions/topology/building.js | 130 | ||||
| -rw-r--r-- | src/actions/topology/machine.js | 21 | ||||
| -rw-r--r-- | src/actions/topology/rack.js | 53 | ||||
| -rw-r--r-- | src/actions/topology/room.js | 73 |
4 files changed, 277 insertions, 0 deletions
diff --git a/src/actions/topology/building.js b/src/actions/topology/building.js new file mode 100644 index 00000000..87abbf5b --- /dev/null +++ b/src/actions/topology/building.js @@ -0,0 +1,130 @@ +import {addIdToStoreObjectListProp, removeIdFromStoreObjectListProp} from "../objects"; + +export const FETCH_TOPOLOGY_OF_DATACENTER = "FETCH_TOPOLOGY_OF_DATACENTER"; +export const FETCH_TOPOLOGY_OF_DATACENTER_SUCCEEDED = "FETCH_TOPOLOGY_OF_DATACENTER_SUCCEEDED"; +export const FETCH_LATEST_DATACENTER = "FETCH_LATEST_DATACENTER"; +export const FETCH_LATEST_DATACENTER_SUCCEEDED = "FETCH_LATEST_DATACENTER_SUCCEEDED"; +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 ADD_TILE = "ADD_TILE"; +export const DELETE_TILE = "DELETE_TILE"; + +export function fetchLatestDatacenter() { + return (dispatch, getState) => { + const {currentSimulationId} = getState(); + dispatch({ + type: FETCH_LATEST_DATACENTER, + currentSimulationId + }); + }; +} + +export function fetchLatestDatacenterSucceeded(datacenterId) { + return { + type: FETCH_LATEST_DATACENTER_SUCCEEDED, + datacenterId + }; +} + +export function resetCurrentDatacenter() { + return { + type: RESET_CURRENT_DATACENTER + }; +} + +export function startNewRoomConstruction() { + return { + type: START_NEW_ROOM_CONSTRUCTION + }; +} + +export function startNewRoomConstructionSucceeded(roomId) { + return (dispatch, getState) => { + const {currentDatacenterId} = getState(); + dispatch(addIdToStoreObjectListProp("datacenter", currentDatacenterId, "roomIds", roomId)); + dispatch({ + 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 (dispatch, getState) => { + const {currentDatacenterId, construction} = getState(); + dispatch(removeIdFromStoreObjectListProp("datacenter", currentDatacenterId, "roomIds", + construction.currentRoomInConstruction)); + dispatch({ + type: CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED + }); + }; +} + +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 addTileSucceeded(tileId) { + return (dispatch, getState) => { + const {construction} = getState(); + dispatch(addIdToStoreObjectListProp("room", construction.currentRoomInConstruction, "tileIds", tileId)); + }; +} + +export function deleteTile(tileId) { + return { + type: DELETE_TILE, + tileId + } +} + +export function deleteTileSucceeded(tileId) { + return (dispatch, getState) => { + const {construction} = getState(); + dispatch(removeIdFromStoreObjectListProp("room", construction.currentRoomInConstruction, "tileIds", tileId)); + }; +} diff --git a/src/actions/topology/machine.js b/src/actions/topology/machine.js new file mode 100644 index 00000000..af258a6f --- /dev/null +++ b/src/actions/topology/machine.js @@ -0,0 +1,21 @@ +import {goDownOneInteractionLevel} from "../interaction-level"; +import {addPropToStoreObject} from "../objects"; + +export const DELETE_MACHINE = "DELETE_MACHINE"; + +export function deleteMachine() { + return { + type: DELETE_MACHINE + }; +} + +export function deleteMachineSucceeded() { + return (dispatch, getState) => { + const {interactionLevel, objects} = getState(); + const rack = objects.rack[objects.tile[interactionLevel.tileId].objectId]; + const machineIds = [...rack.machineIds]; + machineIds[interactionLevel.position - 1] = null; + dispatch(goDownOneInteractionLevel()); + dispatch(addPropToStoreObject("rack", rack.id, {machineIds})); + }; +} diff --git a/src/actions/topology/rack.js b/src/actions/topology/rack.js new file mode 100644 index 00000000..cb6ec387 --- /dev/null +++ b/src/actions/topology/rack.js @@ -0,0 +1,53 @@ +import {goDownOneInteractionLevel} from "../interaction-level"; +import {addPropToStoreObject} from "../objects"; + +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 editRackNameSucceeded(name) { + return (dispatch, getState) => { + const {objects, interactionLevel} = getState(); + dispatch(addPropToStoreObject("rack", objects.tile[interactionLevel.tileId].objectId, {name})); + }; +} + +export function deleteRack() { + return { + type: DELETE_RACK + }; +} + +export function deleteRackSucceeded() { + return (dispatch, getState) => { + const {interactionLevel} = getState(); + const currentTileId = interactionLevel.tileId; + dispatch(goDownOneInteractionLevel()); + dispatch(addPropToStoreObject("tile", currentTileId, {objectType: undefined})); + dispatch(addPropToStoreObject("tile", currentTileId, {objectId: undefined})); + }; +} + +export function addMachine(position) { + return { + type: ADD_MACHINE, + position + }; +} + +export function addMachineSucceeded(machine) { + return (dispatch, getState) => { + const {objects, interactionLevel} = getState(); + const rack = objects.rack[objects.tile[interactionLevel.tileId].objectId]; + const machineIds = [...rack.machineIds]; + machineIds[machine.position - 1] = machine.id; + dispatch(addPropToStoreObject("rack", rack.id, {machineIds})); + }; +} diff --git a/src/actions/topology/room.js b/src/actions/topology/room.js new file mode 100644 index 00000000..12133330 --- /dev/null +++ b/src/actions/topology/room.js @@ -0,0 +1,73 @@ +import {findTileWithPosition} from "../../util/tile-calculations"; +import {goDownOneInteractionLevel} from "../interaction-level"; +import {addPropToStoreObject, removeIdFromStoreObjectListProp} from "../objects"; + +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 editRoomNameSucceeded(name) { + return (dispatch, getState) => { + const {interactionLevel} = getState(); + dispatch(addPropToStoreObject("room", interactionLevel.roomId, {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 addRackToTileSucceeded(tileId, rackId) { + return dispatch => { + dispatch(addPropToStoreObject("tile", tileId, {objectType: "RACK"})); + dispatch(addPropToStoreObject("tile", tileId, {objectId: rackId})); + }; +} + +export function deleteRoom() { + return { + type: DELETE_ROOM + }; +} + +export function deleteRoomSucceeded() { + return (dispatch, getState) => { + const {currentDatacenterId, interactionLevel} = getState(); + const currentRoomId = interactionLevel.roomId; + dispatch(goDownOneInteractionLevel()); + dispatch(removeIdFromStoreObjectListProp("datacenter", currentDatacenterId, "roomIds", currentRoomId)); + }; +} |
