import {useMemo} from 'react'; import Feature from 'sentry/components/acl/feature'; import FeatureDisabled from 'sentry/components/acl/featureDisabled'; import Placeholder from 'sentry/components/placeholder'; import {useReplayContext} from 'sentry/components/replays/replayContext'; import {t} from 'sentry/locale'; import type {Crumb} from 'sentry/types/breadcrumbs'; import {isBreadcrumbTypeDefault} from 'sentry/types/breadcrumbs'; import useActiveReplayTab from 'sentry/utils/replays/hooks/useActiveReplayTab'; import useOrganization from 'sentry/utils/useOrganization'; import Console from 'sentry/views/replays/detail/console'; import DomMutations from 'sentry/views/replays/detail/domMutations'; import IssueList from 'sentry/views/replays/detail/issueList'; import MemoryChart from 'sentry/views/replays/detail/memoryChart'; import NetworkList from 'sentry/views/replays/detail/network'; import Trace from 'sentry/views/replays/detail/trace'; type Props = {}; function getBreadcrumbsByCategory(breadcrumbs: Crumb[], categories: string[]) { return breadcrumbs .filter(isBreadcrumbTypeDefault) .filter(breadcrumb => categories.includes(breadcrumb.category || '')); } function FocusArea({}: Props) { const {getActiveTab} = useActiveReplayTab(); const {currentTime, currentHoverTime, replay, setCurrentTime, setCurrentHoverTime} = useReplayContext(); const organization = useOrganization(); // Memoize this because re-renders will interfere with the mouse state of the // chart (e.g. on mouse over and out) const memorySpans = useMemo(() => { return replay?.getRawSpans().filter(replay.isMemorySpan); }, [replay]); if (!replay || !memorySpans) { return ; } const replayRecord = replay.getReplay(); const startTimestampMs = replayRecord.startedAt.getTime(); const getNetworkSpans = () => { return replay.getRawSpans().filter(replay.isNetworkSpan); }; switch (getActiveTab()) { case 'console': const consoleMessages = getBreadcrumbsByCategory(replay?.getRawCrumbs(), [ 'console', 'exception', ]); return ( ); case 'network': return ; case 'trace': const features = ['organizations:performance-view']; const renderDisabled = () => ( ); return ( ); case 'issues': return ; case 'dom': return ; case 'memory': return ( ); default: return null; } } export default FocusArea;