import {useMemo} from 'react'; import {EventContexts} from 'sentry/components/events/contexts'; import {EventAttachments} from 'sentry/components/events/eventAttachments'; import {EventEvidence} from 'sentry/components/events/eventEvidence'; import {EventViewHierarchy} from 'sentry/components/events/eventViewHierarchy'; import {EventRRWebIntegration} from 'sentry/components/events/rrwebIntegration'; import ProjectBadge from 'sentry/components/idBadge/projectBadge'; import type {LazyRenderProps} from 'sentry/components/lazyRender'; import LoadingError from 'sentry/components/loadingError'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import {Tooltip} from 'sentry/components/tooltip'; import {t} from 'sentry/locale'; import type {EventTransaction, Organization, Project} from 'sentry/types'; import {useLocation} from 'sentry/utils/useLocation'; import useProjects from 'sentry/utils/useProjects'; import {CustomMetricsEventData} from 'sentry/views/metrics/customMetricsEventData'; import {useTransaction} from 'sentry/views/performance/newTraceDetails/traceApi/useTransaction'; import type {TraceTreeNodeDetailsProps} from 'sentry/views/performance/newTraceDetails/traceDrawer/tabs/traceTreeNodeDetails'; import type { TraceTree, TraceTreeNode, } from 'sentry/views/performance/newTraceDetails/traceModels/traceTree'; import {IssueList} from '../issues/issues'; import {TraceDrawerComponents} from '../styles'; import {AdditionalData} from './sections/additionalData'; import {BreadCrumbs} from './sections/breadCrumbs'; import {Entries} from './sections/entries'; import GeneralInfo from './sections/generalInfo'; import {Measurements} from './sections/measurements'; import ReplayPreview from './sections/replayPreview'; import {Request} from './sections/request'; import {Sdk} from './sections/sdk'; import {EventTags} from './sections/tags'; export const LAZY_RENDER_PROPS: Partial = { observerOptions: {rootMargin: '50px'}, }; type TransactionNodeDetailHeaderProps = { event: EventTransaction; node: TraceTreeNode; onTabScrollToNode: (node: TraceTreeNode) => void; organization: Organization; project: Project | undefined; }; function TransactionNodeDetailHeader({ node, organization, project, onTabScrollToNode, event, }: TransactionNodeDetailHeaderProps) { return (
{t('transaction')}
{' '} {node.value['transaction.op'] + ' - ' + node.value.transaction}
); } export function TransactionNodeDetails({ node, organization, onTabScrollToNode, onParentClick, }: TraceTreeNodeDetailsProps>) { const location = useLocation(); const {projects} = useProjects(); const issues = useMemo(() => { return [...node.errors, ...node.performance_issues]; }, [node.errors, node.performance_issues]); const { data: event, isError, isLoading, } = useTransaction({ node, organization, }); if (isLoading) { return ; } if (isError) { return ; } const project = projects.find(proj => proj.slug === event?.projectSlug); return ( {event.projectSlug ? ( ) : null} {project ? : null} {event._metrics_summary ? ( ) : null} {event.projectSlug ? ( ) : null} {project ? : null} {event.projectSlug ? ( ) : null} ); }