import {useMemo} from 'react'; import {useTheme} from '@emotion/react'; import styled from '@emotion/styled'; import {LinkButton} from 'sentry/components/button'; import { getStacktrace, StackTracePreviewContent, } from 'sentry/components/groupPreviewTooltip/stackTracePreview'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import {generateIssueEventTarget} from 'sentry/components/quickTrace/utils'; import {t} from 'sentry/locale'; import type {EventError} from 'sentry/types/event'; import {useApiQuery} from 'sentry/utils/queryClient'; import type {TraceTreeNodeDetailsProps} from '../../traceDrawer/tabs/traceTreeNodeDetails'; import {TraceIcons} from '../../traceIcons'; import {TraceTree} from '../../traceModels/traceTree'; import type {TraceTreeNode} from '../../traceModels/traceTreeNode'; import {makeTraceNodeBarColor} from '../../traceRow/traceBar'; import {getTraceTabTitle} from '../../traceState/traceTabs'; import {IssueList} from './issues/issues'; import {type SectionCardKeyValueList, TraceDrawerComponents} from './styles'; export function ErrorNodeDetails({ node, organization, onTabScrollToNode, onParentClick, }: TraceTreeNodeDetailsProps>) { const issues = useMemo(() => { return [...node.errors]; }, [node.errors]); const {isPending, data} = useApiQuery( [ `/organizations/${organization.slug}/events/${node.value.project_slug}:${node.value.event_id}/`, ], { staleTime: 2 * 60 * 1000, } ); const stackTrace = useMemo(() => { if (data) { return getStacktrace(data); } return null; }, [data]); const theme = useTheme(); const parentTransaction = TraceTree.ParentTransaction(node); const items: SectionCardKeyValueList = [ { key: 'title', subject: t('Title'), value: , }, ]; if (parentTransaction) { items.push({ key: 'parent_transaction', subject: t('Parent Transaction'), value: ( onParentClick(parentTransaction)}> {getTraceTabTitle(parentTransaction)} ), }); } return isPending ? ( ) : data ? (
{node.value.level ?? t('error')}
{t('Go to Issue')}
) : ( t('No stack trace has been reported with this error') ), }, ]} title={t('Stack Trace')} />
) : null; } const StackTraceWrapper = styled('div')` .traceback { margin-bottom: 0; border: 0; } `;