import React from "react"; import Light from "./Light"; import SmartPlug from "./SmartPlug"; import Sensor from "./Sensor"; import { ButtonDimmer, KnobDimmer } from "./Dimmer"; import Switcher from "./Switch"; import Videocam from "./Videocam"; import Curtains from "./Curtain"; import Thermostat from "./Thermostats"; import { Segment, Grid, Header, Button, Icon } from "semantic-ui-react"; import { RemoteService } from "../../../remote"; import { connect } from "react-redux"; import DeviceSettingsModal from "./DeviceSettingsModal"; class Device extends React.Component { constructor(props) { super(props); this.modalRef = React.createRef(); this.edit = this.edit.bind(this); this.resetSmartPlug = this.resetSmartPlug.bind(this); this.deleteState = this.deleteState.bind(this); } edit() { console.log("editing device with id=" + this.props.id); this.modalRef.current.openModal(); } resetSmartPlug() { this.props .smartPlugReset(this.props.id) .catch((err) => console.error(`Smart plug reset error`, err)); } deleteState() { //console.log("alpaca "+this.props); this.props.deleteState(this.props.id, this.props.type); } renderDeviceComponent() { switch ( this.props.tab === "Devices" ? this.props.stateOrDevice.kind : this.props.type ) { case "curtains": return ( <Curtains tab={this.props.tab} sceneState={this.props.sceneState} id={this.props.id} /> ); case "thermostat": return ( <Thermostat tab={this.props.tab} sceneState={this.props.sceneStat} id={this.props.stateOrDevice.id} /> ); case "regularLight": return ( <Light tab={this.props.tab} sceneState={this.props.sceneState} id={this.props.stateOrDevice.id} /> ); case "sensor": return ( <Sensor tab={this.props.tab} sceneState={this.props.sceneState} id={this.props.stateOrDevice.id} /> ); case "motionSensor": return <Sensor tab={this.props.tab} id={this.props.stateOrDevice.id} />; case "buttonDimmer": return ( <ButtonDimmer tab={this.props.tab} id={this.props.stateOrDevice.id} /> ); case "knobDimmer": return ( <KnobDimmer tab={this.props.tab} id={this.props.stateOrDevice.id} /> ); case "smartPlug": return ( <SmartPlug tab={this.props.tab} id={this.props.stateOrDevice.id} /> ); case "switch": return ( <Switcher tab={this.props.tab} id={this.props.stateOrDevice.id} /> ); case "dimmableLight": return <Light id={this.props.stateOrDevice.id} tab={this.props.tab} />; case "securityCamera": return ( <Videocam id={this.props.stateOrDevice.id} tab={this.props.tab} /> ); default: //throw new Error("Device type unknown"); return undefined; } } render() { { if (this.props.type !== "") { return ( <Segment> <Grid columns={2}> <Grid.Column>{this.renderDeviceComponent()}</Grid.Column> {this.props.tab === "Devices" ? ( <Grid.Column textAlign="center"> <Header as="h3">{this.props.stateOrDevice.name}</Header> <Button color="blue" icon onClick={this.edit} labelPosition="left" > <Icon name="pencil" /> Edit </Button> {this.props.stateOrDevice.kind === "smartPlug" ? ( <Button color="orange" icon onClick={this.resetSmartPlug} labelPosition="left" > <Icon name="undo" /> Reset </Button> ) : null} </Grid.Column> ) : ( <Grid.Column textAlign="center"> <Header as="h3">{this.props.device.name}</Header> {this.props.tab === "Scenes" ? ( <Header as="h4">{this.props.roomName}</Header> ) : ( "" )} <Button color="red" icon onClick={this.deleteState} labelPosition="left" > <Icon name="undo" /> Delete </Button> </Grid.Column> )} </Grid> {this.props.stateOrDevice && this.props.tab === "Devices" ? ( <DeviceSettingsModal ref={this.modalRef} id={this.props.stateOrDevice.id} /> ) : ( "" )} </Segment> ); } else { return null; } } } } const mapStateToProps = (state, ownProps) => ({ get stateOrDevice() { if (state.active.activeTab === "Devices") { return state.devices[ownProps.id]; } else { return state.sceneStates[ownProps.id]; } }, get device() { if (state.active.activeTab === "Devices") { return state.devices[ownProps.id]; } else { return state.devices[state.sceneStates[ownProps.id].deviceId]; } }, get roomName() { if (state.active.activeTab === "Scenes") { const device = state.devices[state.sceneStates[ownProps.id].deviceId]; return state.rooms[device.roomId].name; } else { return ""; } }, get type() { console.log("ALPACA", state, ownProps); if (state.active.activeTab === "Scenes") { if (state.sceneStates[ownProps.id]) { //console.log(state.sceneStates[ownProps.id], ownProps.id); const id = state.sceneStates[ownProps.id].deviceId; //console.log(id, state.devices[id].kind); return state.devices[id].kind; } else { return ""; } } else { return null; } }, }); const DeviceContainer = connect(mapStateToProps, RemoteService)(Device); export default DeviceContainer;