|
@@ -7,9 +7,10 @@ import ExternalLink from 'sentry/components/links/externalLink';
|
|
|
import List from 'sentry/components/list';
|
|
|
import ListItem from 'sentry/components/list/listItem';
|
|
|
import Placeholder from 'sentry/components/placeholder';
|
|
|
+import {Flex} from 'sentry/components/profiling/flex';
|
|
|
import {Provider as ReplayContextProvider} from 'sentry/components/replays/replayContext';
|
|
|
import ReplayPlayer from 'sentry/components/replays/replayPlayer';
|
|
|
-import {IconPlay} from 'sentry/icons';
|
|
|
+import {IconDelete, IconPlay} from 'sentry/icons';
|
|
|
import {t, tct} from 'sentry/locale';
|
|
|
import {space} from 'sentry/styles/space';
|
|
|
import getRouteStringFromRoutes from 'sentry/utils/getRouteStringFromRoutes';
|
|
@@ -32,7 +33,7 @@ function ReplayPreview({orgSlug, replaySlug, eventTimestampMs, buttonProps}: Pro
|
|
|
replaySlug,
|
|
|
});
|
|
|
|
|
|
- const startTimestampMs = replayRecord?.started_at.getTime() ?? 0;
|
|
|
+ const startTimestampMs = replayRecord?.started_at?.getTime() ?? 0;
|
|
|
const initialTimeOffsetMs = useMemo(() => {
|
|
|
if (eventTimestampMs && startTimestampMs) {
|
|
|
return Math.abs(eventTimestampMs - startTimestampMs);
|
|
@@ -41,6 +42,17 @@ function ReplayPreview({orgSlug, replaySlug, eventTimestampMs, buttonProps}: Pro
|
|
|
return 0;
|
|
|
}, [eventTimestampMs, startTimestampMs]);
|
|
|
|
|
|
+ if (replayRecord?.is_archived) {
|
|
|
+ return (
|
|
|
+ <Alert type="warning" data-test-id="replay-error">
|
|
|
+ <Flex gap={space(0.5)}>
|
|
|
+ <IconDelete color="gray500" size="sm" />
|
|
|
+ {t('The replay for this event has been deleted.')}
|
|
|
+ </Flex>
|
|
|
+ </Alert>
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
if (fetchError) {
|
|
|
const reasons = [
|
|
|
t('The replay was rate-limited and could not be accepted.'),
|