import {useMemo} from 'react'; import styled from '@emotion/styled'; import type {Location} from 'history'; import {Button} from 'sentry/components/button'; import {CopyToClipboardButton} from 'sentry/components/copyToClipboardButton'; import { getStacktrace, StackTracePreviewContent, } from 'sentry/components/groupPreviewTooltip/stackTracePreview'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import {generateIssueEventTarget} from 'sentry/components/quickTrace/utils'; import {IconFire} from 'sentry/icons'; import {t} from 'sentry/locale'; import type {EventError, Organization} from 'sentry/types'; import {useApiQuery} from 'sentry/utils/queryClient'; import {Row, Tags} from 'sentry/views/performance/traceDetails/styles'; import type {TraceTree, TraceTreeNode} from '../../traceTree'; import {TraceDrawerComponents} from './styles'; export function ErrorNodeDetails({ node, organization, location, scrollToNode, }: { location: Location; node: TraceTreeNode; organization: Organization; scrollToNode: (node: TraceTreeNode) => void; }) { const {isLoading, 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]); return isLoading ? ( ) : data ? (
{t('Error')}
{stackTrace && ( {t('Stack Trace')} )} } > {node.value.title}
) : null; } const StackTraceWrapper = styled('td')` .traceback { margin-bottom: 0; border: 0; } `; const StackTraceTitle = styled('td')` font-weight: 600; font-size: 13px; width: 175px; `;