Highlight selected history entry
This commit is contained in:
@@ -6,6 +6,7 @@ import { Theme, withStyles } from '@material-ui/core/styles'
|
|||||||
interface HistoryItem {
|
interface HistoryItem {
|
||||||
title: JSX.Element | string
|
title: JSX.Element | string
|
||||||
value: string | any
|
value: string | any
|
||||||
|
selected?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -28,18 +29,18 @@ class MessageHistory extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public renderHistory() {
|
public renderHistory() {
|
||||||
const style = {
|
const style = (element: HistoryItem) => ({
|
||||||
backgroundColor: 'rgba(80, 80, 80, 0.6)',
|
backgroundColor: element.selected ? 'rgba(120, 120, 120, 0.6)' : 'rgba(80, 80, 80, 0.6)',
|
||||||
margin: '8px',
|
margin: '8px',
|
||||||
padding: '8px 8px 0 8px',
|
padding: '8px 8px 0 8px',
|
||||||
cursor: this.props.onClick ? 'pointer' : 'inherit',
|
cursor: this.props.onClick ? 'pointer' : 'inherit',
|
||||||
}
|
})
|
||||||
|
|
||||||
const messageStyle: React.CSSProperties = { textOverflow: 'ellipsis', whiteSpace: 'nowrap', overflow: 'hidden' }
|
const messageStyle: React.CSSProperties = { textOverflow: 'ellipsis', whiteSpace: 'nowrap', overflow: 'hidden' }
|
||||||
const elements = this.props.items.map((element, index) => (
|
const elements = this.props.items.map((element, index) => (
|
||||||
<div
|
<div
|
||||||
key={index}
|
key={index}
|
||||||
style={style}
|
style={style(element)}
|
||||||
onClick={(event: React.MouseEvent) => this.props.onClick && this.props.onClick(index, event.target)}
|
onClick={(event: React.MouseEvent) => this.props.onClick && this.props.onClick(index, event.target)}
|
||||||
>
|
>
|
||||||
<div><i>{element.title}</i></div>
|
<div><i>{element.title}</i></div>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ const throttle = require('lodash.throttle')
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
node?: q.TreeNode<TopicViewModel>
|
node?: q.TreeNode<TopicViewModel>
|
||||||
|
selected?: q.Message
|
||||||
onSelect: (message: q.Message) => void
|
onSelect: (message: q.Message) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,6 +53,7 @@ class MessageHistory extends React.Component<Props, State> {
|
|||||||
const historyElements = history.reverse().map(message => ({
|
const historyElements = history.reverse().map(message => ({
|
||||||
title: <DateFormatter date={message.received} />,
|
title: <DateFormatter date={message.received} />,
|
||||||
value: message.value,
|
value: message.value,
|
||||||
|
selected: message === this.props.selected,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const numericMessages = history.filter(message => !isNaN(parseFloat(message.value)))
|
const numericMessages = history.filter(message => !isNaN(parseFloat(message.value)))
|
||||||
|
|||||||
@@ -169,10 +169,7 @@ class Sidebar extends React.Component<Props, State> {
|
|||||||
<ValueRenderer node={this.props.node} />
|
<ValueRenderer node={this.props.node} />
|
||||||
</React.Suspense>
|
</React.Suspense>
|
||||||
</div>
|
</div>
|
||||||
<div><MessageHistory onSelect={this.handleMessageHistorySelect} node={this.props.node} /></div>
|
<div><MessageHistory onSelect={this.handleMessageHistorySelect} selected={this.state.compareMessage} node={this.props.node} /></div>
|
||||||
<Popper open={Boolean(this.state.compareMessage)} anchorEl={this.valueRef.current} placement="left" transition={true}>
|
|
||||||
{this.showValueComparison}
|
|
||||||
</Popper>
|
|
||||||
</ExpansionPanelDetails>
|
</ExpansionPanelDetails>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
<ExpansionPanel defaultExpanded={true}>
|
<ExpansionPanel defaultExpanded={true}>
|
||||||
@@ -195,18 +192,6 @@ class Sidebar extends React.Component<Props, State> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private valueRenderWidthChange = (width: number) => {
|
|
||||||
this.setState({ valueRenderWidth: width })
|
|
||||||
}
|
|
||||||
|
|
||||||
private showValueComparison = (a: any) => (
|
|
||||||
<Fade {...a.TransitionProps} timeout={350}>
|
|
||||||
<Paper style={{ maxWidth: this.state.valueRenderWidth }}>
|
|
||||||
<ValueRenderer message={this.state.compareMessage} />
|
|
||||||
</Paper>
|
|
||||||
</Fade>
|
|
||||||
)
|
|
||||||
|
|
||||||
private messageMetaInfo() {
|
private messageMetaInfo() {
|
||||||
if (!this.props.node || !this.props.node.message || !this.props.node.mqttMessage) {
|
if (!this.props.node || !this.props.node.message || !this.props.node.mqttMessage) {
|
||||||
return null
|
return null
|
||||||
|
|||||||
Reference in New Issue
Block a user