eventEntry.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import React from 'react';
  2. import Breadcrumbs from 'app/components/events/interfaces/breadcrumbs';
  3. import Csp from 'app/components/events/interfaces/csp';
  4. import DebugMeta from 'app/components/events/interfaces/debugMeta';
  5. import DebugMetaV2 from 'app/components/events/interfaces/debugMeta-v2';
  6. import Exception from 'app/components/events/interfaces/exception';
  7. import Generic from 'app/components/events/interfaces/generic';
  8. import Message from 'app/components/events/interfaces/message';
  9. import Request from 'app/components/events/interfaces/request';
  10. import Spans from 'app/components/events/interfaces/spans';
  11. import Stacktrace from 'app/components/events/interfaces/stacktrace';
  12. import Template from 'app/components/events/interfaces/template';
  13. import Threads from 'app/components/events/interfaces/threads';
  14. import {Group, Organization, Project, SharedViewOrganization} from 'app/types';
  15. import {Entry, EntryType, Event, EventTransaction} from 'app/types/event';
  16. type Props = {
  17. entry: Entry;
  18. projectSlug: Project['slug'];
  19. event: Event;
  20. organization: SharedViewOrganization | Organization;
  21. groupId?: Group['id'];
  22. };
  23. function EventEntry({entry, projectSlug, event, organization, groupId}: Props) {
  24. switch (entry.type) {
  25. case EntryType.EXCEPTION: {
  26. const {data, type} = entry;
  27. return <Exception type={type} event={event} data={data} projectId={projectSlug} />;
  28. }
  29. case EntryType.MESSAGE: {
  30. const {data} = entry;
  31. return <Message data={data} />;
  32. }
  33. case EntryType.REQUEST: {
  34. const {data, type} = entry;
  35. return <Request type={type} event={event} data={data} />;
  36. }
  37. case EntryType.STACKTRACE: {
  38. const {data, type} = entry;
  39. return <Stacktrace type={type} event={event} data={data} projectId={projectSlug} />;
  40. }
  41. case EntryType.TEMPLATE: {
  42. const {data, type} = entry;
  43. return <Template type={type} event={event} data={data} />;
  44. }
  45. case EntryType.CSP: {
  46. const {data} = entry;
  47. return <Csp event={event} data={data} />;
  48. }
  49. case EntryType.EXPECTCT:
  50. case EntryType.EXPECTSTAPLE:
  51. case EntryType.HPKP: {
  52. const {data, type} = entry;
  53. return <Generic type={type} data={data} />;
  54. }
  55. case EntryType.BREADCRUMBS: {
  56. const {data, type} = entry;
  57. return (
  58. <Breadcrumbs
  59. type={type}
  60. data={data}
  61. organization={organization as Organization}
  62. event={event}
  63. />
  64. );
  65. }
  66. case EntryType.THREADS: {
  67. const {data, type} = entry;
  68. return <Threads type={type} event={event} data={data} projectId={projectSlug} />;
  69. }
  70. case EntryType.DEBUGMETA:
  71. const {data} = entry;
  72. const hasImagesLoadedV2Feature = !!organization.features?.includes(
  73. 'images-loaded-v2'
  74. );
  75. if (hasImagesLoadedV2Feature) {
  76. return (
  77. <DebugMetaV2
  78. event={event}
  79. projectId={projectSlug}
  80. groupId={groupId}
  81. organization={organization as Organization}
  82. data={data as React.ComponentProps<typeof DebugMetaV2>['data']}
  83. />
  84. );
  85. }
  86. return (
  87. <DebugMeta
  88. event={event}
  89. projectId={projectSlug}
  90. organization={organization as Organization}
  91. data={data}
  92. />
  93. );
  94. case EntryType.SPANS:
  95. return (
  96. <Spans
  97. event={event as EventTransaction}
  98. organization={organization as Organization}
  99. />
  100. );
  101. default:
  102. // this should not happen
  103. /*eslint no-console:0*/
  104. window.console &&
  105. console.error &&
  106. console.error('Unregistered interface: ' + (entry as any).type);
  107. return null;
  108. }
  109. }
  110. export default EventEntry;