diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-05 09:30:42 +0200 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-23 10:05:57 +0200 |
| commit | 42778e8be409b97059fa519b53c303cdba502e01 (patch) | |
| tree | 23d03a1f8a9f8d137bf723c72086a6d79406874f /src/containers/map/layers/RoomHoverLayer.js | |
| parent | 6f3afd0317a8e549f77ad6764f6dbe4d4953b67c (diff) | |
Implement rack creation
Diffstat (limited to 'src/containers/map/layers/RoomHoverLayer.js')
| -rw-r--r-- | src/containers/map/layers/RoomHoverLayer.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/containers/map/layers/RoomHoverLayer.js b/src/containers/map/layers/RoomHoverLayer.js new file mode 100644 index 00000000..188ee51a --- /dev/null +++ b/src/containers/map/layers/RoomHoverLayer.js @@ -0,0 +1,48 @@ +import {connect} from "react-redux"; +import {toggleTileAtLocation} from "../../../actions/topology"; +import RoomHoverLayerComponent from "../../../components/map/layers/RoomHoverLayerComponent"; +import { + deriveValidNextTilePositions, + findPositionInPositions, + findPositionInRooms +} from "../../../util/tile-calculations"; + +const mapStateToProps = state => { + return { + isEnabled: () => state.construction.currentRoomInConstruction !== -1, + isValid: (x, y) => { + if (state.interactionLevel.mode !== "BUILDING") { + return false; + } + + const newRoom = Object.assign({}, state.objects.room[state.construction.currentRoomInConstruction]); + const oldRooms = Object.keys(state.objects.room) + .map(id => Object.assign({}, state.objects.room[id])) + .filter(room => room.datacenterId === state.currentDatacenterId + && room.id !== state.construction.currentRoomInConstruction); + + [...oldRooms, newRoom].forEach(room => { + room.tiles = room.tileIds.map(tileId => state.objects.tile[tileId]); + }); + if (newRoom.tileIds.length === 0) { + return findPositionInRooms(oldRooms, x, y) === -1; + } + + const validNextPositions = deriveValidNextTilePositions(oldRooms, newRoom.tiles); + return findPositionInPositions(validNextPositions, x, y) !== -1; + }, + }; +}; + +const mapDispatchToProps = dispatch => { + return { + onClick: (x, y) => dispatch(toggleTileAtLocation(x, y)), + }; +}; + +const RoomHoverLayer = connect( + mapStateToProps, + mapDispatchToProps +)(RoomHoverLayerComponent); + +export default RoomHoverLayer; |
