stackTrace.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import {useState} from 'react';
  2. import EventDataSection from 'sentry/components/events/eventDataSection';
  3. import CrashContent from 'sentry/components/events/interfaces/crashContent';
  4. import CrashActions from 'sentry/components/events/interfaces/crashHeader/crashActions';
  5. import CrashTitle from 'sentry/components/events/interfaces/crashHeader/crashTitle';
  6. import {t} from 'sentry/locale';
  7. import {Group, Project} from 'sentry/types';
  8. import {EntryType, Event} from 'sentry/types/event';
  9. import {STACK_TYPE, STACK_VIEW} from 'sentry/types/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. data: NonNullable<CrashContentProps['stacktrace']>;
  18. event: Event;
  19. projectId: Project['id'];
  20. groupingCurrentLevel?: Group['metadata']['current_level'];
  21. hideGuide?: boolean;
  22. };
  23. function StacktraceInterface({
  24. hideGuide = false,
  25. projectId,
  26. event,
  27. data,
  28. hasHierarchicalGrouping,
  29. groupingCurrentLevel,
  30. }: Props) {
  31. const [stackView, setStackView] = useState<STACK_VIEW>(
  32. data.hasSystemFrames ? STACK_VIEW.APP : STACK_VIEW.FULL
  33. );
  34. const [newestFirst, setNewestFirst] = useState(isStacktraceNewestFirst());
  35. const stackTraceNotFound = !(data.frames ?? []).length;
  36. return (
  37. <EventDataSection
  38. type={EntryType.STACKTRACE}
  39. title={
  40. <CrashTitle
  41. title={t('Stack Trace')}
  42. hideGuide={hideGuide}
  43. newestFirst={newestFirst}
  44. onChange={
  45. !stackTraceNotFound ? value => setNewestFirst(value.newestFirst) : undefined
  46. }
  47. />
  48. }
  49. actions={
  50. !stackTraceNotFound && (
  51. <CrashActions
  52. stackView={stackView}
  53. platform={event.platform}
  54. stacktrace={data}
  55. hasHierarchicalGrouping={hasHierarchicalGrouping}
  56. onChange={value => setStackView(value.stackView ?? stackView)}
  57. />
  58. )
  59. }
  60. wrapTitle={false}
  61. >
  62. {stackTraceNotFound ? (
  63. <NoStackTraceMessage />
  64. ) : (
  65. <CrashContent
  66. projectId={projectId}
  67. event={event}
  68. stackView={stackView}
  69. newestFirst={newestFirst}
  70. stacktrace={data}
  71. stackType={STACK_TYPE.ORIGINAL}
  72. groupingCurrentLevel={groupingCurrentLevel}
  73. hasHierarchicalGrouping={hasHierarchicalGrouping}
  74. />
  75. )}
  76. </EventDataSection>
  77. );
  78. }
  79. export default StacktraceInterface;