From c9e70ec95f733caa253b362e154b47cd5a26cbfe Mon Sep 17 00:00:00 2001 From: Georgios Andreadis Date: Fri, 8 Sep 2017 20:16:55 +0200 Subject: Display rack space and energy fill on overlay --- src/components/map/MapConstants.js | 3 ++ src/components/map/elements/ImageComponent.js | 39 ++++++++++++++++ src/components/map/elements/RackFillBar.js | 67 +++++++++++++++++++++++++++ src/components/map/groups/RackGroup.js | 4 ++ 4 files changed, 113 insertions(+) create mode 100644 src/components/map/elements/ImageComponent.js create mode 100644 src/components/map/elements/RackFillBar.js (limited to 'src/components/map') diff --git a/src/components/map/MapConstants.js b/src/components/map/MapConstants.js index d700ee49..f6f47564 100644 --- a/src/components/map/MapConstants.js +++ b/src/components/map/MapConstants.js @@ -11,4 +11,7 @@ export const WALL_WIDTH_IN_PIXELS = TILE_SIZE_IN_PIXELS / 8; export const OBJECT_BORDER_WIDTH_IN_PIXELS = TILE_SIZE_IN_PIXELS / 12; export const TILE_PLUS_WIDTH_IN_PIXELS = TILE_SIZE_IN_PIXELS / 10; +export const RACK_FILL_ICON_WIDTH = OBJECT_SIZE_IN_PIXELS / 3; +export const RACK_FILL_ICON_OPACITY = 0.8; + export const MAP_MOVE_PIXELS_PER_EVENT = 20; diff --git a/src/components/map/elements/ImageComponent.js b/src/components/map/elements/ImageComponent.js new file mode 100644 index 00000000..00766496 --- /dev/null +++ b/src/components/map/elements/ImageComponent.js @@ -0,0 +1,39 @@ +import PropTypes from "prop-types"; +import React from "react"; +import {Image} from "react-konva"; + +class ImageComponent extends React.Component { + static propTypes = { + src: PropTypes.string.isRequired, + x: PropTypes.number.isRequired, + y: PropTypes.number.isRequired, + width: PropTypes.number.isRequired, + height: PropTypes.number.isRequired, + opacity: PropTypes.number.isRequired, + }; + + state = { + image: null + }; + + componentDidMount() { + const image = new window.Image(); + image.src = this.props.src; + image.onload = () => this.setState({image}); + } + + render() { + return ( + + ) + } +} + +export default ImageComponent; diff --git a/src/components/map/elements/RackFillBar.js b/src/components/map/elements/RackFillBar.js new file mode 100644 index 00000000..7b1351a5 --- /dev/null +++ b/src/components/map/elements/RackFillBar.js @@ -0,0 +1,67 @@ +import PropTypes from "prop-types"; +import React from "react"; +import {Group, Rect} from "react-konva"; +import { + RACK_ENERGY_BAR_BACKGROUND_COLOR, + RACK_ENERGY_BAR_FILL_COLOR, + RACK_SPACE_BAR_BACKGROUND_COLOR, + RACK_SPACE_BAR_FILL_COLOR +} from "../../../colors/index"; +import { + OBJECT_BORDER_WIDTH_IN_PIXELS, + OBJECT_MARGIN_IN_PIXELS, + RACK_FILL_ICON_OPACITY, + RACK_FILL_ICON_WIDTH, + TILE_SIZE_IN_PIXELS +} from "../MapConstants"; +import ImageComponent from "./ImageComponent"; + +const RackFillBar = ({positionX, positionY, type, fillFraction}) => { + const halfOfObjectBorderWidth = OBJECT_BORDER_WIDTH_IN_PIXELS / 2; + const x = positionX * TILE_SIZE_IN_PIXELS + OBJECT_MARGIN_IN_PIXELS + + (type === "space" ? halfOfObjectBorderWidth : + 0.5 * (TILE_SIZE_IN_PIXELS - 2 * OBJECT_MARGIN_IN_PIXELS)); + const startY = positionY * TILE_SIZE_IN_PIXELS + OBJECT_MARGIN_IN_PIXELS + halfOfObjectBorderWidth; + const width = 0.5 * (TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS * 2) - halfOfObjectBorderWidth; + const fullHeight = TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS * 2 - OBJECT_BORDER_WIDTH_IN_PIXELS; + + const fractionHeight = fillFraction * fullHeight; + const fractionY = (positionY + 1) * TILE_SIZE_IN_PIXELS - OBJECT_MARGIN_IN_PIXELS - halfOfObjectBorderWidth + - fractionHeight; + + return ( + + + + + + ); +}; + +RackFillBar.propTypes = { + positionX: PropTypes.number.isRequired, + positionY: PropTypes.number.isRequired, + type: PropTypes.string.isRequired, + fillFraction: PropTypes.number.isRequired, +}; + +export default RackFillBar; diff --git a/src/components/map/groups/RackGroup.js b/src/components/map/groups/RackGroup.js index 9583b234..5dd470de 100644 --- a/src/components/map/groups/RackGroup.js +++ b/src/components/map/groups/RackGroup.js @@ -1,12 +1,16 @@ import React from "react"; import {Group} from "react-konva"; import {RACK_BACKGROUND_COLOR} from "../../../colors/index"; +import RackEnergyFillContainer from "../../../containers/map/RackEnergyFillContainer"; +import RackSpaceFillContainer from "../../../containers/map/RackSpaceFillContainer"; import Shapes from "../../../shapes/index"; import TileObject from "../elements/TileObject"; const RackGroup = ({tile}) => ( + + ); -- cgit v1.2.3