diff --git a/src/containers/BuildingArea/BuildingAreaTable.js b/src/containers/BuildingArea/BuildingAreaTable.js index 909c814e59bca6684796f96d030c31c63004ce7d..4f6613c4226a93b662bc5ad034f36af48eda24ab 100644 --- a/src/containers/BuildingArea/BuildingAreaTable.js +++ b/src/containers/BuildingArea/BuildingAreaTable.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; +import { Container, Row, Col, ListGroup, ListGroupItem } from 'reactstrap'; import { loadApartments, loadCommonAreas, loadServiceAreas } from './actions'; @@ -16,15 +17,23 @@ class BuildingAreaTable extends Component { renderHeading = (heading) => { return ( -
-
+ +

{heading}


-
-
+ + ); } + renderSpaces = (spaces) => { + return spaces.map(spc => ( + + {spc.description} node on floor {spc.floor} + + )); + } + renderApartments = () => { return this.props.buildingArea.apartments.map(apt => { return ( @@ -36,36 +45,50 @@ class BuildingAreaTable extends Component {

Apartment {apt.number}

-
-
-

Node

-
-
+ + {this.renderSpaces(apt.spaces)} + ); }); } + renderArea = (incArea) => { + return incArea.map(area => { + return ( + + {this.renderSpaces(area.spaces)} + + ); + }); + } + render() { return ( -
- {this.renderHeading('Apartments')} + -
-
    - {this.renderApartments()} -
-
+ {this.renderHeading('Apartments')} + + {this.renderApartments()} + {this.renderHeading('Common Area')} + + {this.renderArea(this.props.buildingArea.commonAreas)} + {this.renderHeading('Service Area')} -
+ + {this.renderArea(this.props.buildingArea.serviceAreas)} + + + ); } } BuildingAreaTable.propTypes = { + buildingId: PropTypes.string, loadApartments: PropTypes.func, loadCommonAreas: PropTypes.func, loadServiceAreas: PropTypes.func, diff --git a/src/containers/Sensors/SensorGraph.js b/src/containers/Sensors/SensorGraph.js index 659acee18550cc8d4618a7aff4f2c3960796e099..467db2c68d097cd22052cad8ccb554a9c61b9d23 100644 --- a/src/containers/Sensors/SensorGraph.js +++ b/src/containers/Sensors/SensorGraph.js @@ -84,18 +84,84 @@ class Sensors extends Component { }); } + findNodeInArea = (incArea, node) => { + let spaceInArea = null; + let spaceArea = null; + + // find space in area + incArea.every(area => { + + spaceInArea = area.spaces.reduce((acc, spc) => { + if (spc.id === node.space_id) { + return spc; + } + return acc; + }, {}); + + if (Object.keys(spaceInArea).length !== 0) { + spaceArea = area; + return false; + } + + return true; + }); + + return { spaceArea, spaceInArea }; + } + + findNodeLocation = (sensorNode) => { + const { buildingArea } = this.props; + let spaceOfNode = null; + let nodeName = ''; + + if (!buildingArea.apartmentsLoading) { + const temp = this.findNodeInArea(this.props.buildingArea.apartments, sensorNode); + + if (temp.spaceArea) { + spaceOfNode = temp; + nodeName = `Apt ${spaceOfNode.spaceArea.number} ${spaceOfNode.spaceInArea.description}`; + } + } + + if (!buildingArea.commonAreasLoading) { + const temp = this.findNodeInArea(this.props.buildingArea.commonAreas, sensorNode); + + if (temp.spaceArea) { + spaceOfNode = temp; + nodeName = `Common area ${spaceOfNode.spaceInArea.description}`; + } + } + + if (!buildingArea.serviceAreasLoading) { + const temp = this.findNodeInArea(this.props.buildingArea.serviceAreas, sensorNode); + + if (temp.spaceArea) { + spaceOfNode = temp; + nodeName = `Service area ${spaceOfNode.spaceInArea.description}`; + } + } + + return { spaceOfNode, nodeName }; + } + generateTimeSeries = (sensorNode) => { + let nodeName = `node ${sensorNode.id} `; + let spaceOfNode = null; + + // Get all points const points = sensorNode.data.reduce((acc, i) => { if (i.name === 'Temperature') { acc.push([new Date(i.ts), i.value]); } - return acc; }, []); + spaceOfNode = this.findNodeLocation(sensorNode); + nodeName = spaceOfNode.nodeName ? spaceOfNode.nodeName : nodeName; + return new TimeSeries({ - name: `node ${sensorNode.id}`, - columns: ['time', `node ${sensorNode.id}`], + name: nodeName, + columns: ['time', nodeName], points, }); } @@ -167,15 +233,14 @@ class Sensors extends Component {
- {this.state.showChart ? + {this.state.showChart && ({ key: i.name(), label: i.name() }))} style={styler(Object.keys(this.state.lineStyles).map(key => ( this.state.lineStyles[key])) )} type="line" - /> : - null + /> }
@@ -221,6 +286,7 @@ Sensors.propTypes = { className: PropTypes.string, loadAllNodeData: PropTypes.func, sensors: PropTypes.object, // eslint-disable-line + buildingArea: PropTypes.object, // eslint-disable-line }; Sensors.defaultProps = { @@ -230,6 +296,7 @@ Sensors.defaultProps = { const mapStateToProps = state => ( { sensors: state.sensors, + buildingArea: state.buildingArea, } ); diff --git a/src/containers/Sensors/Sensors.js b/src/containers/Sensors/Sensors.js index 00e470f8ca8f07b1d956715306a3f74c469f013b..bd8b6e1e8e12b00ba53612534b3f9fa998da7d46 100644 --- a/src/containers/Sensors/Sensors.js +++ b/src/containers/Sensors/Sensors.js @@ -29,7 +29,9 @@ class Sensors extends Component { className="mt-2" buildingId={this.props.buildingId} /> - +
); }