diff --git a/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx b/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx index 5a59ea3..a58cd27 100644 --- a/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx +++ b/app/src/components/Sidebar/ValueRenderer/MessageHistory.tsx @@ -51,17 +51,22 @@ class MessageHistory extends React.Component { } const history = node.messageHistory.toArray() - const historyElements = history.reverse().map(message => ({ - title: , - value: message.value ? Base64Message.toUnicodeString(message.value) : '', - selected: message && message === this.props.selected, - })) + let previousMessage: q.Message | undefined = node.message + const historyElements = history.reverse().map((message) => { + const element = { + title: {previousMessage ? (-) : null}, + value: message.value ? Base64Message.toUnicodeString(message.value) : '', + selected: message && message === this.props.selected, + } + previousMessage = message + return element + }) const numericMessages = history .map((message: q.Message) => { - const number = message.value ? parseFloat(Base64Message.toUnicodeString(message.value)) : NaN - return { x: number, y: message.received.getTime() } - }).filter(data => !isNaN(data.x)) + const value = message.value ? parseFloat(Base64Message.toUnicodeString(message.value)) : NaN + return { x: message.received.getTime(), y: value } + }).filter(data => !isNaN(data.y)) const showPlot = numericMessages.length >= 2 return ( diff --git a/app/src/components/helper/DateFormatter.tsx b/app/src/components/helper/DateFormatter.tsx index 657bad9..fda2b4e 100644 --- a/app/src/components/helper/DateFormatter.tsx +++ b/app/src/components/helper/DateFormatter.tsx @@ -3,14 +3,30 @@ import * as moment from 'moment' interface Props { date: Date + intervalSince?: Date +} + +const unitMapping = { + s: 'seconds', + m: 'minutes', + h: 'hours', } class DateFormatter extends React.Component { public render() { const locale = window.navigator.language + if (this.props.intervalSince) { + return {this.intervalSince(this.props.intervalSince)} + } return {locale ? this.localizedDate(locale) : this.legacyDate()} } + private intervalSince(intervalSince: Date) { + const interval = intervalSince.getTime() - this.props.date.getTime() + const unit = this.unitForInterval(interval) + return `${moment.duration(interval).as(unit)} ${unitMapping[unit]}` + } + private legacyDate() { return `${this.props.date.toLocaleDateString()} ${this.props.date.toLocaleTimeString()}` } @@ -18,6 +34,21 @@ class DateFormatter extends React.Component { private localizedDate(locale: string) { return moment(this.props.date).locale(locale).format('L LTS') } + + private unitForInterval(millis: number) { + const oneMinute = 1000 * 60 + const oneHour = oneMinute * 60 + + if (millis > oneHour * 2) { + return 'h' + } + + if (millis > oneMinute * 2) { + return 'm' + } + + return 's' + } } export default DateFormatter