index.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import styled from '@emotion/styled';
  2. import ErrorBoundary from 'sentry/components/errorBoundary';
  3. import {PlatformKey} from 'sentry/types';
  4. import {Event} from 'sentry/types/event';
  5. import {StacktraceType, StackView} from 'sentry/types/stacktrace';
  6. import {isNativePlatform} from 'sentry/utils/platform';
  7. import Content from './content';
  8. import {HierarchicalGroupingContent} from './hierarchicalGroupingContent';
  9. import {NativeContent} from './nativeContent';
  10. import rawStacktraceContent from './rawContent';
  11. type Props = Pick<
  12. React.ComponentProps<typeof HierarchicalGroupingContent>,
  13. 'groupingCurrentLevel'
  14. > & {
  15. event: Event;
  16. hasHierarchicalGrouping: boolean;
  17. newestFirst: boolean;
  18. platform: PlatformKey;
  19. stacktrace: StacktraceType;
  20. inlined?: boolean;
  21. lockAddress?: string;
  22. maxDepth?: number;
  23. meta?: Record<any, any>;
  24. stackView?: StackView;
  25. threadId?: number;
  26. };
  27. export function StackTraceContent({
  28. stackView,
  29. stacktrace,
  30. event,
  31. newestFirst,
  32. platform,
  33. hasHierarchicalGrouping,
  34. groupingCurrentLevel,
  35. maxDepth,
  36. meta,
  37. inlined,
  38. threadId,
  39. lockAddress,
  40. }: Props) {
  41. if (stackView === StackView.RAW) {
  42. return (
  43. <ErrorBoundary mini>
  44. <pre className="traceback plain">
  45. {rawStacktraceContent(stacktrace, event.platform)}
  46. </pre>
  47. </ErrorBoundary>
  48. );
  49. }
  50. if (isNativePlatform(platform)) {
  51. return (
  52. <ErrorBoundary mini>
  53. <StyledNativeContent
  54. data={stacktrace}
  55. includeSystemFrames={stackView === StackView.FULL}
  56. platform={platform}
  57. event={event}
  58. newestFirst={newestFirst}
  59. groupingCurrentLevel={groupingCurrentLevel}
  60. meta={meta}
  61. inlined={inlined}
  62. maxDepth={maxDepth}
  63. />
  64. </ErrorBoundary>
  65. );
  66. }
  67. if (hasHierarchicalGrouping) {
  68. return (
  69. <ErrorBoundary mini>
  70. <StyledHierarchicalGroupingContent
  71. data={stacktrace}
  72. className="no-exception"
  73. includeSystemFrames={stackView === StackView.FULL}
  74. platform={platform}
  75. event={event}
  76. newestFirst={newestFirst}
  77. groupingCurrentLevel={groupingCurrentLevel}
  78. meta={meta}
  79. hideIcon={inlined}
  80. inlined={inlined}
  81. maxDepth={maxDepth}
  82. />
  83. </ErrorBoundary>
  84. );
  85. }
  86. return (
  87. <ErrorBoundary mini>
  88. <StyledContent
  89. data={stacktrace}
  90. className="no-exception"
  91. includeSystemFrames={stackView === StackView.FULL}
  92. platform={platform}
  93. event={event}
  94. newestFirst={newestFirst}
  95. meta={meta}
  96. hideIcon={inlined}
  97. inlined={inlined}
  98. maxDepth={maxDepth}
  99. threadId={threadId}
  100. lockAddress={lockAddress}
  101. />
  102. </ErrorBoundary>
  103. );
  104. }
  105. const inlinedStyles = `
  106. border-radius: 0;
  107. border-left: 0;
  108. border-right: 0;
  109. `;
  110. const StyledNativeContent = styled(NativeContent)<{inlined?: boolean}>`
  111. ${p => p.inlined && inlinedStyles}
  112. `;
  113. const StyledHierarchicalGroupingContent = styled(HierarchicalGroupingContent)<{
  114. inlined?: boolean;
  115. }>`
  116. ${p => p.inlined && inlinedStyles}
  117. `;
  118. const StyledContent = styled(Content)<{inlined?: boolean}>`
  119. ${p => p.inlined && inlinedStyles}
  120. `;