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); } 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() { this.props.deleteState(this.props.id, this.props.type); } renderDeviceComponent() { console.log(JSON.stringify(this.props.stateOrDevice)); switch ( this.props.tab === "Devices" ? this.props.stateOrDevice.kind : this.props.type ) { case "curtains": return ( ); case "thermostat": return ( ); case "regularLight": return ( ); case "sensor": return ( ); case "motionSensor": return ( ); case "buttonDimmer": return ( ); case "knobDimmer": return ( ); case "smartPlug": return ( ); case "switch": return ( ); case "dimmableLight": return ( ); case "securityCamera": return ( ); default: //throw new Error("Device type unknown"); return undefined; } } render() { { if (this.props.type !== "") { return ( {this.renderDeviceComponent()} {this.props.tab === "Devices" ? (
{this.props.stateOrDevice.name}
{this.props.stateOrDevice.kind === "smartPlug" ? ( ) : null}
) : (
{this.props.stateOrDevice ? this.props.stateOrDevice.name : ""}
)}
); } else { return null; } } } } /* {this.props.stateOrDevice ? : "" } */ const mapStateToProps = (state, ownProps) => ({ get stateOrDevice() { if (state.active.activeTab === "Devices") { return state.devices[ownProps.id]; } else { console.log( state.sceneStates, ownProps.id, state.sceneStates[ownProps.id] ); return state.sceneStates[ownProps.id]; } }, get sceneState() { if (state.active.activeTab === "Scenes") { const array = [ ...state.scenes[state.active.activeScene].sceneStates, ].sort(); const deviceState = array.filter((e) => e.id === ownProps.id)[0]; return deviceState; } else { return null; } }, get type() { 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;