stackTraceV2.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import styled from '@emotion/styled';
  2. import CrashContent from 'sentry/components/events/interfaces/crashContent';
  3. import {t} from 'sentry/locale';
  4. import {Group, PlatformType, Project} from 'sentry/types';
  5. import {Event} from 'sentry/types/event';
  6. import {STACK_TYPE, STACK_VIEW} from 'sentry/types/stacktrace';
  7. import TraceEventDataSection from '../traceEventDataSection';
  8. import {DisplayOption} from '../traceEventDataSection/displayOptions';
  9. import CrashContentStackTrace from './crashContent/stackTrace';
  10. import NoStackTraceMessage from './noStackTraceMessage';
  11. import {isStacktraceNewestFirst} from './utils';
  12. type CrashContentProps = React.ComponentProps<typeof CrashContent>;
  13. type Props = Pick<
  14. CrashContentProps,
  15. 'groupingCurrentLevel' | 'hasHierarchicalGrouping'
  16. > & {
  17. event: Event;
  18. type: string;
  19. data: NonNullable<CrashContentProps['stacktrace']>;
  20. projectId: Project['id'];
  21. groupingCurrentLevel?: Group['metadata']['current_level'];
  22. hideGuide?: boolean;
  23. };
  24. function StackTrace({
  25. projectId,
  26. event,
  27. data,
  28. type,
  29. hasHierarchicalGrouping,
  30. groupingCurrentLevel,
  31. }: Props) {
  32. function getPlatform(): PlatformType {
  33. const framePlatform = data.frames?.find(frame => !!frame.platform);
  34. return framePlatform?.platform ?? event.platform ?? 'other';
  35. }
  36. const platform = getPlatform();
  37. const stackTraceNotFound = !(data.frames ?? []).length;
  38. return (
  39. <TraceEventDataSection
  40. type={type}
  41. stackType={STACK_TYPE.ORIGINAL}
  42. projectId={projectId}
  43. eventId={event.id}
  44. platform={platform}
  45. stackTraceNotFound={stackTraceNotFound}
  46. recentFirst={isStacktraceNewestFirst()}
  47. fullStackTrace={!data.hasSystemFrames}
  48. title={<Title>{t('Stack Trace')}</Title>}
  49. wrapTitle={false}
  50. hasMinified={false}
  51. hasVerboseFunctionNames={
  52. !!data.frames?.some(
  53. frame =>
  54. !!frame.rawFunction &&
  55. !!frame.function &&
  56. frame.rawFunction !== frame.function
  57. )
  58. }
  59. hasAbsoluteFilePaths={!!data.frames?.some(frame => !!frame.filename)}
  60. hasAbsoluteAddresses={!!data.frames?.some(frame => !!frame.instructionAddr)}
  61. hasAppOnlyFrames={!!data.frames?.some(frame => frame.inApp !== true)}
  62. hasNewestFirst={(data.frames ?? []).length > 1}
  63. showPermalink
  64. >
  65. {({raw, recentFirst, activeDisplayOptions}) =>
  66. stackTraceNotFound ? (
  67. <NoStackTraceMessage />
  68. ) : (
  69. <CrashContentStackTrace
  70. event={event}
  71. platform={platform}
  72. stackView={
  73. raw
  74. ? STACK_VIEW.RAW
  75. : activeDisplayOptions.includes(DisplayOption.FULL_STACK_TRACE)
  76. ? STACK_VIEW.FULL
  77. : STACK_VIEW.APP
  78. }
  79. newestFirst={recentFirst}
  80. stacktrace={data}
  81. groupingCurrentLevel={groupingCurrentLevel}
  82. hasHierarchicalGrouping={hasHierarchicalGrouping}
  83. nativeV2
  84. />
  85. )
  86. }
  87. </TraceEventDataSection>
  88. );
  89. }
  90. export default StackTrace;
  91. const Title = styled('h3')`
  92. margin-bottom: 0;
  93. `;