Skip to content

Commit 1fa73e6

Browse files
authored
ref(replay): Consistently call useReplayReader() to get the ReplayReader instance (#95958)
There should only be one way to get the ReplayReader instance, this is it. The previous hook `useReplayContext()` was doing everything, and this removes on job from it's list which will make it easier to replace/breakup in followups.
1 parent bda85e8 commit 1fa73e6

33 files changed

+94
-52
lines changed

static/app/components/events/eventReplay/replayPreviewPlayer.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {space} from 'sentry/styles/space';
2222
import getRouteStringFromRoutes from 'sentry/utils/getRouteStringFromRoutes';
2323
import {TabKey} from 'sentry/utils/replays/hooks/useActiveReplayTab';
2424
import useMarkReplayViewed from 'sentry/utils/replays/hooks/useMarkReplayViewed';
25+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
2526
import useOrganization from 'sentry/utils/useOrganization';
2627
import {useParams} from 'sentry/utils/useParams';
2728
import {useRoutes} from 'sentry/utils/useRoutes';
@@ -57,7 +58,8 @@ export default function ReplayPreviewPlayer({
5758
const routes = useRoutes();
5859
const organization = useOrganization();
5960
const [isSidebarOpen, setIsSidebarOpen] = useState(true);
60-
const {replay, currentTime, isFetching, isFinished, isPlaying, isVideoReplay} =
61+
const replay = useReplayReader();
62+
const {currentTime, isFetching, isFinished, isPlaying, isVideoReplay} =
6163
useReplayContext();
6264

6365
const fullscreenRef = useRef<HTMLDivElement | null>(null);

static/app/components/performance/waterfall/row.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {ROW_HEIGHT} from 'sentry/components/performance/waterfall/constants';
55
import {getBackgroundColor} from 'sentry/components/performance/waterfall/utils';
66
import {useReplayContext} from 'sentry/components/replays/replayContext';
77
import toPercent from 'sentry/utils/number/toPercent';
8+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
89
import useCurrentHoverTime from 'sentry/utils/replays/playback/providers/useCurrentHoverTime';
910

1011
interface RowProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -63,7 +64,8 @@ export const RowCell = styled('div')<RowCellProps>`
6364
`;
6465

6566
export function RowReplayTimeIndicators() {
66-
const {currentTime, replay} = useReplayContext();
67+
const replay = useReplayReader();
68+
const {currentTime} = useReplayContext();
6769
const [currentHoverTime] = useCurrentHoverTime();
6870
const durationMs = replay?.getDurationMs();
6971

static/app/components/replays/breadcrumbs/breadcrumbItem.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import {BreadcrumbComparisonButton} from 'sentry/components/replays/breadcrumbs/
99
import {BreadcrumbDescription} from 'sentry/components/replays/breadcrumbs/breadcrumbDescription';
1010
import {BreadcrumbIssueLink} from 'sentry/components/replays/breadcrumbs/breadcrumbIssueLink';
1111
import {BreadcrumbWebVital} from 'sentry/components/replays/breadcrumbs/breadcrumbWebVital';
12-
import {useReplayContext} from 'sentry/components/replays/replayContext';
1312
import {Timeline} from 'sentry/components/timeline';
1413
import {space} from 'sentry/styles/space';
1514
import {trackAnalytics} from 'sentry/utils/analytics';
1615
import type {Extraction} from 'sentry/utils/replays/extractDomNodes';
1716
import getFrameDetails from 'sentry/utils/replays/getFrameDetails';
1817
import useExtractDomNodes from 'sentry/utils/replays/hooks/useExtractDomNodes';
18+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
1919
import type {ReplayFrame} from 'sentry/utils/replays/types';
2020
import {isErrorFrame} from 'sentry/utils/replays/types';
2121
import useOrganization from 'sentry/utils/useOrganization';
@@ -61,7 +61,7 @@ function BreadcrumbItem({
6161
const theme = useTheme();
6262
const {colorGraphicsToken, description, title, icon} = getFrameDetails(frame);
6363
const colorHex = theme.tokens.graphics[colorGraphicsToken];
64-
const {replay} = useReplayContext();
64+
const replay = useReplayReader();
6565
const organization = useOrganization();
6666
const {data: extraction, isPending} = useExtractDomNodes({
6767
replay,

static/app/components/replays/breadcrumbs/replayTimeline.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ import {useReplayContext} from 'sentry/components/replays/replayContext';
1616
import divide from 'sentry/utils/number/divide';
1717
import toPercent from 'sentry/utils/number/toPercent';
1818
import useTimelineScale from 'sentry/utils/replays/hooks/useTimelineScale';
19+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
1920
import {useDimensions} from 'sentry/utils/useDimensions';
2021

2122
export default function ReplayTimeline() {
22-
const {replay, currentTime} = useReplayContext();
23+
const replay = useReplayReader();
24+
const {currentTime} = useReplayContext();
2325
const [timelineScale] = useTimelineScale();
2426

2527
const panelRef = useRef<HTMLDivElement>(null);

static/app/components/replays/canvasSupportNotice.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {IconClose} from 'sentry/icons';
88
import {t, tct} from 'sentry/locale';
99
import {space} from 'sentry/styles/space';
1010
import {trackAnalytics} from 'sentry/utils/analytics';
11+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
1112
import useDismissAlert from 'sentry/utils/useDismissAlert';
1213
import useOrganization from 'sentry/utils/useOrganization';
1314
import useProjectSdkNeedsUpdate from 'sentry/utils/useProjectSdkNeedsUpdate';
@@ -20,7 +21,8 @@ const LOCAL_STORAGE_KEY = 'replay-canvas-supported';
2021
export function CanvasSupportNotice() {
2122
const organization = useOrganization();
2223
const {dismiss, isDismissed} = useDismissAlert({key: LOCAL_STORAGE_KEY});
23-
const {isFetching, replay} = useReplayContext();
24+
const replay = useReplayReader();
25+
const {isFetching} = useReplayContext();
2426
const projectId = replay?.getReplay().project_id;
2527
const {needsUpdate} = useProjectSdkNeedsUpdate({
2628
minVersion: '7.98.0',

static/app/components/replays/player/replayCurrentTime.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Duration from 'sentry/components/duration/duration';
55
import {useReplayContext} from 'sentry/components/replays/replayContext';
66
import useReplayCurrentTime from 'sentry/utils/replays/playback/hooks/useReplayCurrentTime';
77
import {useReplayPrefs} from 'sentry/utils/replays/playback/providers/replayPreferencesContext';
8+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
89
import useOrganization from 'sentry/utils/useOrganization';
910

1011
export default function ReplayCurrentTime() {
@@ -25,7 +26,8 @@ function ReplayCurrentTimeNew() {
2526
}
2627

2728
function OriginalReplayCurrentTime() {
28-
const {currentTime, replay} = useReplayContext();
29+
const replay = useReplayReader();
30+
const {currentTime} = useReplayContext();
2931
const [prefs] = useReplayPrefs();
3032
const timestampType = prefs.timestampType;
3133
const startTimestamp = replay?.getStartTimestampMs() ?? 0;

static/app/components/replays/player/replayPlayer.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ function useReplayerInstance() {
3939
return () => {};
4040
}
4141

42-
const webFrames = replay.getRRWebFrames();
42+
const webFrames = replay?.getRRWebFrames();
43+
if (!webFrames) {
44+
return () => {};
45+
}
4346

4447
const replayer = new Replayer(webFrames, {
4548
root,

static/app/components/replays/player/scrubber.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import divide from 'sentry/utils/number/divide';
1414
import toPercent from 'sentry/utils/number/toPercent';
1515
import useTimelineScale from 'sentry/utils/replays/hooks/useTimelineScale';
1616
import {useReplayPrefs} from 'sentry/utils/replays/playback/providers/replayPreferencesContext';
17+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
1718
import useCurrentHoverTime from 'sentry/utils/replays/playback/providers/useCurrentHoverTime';
1819

1920
type Props = {
@@ -22,7 +23,8 @@ type Props = {
2223
};
2324

2425
function Scrubber({className, showZoomIndicators = false}: Props) {
25-
const {replay, currentTime, setCurrentTime} = useReplayContext();
26+
const replay = useReplayReader();
27+
const {currentTime, setCurrentTime} = useReplayContext();
2628
const [prefs] = useReplayPrefs();
2729
const timestampType = prefs.timestampType;
2830
const [currentHoverTime] = useCurrentHoverTime();

static/app/components/replays/player/useScrubberMouseTracking.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {useCallback} from 'react';
33

44
import {useReplayContext} from 'sentry/components/replays/replayContext';
55
import divide from 'sentry/utils/number/divide';
6+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
67
import useCurrentHoverTime from 'sentry/utils/replays/playback/providers/useCurrentHoverTime';
78
import useMouseTracking from 'sentry/utils/useMouseTracking';
89

@@ -11,7 +12,7 @@ type Opts<T extends Element> = {
1112
};
1213

1314
export function useScrubberMouseTracking<T extends Element>({elem}: Opts<T>) {
14-
const {replay} = useReplayContext();
15+
const replay = useReplayReader();
1516
const [, setCurrentHoverTime] = useCurrentHoverTime();
1617
const durationMs = replay?.getDurationMs();
1718

@@ -45,7 +46,8 @@ export function useTimelineScrubberMouseTracking<T extends Element>(
4546
{elem}: Opts<T>,
4647
scale: number
4748
) {
48-
const {replay, currentTime} = useReplayContext();
49+
const replay = useReplayReader();
50+
const {currentTime} = useReplayContext();
4951
const [, setCurrentHoverTime] = useCurrentHoverTime();
5052
const durationMs = replay?.getDurationMs();
5153

static/app/components/replays/preferences/replayPreferenceDropdown.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {IconSettings} from 'sentry/icons';
88
import {t} from 'sentry/locale';
99
import formatDuration from 'sentry/utils/duration/formatDuration';
1010
import {useReplayPrefs} from 'sentry/utils/replays/playback/providers/replayPreferencesContext';
11+
import {useReplayReader} from 'sentry/utils/replays/playback/providers/replayReaderProvider';
1112
import {toTitleCase} from 'sentry/utils/string/toTitleCase';
1213

1314
const timestampOptions: Array<'relative' | 'absolute'> = ['relative', 'absolute'];
@@ -22,7 +23,8 @@ export default function ReplayPreferenceDropdown({
2223
isLoading?: boolean;
2324
}) {
2425
const [prefs, setPrefs] = useReplayPrefs();
25-
const {isFetching, replay} = useReplayContext();
26+
const replay = useReplayReader();
27+
const {isFetching} = useReplayContext();
2628

2729
const SKIP_OPTION_VALUE = 'skip';
2830

0 commit comments

Comments
 (0)