/** * Users can add lights in their rooms. * Lights are devices like bulbs, LED strip lights, lamps. * Lights may support an intensity level (from 0% to 100%). * Lights have an internal state that can be changed and it must * be shown accordingly in the SmartHut views (house view and room views). */ import React, {Component} from "react"; import {iconStyle, StyledDiv} from "./styleComponents"; import Settings from "./DeviceSettings"; import {Image} from "semantic-ui-react"; import {CircularInput, CircularProgress, CircularThumb, CircularTrack} from "react-circular-input"; import {valueStyle, intensityLightStyle, style, nameStyle} from "./LightStyle"; export default class Light extends Component { constructor(props) { super(props); this.state = { turnedOn: false, hasIntensity: false }; this.iconOn = "/img/lightOn.svg"; this.iconOff = "/img/lightOff.svg" } onClickDevice = () => { this.setState((prevState) => ({turnedOn: !prevState.turnedOn})); }; setIntensity = (newValue) => { this.setState({intensityLevel: newValue}); }; getIcon = () => { if (this.state.turnedOn) { return this.iconOn; } return this.iconOff; }; componentDidMount() { if (this.props.device.hasOwnProperty("hasIntensity") && this.props.device.hasOwnProperty("intensityLevel")) { this.setState({ hasIntensity: this.props.device.hasIntensity, intensityLevel: this.props.device.intensityLevel }); } // Get the state and update it } render() { const intensityLightView = ( {Math.round(this.state.intensityLevel * 100)}% {this.props.device.name} ); const normalLightView = (
{ } : this.onClickDevice}>
{this.props.device.name}
); return ( this.props.onChangeData(id, newSettings)}/> {this.state.hasIntensity ? (intensityLightView) : (normalLightView)} ) } }