frontend/smart-hut/src/components/dashboard/ScenesPanel.js
2020-05-03 17:18:34 +02:00

83 lines
2.3 KiB
JavaScript

import React, { Component } from "react";
import { connect } from "react-redux";
import { RemoteService } from "../../remote";
import Device from "./devices/Device";
import NewSceneDevice from "./NewSceneDevice";
import { Button, Card, Segment, Header, Icon } from "semantic-ui-react";
class ScenesPanel extends Component {
constructor(props) {
super(props);
this.applyScene = this.applyScene.bind(this);
}
applyScene() {
this.props
.sceneApply(this.props.activeScene)
.then(() => {
alert("Scene applied.");
})
.catch(console.error);
}
render() {
return (
<Card.Group centered style={{ paddingTop: "3rem" }}>
{!this.props.isActiveDefaultScene ? (
<Card style={{ height: "27em" }}>
<Card.Content>
<Card.Header textAlign="center">
<Header as="h3">Add devices - Apply Scene</Header>
</Card.Header>
<Segment basic style={{ width: "100%", height: "100%" }}>
<NewSceneDevice />
</Segment>
</Card.Content>
<Card.Content extra>
<div className="ui two buttons">
<Button color="blue" onClick={this.applyScene}>
Apply Scene
</Button>
</div>
</Card.Content>
</Card>
) : (
<Segment placeholder>
<Header icon>
<Icon name="folder open" />
Please select a scene on the left or add a new one.
</Header>
</Segment>
)}
{!this.props.isActiveDefaultScene
? this.props.sceneStates.map((e, i) => {
return <Device key={i} tab={this.props.tab} id={e.id} />;
})
: null}
</Card.Group>
);
}
}
const mapStateToProps = (state, _) => ({
get sceneStates() {
if (state.active.activeScene !== -1) {
const stateArray = [
...state.scenes[state.active.activeScene].sceneStates,
].sort();
return stateArray.map((id) => state.sceneStates[id]);
} else {
return [];
}
},
get isActiveDefaultScene() {
return state.active.activeScene === -1;
},
activeScene: state.active.activeScene,
});
const ScenesPanelContainer = connect(
mapStateToProps,
RemoteService
)(ScenesPanel);
export default ScenesPanelContainer;