/** * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * VILLASweb is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with VILLASweb. If not, see . ******************************************************************************/ import React, { Component } from 'react'; import TrafficLight from 'react-trafficlight'; import {OverlayTrigger, Tooltip } from 'react-bootstrap'; class WidgetTimeOffset extends Component { constructor(props) { super(props); this.state = { timeOffset: '', icID: '', icName: '', websocketOpen: false }; } static getDerivedStateFromProps(props, state){ if(typeof props.widget.customProperties.icID !== "undefined" && state.icID !== props.widget.customProperties.icID){ return {icID: props.widget.customProperties.icID}; } if (props.data == null || props.data[state.icID] == null || props.data[state.icID].output == null || props.data[state.icID].output.timestamp == null) { return {timeOffset: -1}; } let ic = props.ics.find(ic => ic.id === parseInt(state.icID, 10)); let websocket = props.websockets.find(ws => ws.url === ic.websocketurl); let serverTime = props.data[state.icID].output.timestamp; let localTime = Date.now(); let absoluteOffset = Math.abs(serverTime - localTime); if(typeof websocket === 'undefined'){ return {timeOffset: Number.parseFloat(absoluteOffset/1000).toPrecision(5)} } return {timeOffset: Number.parseFloat(absoluteOffset/1000).toPrecision(5), websocketOpen: websocket.connected, icName: ic.name}; } render() { let icSelected = " "; if(!this.state.websocketOpen){ icSelected = "no connection"; } else if (this.props.widget.customProperties.showOffset){ icSelected = this.state.timeOffset + 's'; } return (
{this.props.widget.customProperties.icID !== -1 ? () : (no IC) } {this.props.widget.customProperties.icID !== -1 && this.props.widget.customProperties.showName ? ({this.state.icName}) : () } {this.props.widget.customProperties.icID !== -1 ? ({this.state.icName}

Offset: {this.state.timeOffset + "s"}
) : (Please select Infrastructure Component)} }>
{this.props.widget.customProperties.icID !== -1 ? ( {icSelected}) : (selected) }
); } } export default WidgetTimeOffset;