|
@@ -6,6 +6,8 @@ import DateTime from 'sentry/components/dateTime';
|
|
|
import AnnotatedText from 'sentry/components/events/meta/annotatedText';
|
|
|
import {getMeta} from 'sentry/components/events/meta/metaProxy';
|
|
|
import {Hovercard} from 'sentry/components/hovercard';
|
|
|
+import {useReplayContext} from 'sentry/components/replays/replayContext';
|
|
|
+import {relativeTimeInMs, showPlayerTime} from 'sentry/components/replays/utils';
|
|
|
import {IconClose, IconWarning} from 'sentry/icons';
|
|
|
import {t} from 'sentry/locale';
|
|
|
import space from 'sentry/styles/space';
|
|
@@ -66,18 +68,21 @@ function MessageFormatter({breadcrumb}: MessageFormatterProps) {
|
|
|
|
|
|
interface ConsoleMessageProps extends MessageFormatterProps {
|
|
|
isLast: boolean;
|
|
|
- relativeTimestamp: string;
|
|
|
+ startTimestamp: number;
|
|
|
}
|
|
|
-function ConsoleMessage({
|
|
|
- breadcrumb,
|
|
|
- isLast,
|
|
|
- relativeTimestamp = '',
|
|
|
-}: ConsoleMessageProps) {
|
|
|
+function ConsoleMessage({breadcrumb, isLast, startTimestamp = 0}: ConsoleMessageProps) {
|
|
|
const ICONS = {
|
|
|
error: <IconClose isCircled size="xs" />,
|
|
|
warning: <IconWarning size="xs" />,
|
|
|
};
|
|
|
|
|
|
+ const {setCurrentTime, setCurrentHoverTime} = useReplayContext();
|
|
|
+
|
|
|
+ const diff = relativeTimeInMs(breadcrumb.timestamp || '', startTimestamp);
|
|
|
+ const handleOnClick = () => setCurrentTime(diff);
|
|
|
+ const handleOnMouseOver = () => setCurrentHoverTime(diff);
|
|
|
+ const handleOnMouseOut = () => setCurrentHoverTime(undefined);
|
|
|
+
|
|
|
return (
|
|
|
<Fragment>
|
|
|
<Icon isLast={isLast} level={breadcrumb.level}>
|
|
@@ -87,8 +92,19 @@ function ConsoleMessage({
|
|
|
<MessageFormatter breadcrumb={breadcrumb} />
|
|
|
</Message>
|
|
|
<ConsoleTimestamp isLast={isLast} level={breadcrumb.level}>
|
|
|
- <Hovercard body={`${t('Relative Time')}: ${relativeTimestamp}`}>
|
|
|
- <DateTime date={breadcrumb.timestamp} timeOnly />
|
|
|
+ <Hovercard
|
|
|
+ body={`${t('Relative Time')}: ${showPlayerTime(
|
|
|
+ breadcrumb.timestamp || '',
|
|
|
+ startTimestamp
|
|
|
+ )}`}
|
|
|
+ >
|
|
|
+ <DateTime
|
|
|
+ timeOnly
|
|
|
+ date={breadcrumb.timestamp}
|
|
|
+ onClick={handleOnClick}
|
|
|
+ onMouseOver={handleOnMouseOver}
|
|
|
+ onMouseOut={handleOnMouseOut}
|
|
|
+ />
|
|
|
</Hovercard>
|
|
|
</ConsoleTimestamp>
|
|
|
</Fragment>
|
|
@@ -110,6 +126,7 @@ const Common = styled('div')<{isLast: boolean; level: string}>`
|
|
|
const ConsoleTimestamp = styled(Common)<{isLast: boolean; level: string}>`
|
|
|
padding: ${space(1)};
|
|
|
border-left: 1px solid ${p => p.theme.innerBorder};
|
|
|
+ cursor: pointer;
|
|
|
`;
|
|
|
|
|
|
const Icon = styled(Common)`
|