import ProjectBadge from 'sentry/components/idBadge/projectBadge'; import Link from 'sentry/components/links/link'; import type {DateString} from 'sentry/types'; import EventView from 'sentry/utils/discover/eventView'; import { generateEventSlug, generateLinkToEventInTraceView, } from 'sentry/utils/discover/urls'; import {getShortEventId} from 'sentry/utils/events'; import Projects from 'sentry/utils/projects'; import {useLocation} from 'sentry/utils/useLocation'; import useOrganization from 'sentry/utils/useOrganization'; import usePageFilters from 'sentry/utils/usePageFilters'; import useProjects from 'sentry/utils/useProjects'; import {getTraceDetailsUrl} from 'sentry/views/performance/traceDetails/utils'; import {transactionSummaryRouteWithQuery} from 'sentry/views/performance/transactionSummary/utils'; interface ProjectRendererProps { projectSlug: string; hideName?: boolean; } export function ProjectRenderer({projectSlug, hideName}: ProjectRendererProps) { const organization = useOrganization(); return ( {({projects}) => { const project = projects.find(p => p.slug === projectSlug); return ( ); }} ); } interface SpanIdRendererProps { projectSlug: string; spanId: string; timestamp: string; trace: string; transactionId: string; } export function SpanIdRenderer({ projectSlug, spanId, timestamp, trace, transactionId, }: SpanIdRendererProps) { const location = useLocation(); const organization = useOrganization(); const target = generateLinkToEventInTraceView({ eventSlug: generateEventSlug({ id: transactionId, project: projectSlug, }), organization, location, eventView: EventView.fromLocation(location), dataRow: { id: transactionId, trace, timestamp, }, spanId, }); return {getShortEventId(spanId)}; } interface TraceIdRendererProps { traceId: string; timestamp?: DateString; transactionId?: string; } export function TraceIdRenderer({ traceId, timestamp, transactionId, }: TraceIdRendererProps) { const organization = useOrganization(); const {selection} = usePageFilters(); const stringOrNumberTimestamp = timestamp instanceof Date ? timestamp.toISOString() : timestamp ?? ''; const target = getTraceDetailsUrl( organization, traceId, { start: selection.datetime.start, end: selection.datetime.end, statsPeriod: selection.datetime.period, }, {}, stringOrNumberTimestamp, transactionId ); return {getShortEventId(traceId)}; } interface TransactionRendererProps { projectSlug: string; transaction: string; } export function TransactionRenderer({ projectSlug, transaction, }: TransactionRendererProps) { const location = useLocation(); const organization = useOrganization(); const {projects} = useProjects({slugs: [projectSlug]}); const target = transactionSummaryRouteWithQuery({ orgSlug: organization.slug, transaction, query: { ...location.query, query: undefined, }, projectID: String(projects[0]?.id ?? ''), }); return {transaction}; }