import React, { Component } from "react"; import { Checkbox } from "semantic-ui-react"; import { RemoteService } from "../../../remote"; import { connect } from "react-redux"; import "./Thermostat.css"; import { stateTag, container, deviceName, targetTemperature, slider, line, toggle, stateTagContainer, } from "./ThermostatStyle"; //not quite working yet class Thermostats extends Component { constructor(props) { super(props); this.state = { targetTemperature: this.props.device.targetTemperature, internalSensorTemperature: this.props.device.internalSensorTemperature, mode: this.props.device.mode, measuredTemperature: this.props.device.measuredTemperature, useExternalSensors: this.props.device.useExternalSensors, timeout: null, }; this.setMode = this.setMode.bind(this); this.setTargetTemperature = this.setTargetTemperature.bind(this); this.setInternalSensorTemperature = this.setInternalSensorTemperature.bind( this ); } //getters get getMode() { return this.props.device.mode; } get getTargetTemperature() { return this.props.device.targetTemperature; } get getInternalSensorTemperature() { return this.props.device.internalSensorTemperature; } get getMeasuredTemperature() { return this.props.device.measuredTemperature; } get getUseExternalSensors() { return this.props.device.useExternalSensors; } setMode(mode) { if (this.state.timeout) { clearTimeout(this.state.timeout); } console.log(mode); //i came to the conclusion that is not possible to set mode. //this.mode = "HEATING"; const turnOn = mode; if(this.props.tab==="Devices"){ this.props .saveDevice({ ...this.props.device, turnOn }) .catch((err) => console.error("thermostat update error", err)); }else{ this.props.updateState({ id: this.props.sceneState.id, turnOn: turnOn },this.props.type); } } onClickDevice = () => { const on = !this.turnedOn; if(this.props.tab==="Devices"){ this.props .saveDevice({ ...this.props.device, on }) .catch((err) => console.error("thermostat update error", err)); }else{ this.props.updateState({ id: this.props.sceneState.id, on: on },this.props.type); } }; //It seems to work saveTargetTemperature(targetTemperature) { if(this.props.tab==="Devices"){ this.props .saveDevice({ ...this.props.device, targetTemperature }) .catch((err) => console.error("thermostat update error", err)); }else{ this.props.updateState({id: this.props.sceneState.id, targetTemperature: targetTemperature},this.props.type); } } setTargetTemperature(newTemp) { if (this.state.timeout) { clearTimeout(this.state.timeout); } this.setState({ newTemp, timeout: setTimeout(() => { this.saveTargetTemperature(newTemp); this.setState({ targetTemperature: this.state.targetTemperature, timeout: null, }); }, 100), }); } //I have no idea why it doesn't want to update the temperature saveInternalSensorTemperature(internalSensorTemperature) { if(this.props.tab==="Devices"){ this.props .saveDevice({ ...this.props.device, internalSensorTemperature }) .catch((err) => console.error("thermostat update error", err)); }else{ this.props.updateState({ id: this.props.sceneState.id, internalSensorTemperature:internalSensorTemperature },this.props.type); } } setInternalSensorTemperature(newTemp) { if (this.state.timeout) { clearTimeout(this.state.timeout); } this.setState({ newTemp, timeout: setTimeout(() => { this.saveInternalSensorTemperature(newTemp); this.setState({ internalSensorTemperature: this.state.internalSensorTemperature, timeout: null, }); }, 100), }); } helperMode = () => { //this.setMode("HEATING"); this.setTargetTemperature(20); //this.setInternalSensorTemperature(42); }; handleChange = (value) => { this.setTargetTemperature(value); }; render() { return (

{this.props.device.name}

this.setMode(val.checked)} /> {this.props.device.targetTemperature}ÂșC this.handleChange(event.target.value)} id="targetTemperature" />
{this.props.device.mode}
); } } const mapStateToProps = (state, ownProps) => ({ device: state.devices[ownProps.id], }); const ThermostatContainer = connect( mapStateToProps, RemoteService )(Thermostats); export default ThermostatContainer;