2020-03-23 20:24:17 +00:00
|
|
|
import React, { Component, useState } from "react";
|
2020-04-21 14:18:05 +00:00
|
|
|
import { Button, Form, Icon, Header, Modal, Input } from "semantic-ui-react";
|
2020-04-10 15:25:52 +00:00
|
|
|
import { connect } from "react-redux";
|
|
|
|
import { RemoteService } from "../../../remote";
|
2020-03-20 17:42:38 +00:00
|
|
|
|
|
|
|
const DeleteModal = (props) => (
|
2020-04-17 12:25:22 +00:00
|
|
|
<Modal
|
|
|
|
trigger={
|
|
|
|
<Button icon labelPosition="left" inverted color="red">
|
|
|
|
<Icon name="trash alternate" />
|
|
|
|
Delete device
|
|
|
|
</Button>
|
|
|
|
}
|
|
|
|
closeIcon
|
|
|
|
>
|
2020-03-23 20:24:17 +00:00
|
|
|
<Header icon="archive" content="Are you sure ?" />
|
2020-03-20 17:42:38 +00:00
|
|
|
<Modal.Actions>
|
2020-04-17 12:15:22 +00:00
|
|
|
<Button color="red">
|
2020-03-23 20:24:17 +00:00
|
|
|
<Icon name="remove" /> No
|
2020-03-20 17:42:38 +00:00
|
|
|
</Button>
|
2020-03-23 20:24:17 +00:00
|
|
|
<Button onClick={() => props.removeDevice()} color="green">
|
|
|
|
<Icon name="checkmark" /> Yes
|
2020-03-20 17:42:38 +00:00
|
|
|
</Button>
|
|
|
|
</Modal.Actions>
|
|
|
|
</Modal>
|
2020-03-23 20:24:17 +00:00
|
|
|
);
|
2020-03-17 22:24:40 +00:00
|
|
|
|
|
|
|
const SettingsForm = (props) => {
|
2020-04-21 10:13:01 +00:00
|
|
|
const [values, setValues] = useState({ name: "" });
|
|
|
|
|
2020-03-23 20:24:17 +00:00
|
|
|
const handleInputChange = (e) => {
|
2020-04-21 10:13:01 +00:00
|
|
|
const { name, value } = e.target.value;
|
2020-03-23 20:24:17 +00:00
|
|
|
setValues({ ...values, [name]: value });
|
2020-04-21 10:13:01 +00:00
|
|
|
console.log("EDDDDITING!!", e.target.value);
|
|
|
|
console.log(props);
|
2020-03-17 22:24:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Form>
|
|
|
|
<Form.Field>
|
2020-04-21 10:13:01 +00:00
|
|
|
<label>Edit Name:</label>
|
|
|
|
<input
|
2020-03-23 20:24:17 +00:00
|
|
|
autoComplete="off"
|
|
|
|
name="name"
|
|
|
|
onChange={handleInputChange}
|
2020-04-21 10:13:01 +00:00
|
|
|
value={props.name}
|
|
|
|
autoFocus="on"
|
|
|
|
placeholder="Device name"
|
2020-03-23 20:24:17 +00:00
|
|
|
/>
|
2020-03-17 22:24:40 +00:00
|
|
|
</Form.Field>
|
2020-04-17 12:15:22 +00:00
|
|
|
|
2020-03-20 17:42:38 +00:00
|
|
|
<Form.Field>
|
|
|
|
<DeleteModal removeDevice={() => props.removeDevice(values)} />
|
|
|
|
</Form.Field>
|
2020-04-17 12:15:22 +00:00
|
|
|
<Button
|
|
|
|
onClick={() => props.saveFunction(values)}
|
2020-04-17 12:25:22 +00:00
|
|
|
color="green"
|
2020-04-17 12:15:22 +00:00
|
|
|
type="submit"
|
|
|
|
>
|
2020-04-17 12:25:22 +00:00
|
|
|
<Icon name="checkmark" />
|
|
|
|
Save changes
|
2020-04-17 12:15:22 +00:00
|
|
|
</Button>
|
2020-03-17 22:24:40 +00:00
|
|
|
</Form>
|
2020-03-23 20:24:17 +00:00
|
|
|
);
|
|
|
|
};
|
2020-03-17 22:24:40 +00:00
|
|
|
|
2020-04-10 15:25:52 +00:00
|
|
|
class DeviceSettingsModal extends Component {
|
2020-03-17 22:24:40 +00:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
this.state = {
|
2020-04-10 15:25:52 +00:00
|
|
|
open: false,
|
2020-03-17 22:24:40 +00:00
|
|
|
};
|
2020-04-10 15:25:52 +00:00
|
|
|
|
|
|
|
this.updateDevice = this.updateDevice.bind(this);
|
|
|
|
this.deleteDevice = this.deleteDevice.bind(this);
|
2020-03-17 22:24:40 +00:00
|
|
|
}
|
|
|
|
|
2020-04-16 16:20:22 +00:00
|
|
|
closeModal = (e) => {
|
|
|
|
this.setState({ openModal: false });
|
|
|
|
};
|
|
|
|
|
|
|
|
openModal = (e) => {
|
|
|
|
this.setState({ openModal: true });
|
|
|
|
};
|
2020-03-17 22:24:40 +00:00
|
|
|
|
2020-04-10 15:25:52 +00:00
|
|
|
updateDevice(values) {
|
|
|
|
if (values.name.length === 0) return;
|
|
|
|
this.props
|
|
|
|
.saveDevice({ ...this.props.device, name: values.name })
|
2020-04-21 14:18:05 +00:00
|
|
|
.then(() => this.setState({ openModal: false }))
|
2020-04-10 15:25:52 +00:00
|
|
|
.catch((err) =>
|
|
|
|
console.error(
|
|
|
|
`settings modal for device ${this.props.id} deletion error`,
|
|
|
|
err
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
2020-03-17 22:24:40 +00:00
|
|
|
|
2020-04-10 15:25:52 +00:00
|
|
|
deleteDevice() {
|
|
|
|
this.props
|
|
|
|
.deleteDevice(this.props.device)
|
2020-04-11 16:29:32 +00:00
|
|
|
.then(() => this.setState({ open: false }))
|
2020-04-10 15:25:52 +00:00
|
|
|
.catch((err) =>
|
|
|
|
console.error(
|
|
|
|
`settings modal for device ${this.props.id} deletion error`,
|
|
|
|
err
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
2020-03-17 22:24:40 +00:00
|
|
|
|
|
|
|
render() {
|
|
|
|
const SettingsModal = () => (
|
2020-04-16 16:20:22 +00:00
|
|
|
<Modal closeIcon onClose={this.closeModal} open={this.state.openModal}>
|
2020-03-17 22:24:40 +00:00
|
|
|
<Modal.Header>Settings of {this.props.device.name}</Modal.Header>
|
|
|
|
<Modal.Content>
|
2020-03-23 20:24:17 +00:00
|
|
|
<SettingsForm
|
2020-04-18 14:26:12 +00:00
|
|
|
name={this.props.device.name}
|
2020-03-23 20:24:17 +00:00
|
|
|
type={this.props.device.type}
|
2020-04-10 15:25:52 +00:00
|
|
|
removeDevice={this.deleteDevice}
|
|
|
|
saveFunction={this.updateDevice}
|
2020-03-23 20:24:17 +00:00
|
|
|
/>
|
2020-03-17 22:24:40 +00:00
|
|
|
</Modal.Content>
|
|
|
|
</Modal>
|
|
|
|
);
|
2020-03-23 20:24:17 +00:00
|
|
|
return <SettingsModal />;
|
2020-03-17 22:24:40 +00:00
|
|
|
}
|
|
|
|
}
|
2020-04-10 15:25:52 +00:00
|
|
|
|
|
|
|
const mapStateToProps = (state, ownProps) => ({
|
|
|
|
device: state.devices[ownProps.id],
|
|
|
|
});
|
|
|
|
const DeviceSettingsModalContainer = connect(
|
|
|
|
mapStateToProps,
|
|
|
|
RemoteService,
|
|
|
|
null,
|
|
|
|
{ forwardRef: true }
|
|
|
|
)(DeviceSettingsModal);
|
|
|
|
export default DeviceSettingsModalContainer;
|