Fork of the excellent esp8266-react - https://github.com/rjwats/esp8266-react
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.4 KiB

  1. import React, { Component, Fragment } from 'react';
  2. import { WithTheme, withTheme } from '@material-ui/core/styles';
  3. import { Avatar, Divider, List, ListItem, ListItemAvatar, ListItemText } from '@material-ui/core';
  4. import DeviceHubIcon from '@material-ui/icons/DeviceHub';
  5. import RefreshIcon from '@material-ui/icons/Refresh';
  6. import ReportIcon from '@material-ui/icons/Report';
  7. import { RestFormProps, FormActions, FormButton, HighlightAvatar } from '../components';
  8. import { mqttStatusHighlight, mqttStatus, disconnectReason } from './MqttStatus';
  9. import { MqttStatus } from './types';
  10. type MqttStatusFormProps = RestFormProps<MqttStatus> & WithTheme;
  11. class MqttStatusForm extends Component<MqttStatusFormProps> {
  12. renderConnectionStatus() {
  13. const { data } = this.props
  14. if (data.connected) {
  15. return (
  16. <Fragment>
  17. <ListItem>
  18. <ListItemAvatar>
  19. <Avatar>#</Avatar>
  20. </ListItemAvatar>
  21. <ListItemText primary="Client ID" secondary={data.client_id} />
  22. </ListItem>
  23. <Divider variant="inset" component="li" />
  24. </Fragment>
  25. );
  26. }
  27. return (
  28. <Fragment>
  29. <ListItem>
  30. <ListItemAvatar>
  31. <Avatar>
  32. <ReportIcon />
  33. </Avatar>
  34. </ListItemAvatar>
  35. <ListItemText primary="Disconnect Reason" secondary={disconnectReason(data)} />
  36. </ListItem>
  37. <Divider variant="inset" component="li" />
  38. </Fragment>
  39. );
  40. }
  41. createListItems() {
  42. const { data, theme } = this.props
  43. return (
  44. <Fragment>
  45. <ListItem>
  46. <ListItemAvatar>
  47. <HighlightAvatar color={mqttStatusHighlight(data, theme)}>
  48. <DeviceHubIcon />
  49. </HighlightAvatar>
  50. </ListItemAvatar>
  51. <ListItemText primary="Status" secondary={mqttStatus(data)} />
  52. </ListItem>
  53. <Divider variant="inset" component="li" />
  54. {data.enabled && this.renderConnectionStatus()}
  55. </Fragment>
  56. );
  57. }
  58. render() {
  59. return (
  60. <Fragment>
  61. <List>
  62. {this.createListItems()}
  63. </List>
  64. <FormActions>
  65. <FormButton startIcon={<RefreshIcon />} variant="contained" color="secondary" onClick={this.props.loadData}>
  66. Refresh
  67. </FormButton>
  68. </FormActions>
  69. </Fragment>
  70. );
  71. }
  72. }
  73. export default withTheme(MqttStatusForm);