replayClipPreview.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {useMemo} from 'react';
  2. import ReplayClipPreviewPlayer from 'sentry/components/events/eventReplay/replayClipPreviewPlayer';
  3. import {StaticReplayPreferences} from 'sentry/components/replays/preferences/replayPreferences';
  4. import {Provider as ReplayContextProvider} from 'sentry/components/replays/replayContext';
  5. import useReplayReader from 'sentry/utils/replays/hooks/useReplayReader';
  6. type Props = {
  7. clipOffsets: {
  8. durationAfterMs: number;
  9. durationBeforeMs: number;
  10. };
  11. eventTimestampMs: number;
  12. replaySlug: string;
  13. } & Omit<
  14. React.ComponentProps<typeof ReplayClipPreviewPlayer>,
  15. keyof ReturnType<typeof useReplayReader>
  16. >;
  17. function ReplayClipPreview({
  18. analyticsContext,
  19. clipOffsets,
  20. eventTimestampMs,
  21. orgSlug,
  22. replaySlug,
  23. ...props
  24. }: Props) {
  25. const clipWindow = useMemo(
  26. () => ({
  27. startTimestampMs: eventTimestampMs - clipOffsets.durationBeforeMs,
  28. endTimestampMs: eventTimestampMs + clipOffsets.durationAfterMs,
  29. }),
  30. [clipOffsets.durationBeforeMs, clipOffsets.durationAfterMs, eventTimestampMs]
  31. );
  32. const replayContext = useReplayReader({
  33. orgSlug,
  34. replaySlug,
  35. clipWindow,
  36. });
  37. const {fetching, replay} = replayContext;
  38. return (
  39. <ReplayContextProvider
  40. analyticsContext={analyticsContext}
  41. isFetching={fetching}
  42. prefsStrategy={StaticReplayPreferences}
  43. replay={replay}
  44. >
  45. <ReplayClipPreviewPlayer
  46. analyticsContext={analyticsContext}
  47. orgSlug={orgSlug}
  48. {...props}
  49. {...replayContext}
  50. />
  51. </ReplayContextProvider>
  52. );
  53. }
  54. export default ReplayClipPreview;