import {useMemo} from 'react'; import * as Sentry from '@sentry/react'; import ExternalLink from 'sentry/components/links/externalLink'; import Link from 'sentry/components/links/link'; import {useReplayContext} from 'sentry/components/replays/replayContext'; import TextCopyInput from 'sentry/components/textCopyInput'; import {Tooltip} from 'sentry/components/tooltip'; import {t, tct} from 'sentry/locale'; import getCurrentUrl from 'sentry/utils/replays/getCurrentUrl'; import useOrganization from 'sentry/utils/useOrganization'; import useProjects from 'sentry/utils/useProjects'; import {normalizeUrl} from 'sentry/utils/withDomainRequired'; function ReplayCurrentUrl() { const {currentTime, replay} = useReplayContext(); const replayRecord = replay?.getReplay(); const frames = replay?.getNavigationFrames(); const projId = replayRecord?.project_id; const {projects} = useProjects(); const projSlug = projects.find(p => p.id === projId)?.slug ?? undefined; const organization = useOrganization(); const url = useMemo(() => { try { return getCurrentUrl(replayRecord, frames, currentTime); } catch (err) { Sentry.captureException(err); return ''; } }, [replayRecord, frames, currentTime]); if (!replay || !url) { return ( {''} ); } if (url.includes('[Filtered]')) { return ( {'Data Scrubber'} ), settings: projSlug ? ( {'Settings, under Security & Privacy'} ) : ( 'Settings, under Security & Privacy' ), } )} isHoverable > {url} ); } return ( {url} ); } export default ReplayCurrentUrl;