From bf7708f658cc6299a3b775afe24459b5a808c54d Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Fri, 22 Sep 2017 21:20:54 +0200 Subject: Restructure component and container directories --- src/components/app/map/groups/DatacenterGroup.js | 42 +++++++++++++++++++++ src/components/app/map/groups/GridGroup.js | 30 +++++++++++++++ src/components/app/map/groups/RackGroup.js | 34 +++++++++++++++++ src/components/app/map/groups/RoomGroup.js | 48 ++++++++++++++++++++++++ src/components/app/map/groups/TileGroup.js | 42 +++++++++++++++++++++ src/components/app/map/groups/WallGroup.js | 22 +++++++++++ 6 files changed, 218 insertions(+) create mode 100644 src/components/app/map/groups/DatacenterGroup.js create mode 100644 src/components/app/map/groups/GridGroup.js create mode 100644 src/components/app/map/groups/RackGroup.js create mode 100644 src/components/app/map/groups/RoomGroup.js create mode 100644 src/components/app/map/groups/TileGroup.js create mode 100644 src/components/app/map/groups/WallGroup.js (limited to 'src/components/app/map/groups') diff --git a/src/components/app/map/groups/DatacenterGroup.js b/src/components/app/map/groups/DatacenterGroup.js new file mode 100644 index 00000000..1c978360 --- /dev/null +++ b/src/components/app/map/groups/DatacenterGroup.js @@ -0,0 +1,42 @@ +import React from "react"; +import {Group} from "react-konva"; +import GrayContainer from "../../../../containers/app/map/GrayContainer"; +import RoomContainer from "../../../../containers/app/map/RoomContainer"; +import Shapes from "../../../../shapes/index"; + +const DatacenterGroup = ({datacenter, interactionLevel}) => { + if (!datacenter) { + return ; + } + + if (interactionLevel.mode === "BUILDING") { + return ( + + {datacenter.roomIds.map(roomId => ( + + ))} + + ); + } + + return ( + + {datacenter.roomIds + .filter(roomId => roomId !== interactionLevel.roomId) + .map(roomId => ) + } + {interactionLevel.mode === "ROOM" ? : null} + {datacenter.roomIds + .filter(roomId => roomId === interactionLevel.roomId) + .map(roomId => ) + } + + ); +}; + +DatacenterGroup.propTypes = { + datacenter: Shapes.Datacenter, + interactionLevel: Shapes.InteractionLevel, +}; + +export default DatacenterGroup; diff --git a/src/components/app/map/groups/GridGroup.js b/src/components/app/map/groups/GridGroup.js new file mode 100644 index 00000000..b3c6e1d5 --- /dev/null +++ b/src/components/app/map/groups/GridGroup.js @@ -0,0 +1,30 @@ +import React from "react"; +import {Group, Line} from "react-konva"; +import {GRID_COLOR} from "../../../../util/colors"; +import {GRID_LINE_WIDTH_IN_PIXELS, MAP_SIZE, MAP_SIZE_IN_PIXELS, TILE_SIZE_IN_PIXELS} from "../MapConstants"; + +const MAP_COORDINATE_ENTRIES = Array.from(new Array(MAP_SIZE), (x, i) => i); +const HORIZONTAL_POINT_PAIRS = MAP_COORDINATE_ENTRIES.map(index => [ + 0, index * TILE_SIZE_IN_PIXELS, + MAP_SIZE_IN_PIXELS, index * TILE_SIZE_IN_PIXELS +]); +const VERTICAL_POINT_PAIRS = MAP_COORDINATE_ENTRIES.map(index => [ + index * TILE_SIZE_IN_PIXELS, 0, + index * TILE_SIZE_IN_PIXELS, MAP_SIZE_IN_PIXELS +]); + +const GridGroup = () => ( + + {HORIZONTAL_POINT_PAIRS.concat(VERTICAL_POINT_PAIRS).map((points, index) => ( + + ))} + +); + +export default GridGroup; diff --git a/src/components/app/map/groups/RackGroup.js b/src/components/app/map/groups/RackGroup.js new file mode 100644 index 00000000..233d0c20 --- /dev/null +++ b/src/components/app/map/groups/RackGroup.js @@ -0,0 +1,34 @@ +import React from "react"; +import {Group} from "react-konva"; +import RackEnergyFillContainer from "../../../../containers/app/map/RackEnergyFillContainer"; +import RackSpaceFillContainer from "../../../../containers/app/map/RackSpaceFillContainer"; +import Shapes from "../../../../shapes/index"; +import {RACK_BACKGROUND_COLOR} from "../../../../util/colors"; +import {convertLoadToSimulationColor} from "../../../../util/simulation-load"; +import TileObject from "../elements/TileObject"; + +const RackGroup = ({tile, inSimulation, rackLoad}) => { + let color = RACK_BACKGROUND_COLOR; + if (inSimulation && rackLoad) { + color = convertLoadToSimulationColor(rackLoad); + } + + return ( + + + {inSimulation ? + undefined : + + + + + } + + ); +}; + +RackGroup.propTypes = { + tile: Shapes.Tile, +}; + +export default RackGroup; diff --git a/src/components/app/map/groups/RoomGroup.js b/src/components/app/map/groups/RoomGroup.js new file mode 100644 index 00000000..18a6bd84 --- /dev/null +++ b/src/components/app/map/groups/RoomGroup.js @@ -0,0 +1,48 @@ +import React from "react"; +import {Group} from "react-konva"; +import GrayContainer from "../../../../containers/app/map/GrayContainer"; +import TileContainer from "../../../../containers/app/map/TileContainer"; +import WallContainer from "../../../../containers/app/map/WallContainer"; +import Shapes from "../../../../shapes/index"; + +const RoomGroup = ({room, interactionLevel, currentRoomInConstruction, onClick}) => { + if (currentRoomInConstruction === room.id) { + return ( + + {room.tileIds.map(tileId => ( + + ))} + + ); + } + + return ( + + {(() => { + if ((interactionLevel.mode === "RACK" || interactionLevel.mode === "MACHINE") + && interactionLevel.roomId === room.id) { + return [ + room.tileIds + .filter(tileId => tileId !== interactionLevel.tileId) + .map(tileId => ), + , + room.tileIds + .filter(tileId => tileId === interactionLevel.tileId) + .map(tileId => ) + ]; + } else { + return room.tileIds.map(tileId => ( + + )); + } + })()} + + + ); +}; + +RoomGroup.propTypes = { + room: Shapes.Room, +}; + +export default RoomGroup; diff --git a/src/components/app/map/groups/TileGroup.js b/src/components/app/map/groups/TileGroup.js new file mode 100644 index 00000000..c41e78a4 --- /dev/null +++ b/src/components/app/map/groups/TileGroup.js @@ -0,0 +1,42 @@ +import PropTypes from "prop-types"; +import React from "react"; +import {Group} from "react-konva"; +import RackContainer from "../../../../containers/app/map/RackContainer"; +import Shapes from "../../../../shapes/index"; +import {ROOM_DEFAULT_COLOR, ROOM_IN_CONSTRUCTION_COLOR} from "../../../../util/colors"; +import {convertLoadToSimulationColor} from "../../../../util/simulation-load"; +import RoomTile from "../elements/RoomTile"; + +const TileGroup = ({tile, newTile, inSimulation, roomLoad, onClick}) => { + let tileObject; + switch (tile.objectType) { + case "RACK": + tileObject = ; + break; + default: + tileObject = null; + } + + let color = ROOM_DEFAULT_COLOR; + if (newTile) { + color = ROOM_IN_CONSTRUCTION_COLOR; + } else if (inSimulation && roomLoad) { + color = convertLoadToSimulationColor(roomLoad); + } + + return ( + onClick(tile)} + > + + {tileObject} + + ); +}; + +TileGroup.propTypes = { + tile: Shapes.Tile, + newTile: PropTypes.bool, +}; + +export default TileGroup; diff --git a/src/components/app/map/groups/WallGroup.js b/src/components/app/map/groups/WallGroup.js new file mode 100644 index 00000000..6de22523 --- /dev/null +++ b/src/components/app/map/groups/WallGroup.js @@ -0,0 +1,22 @@ +import PropTypes from "prop-types"; +import React from "react"; +import {Group} from "react-konva"; +import Shapes from "../../../../shapes/index"; +import {deriveWallLocations} from "../../../../util/tile-calculations"; +import WallSegment from "../elements/WallSegment"; + +const WallGroup = ({tiles}) => { + return ( + + {deriveWallLocations(tiles).map((wallSegment, index) => ( + + ))} + + ); +}; + +WallGroup.propTypes = { + tiles: PropTypes.arrayOf(Shapes.Tile).isRequired, +}; + +export default WallGroup; -- cgit v1.2.3