import * as q from '../../../../../backend/src/Model' import * as React from 'react' import Clear from '@material-ui/icons/Clear' import Code from '@material-ui/icons/Code' import Copy from '../../helper/Copy' import DateFormatter from '../../helper/DateFormatter' import ExpandMore from '@material-ui/icons/ExpandMore' import MessageHistory from './MessageHistory' import Reorder from '@material-ui/icons/Reorder' import ToggleButton from '@material-ui/lab/ToggleButton' import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup' import ValueRenderer from './ValueRenderer' import { AppState } from '../../../reducers' import { Base64Message } from '../../../../../backend/src/Model/Base64Message' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { settingsActions, sidebarActions } from '../../../actions' import { ValueRendererDisplayMode } from '../../../reducers/Settings' import { Button, ExpansionPanel, ExpansionPanelDetails, ExpansionPanelSummary, Tooltip, Typography, StyleRulesCallback, withStyles, Theme, } from '@material-ui/core' interface Props { node?: q.TreeNode valueRendererDisplayMode: ValueRendererDisplayMode sidebarActions: typeof sidebarActions settingsActions: typeof settingsActions classes: any lastUpdate: number compareMessage?: q.Message } interface State {} class ValuePanel extends React.Component { constructor(props: Props) { super(props) this.state = { } } private renderValue() { const node = this.props.node if (!node || !node.message) { return null } return ( ) } private renderViewOptions() { if (!this.props.node || !this.props.node.message || !this.props.node.mqttMessage) { return null } const retainedButton = ( ) return (
{this.renderActionButtons()}
{this.props.node.mqttMessage.retain ? retainedButton : null}
{this.messageMetaInfo()}
) } private messageMetaInfo() { if (!this.props.node || !this.props.node.message || !this.props.node.mqttMessage) { return null } return ( QoS: {this.props.node.mqttMessage.qos} ) } private renderActionButtons() { const handleValue = (mouseEvent: React.MouseEvent, value: any) => { if (value === null) { return } this.props.settingsActions.setValueDisplayMode(value) } return ( ) } private panelStyle() { return { detailsStyle: { padding: '0px 16px 8px 8px', display: 'block' }, summaryStyle: { minHeight: '0' }, } } private handleMessageHistorySelect = (message: q.Message) => { if (message !== this.props.compareMessage) { this.props.sidebarActions.setCompareMessage(message) } else { this.props.sidebarActions.setCompareMessage(undefined) } } public render() { const { node, classes } = this.props const { detailsStyle, summaryStyle } = this.panelStyle() const copyValue = (node && node.message && node.message.value) ? : null return ( } style={summaryStyle}> Value {copyValue} {this.renderViewOptions()}
Loading...
}> {this.renderValue()}
) } } const mapDispatchToProps = (dispatch: any) => { return { sidebarActions: bindActionCreators(sidebarActions, dispatch), settingsActions: bindActionCreators(settingsActions, dispatch), } } const mapStateToProps = (state: AppState) => { return { valueRendererDisplayMode: state.settings.get('valueRendererDisplayMode'), node: state.tree.get('selectedTopic'), compareMessage: state.sidebar.get('compareMessage'), } } const styles: StyleRulesCallback = (theme: Theme) => { return { heading: { fontSize: theme.typography.pxToRem(15), fontWeight: theme.typography.fontWeightRegular, }, toggleButton: { height: '36px', }, toggleButtonIcon: { verticalAlign: 'middle', }, } } export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(ValuePanel))