index.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import {Fragment, useCallback, useEffect} from 'react';
  2. import * as Sentry from '@sentry/react';
  3. import {Group} from 'sentry/types';
  4. import {Event} from 'sentry/types/event';
  5. import {objectIsEmpty} from 'sentry/utils';
  6. import {Chunk} from './chunk';
  7. type Props = {
  8. event: Event;
  9. group?: Group;
  10. };
  11. export function EventContexts({event, group}: Props) {
  12. const {user, contexts, sdk} = event;
  13. const {feedback, response, ...otherContexts} = contexts ?? {};
  14. const usingOtel = useCallback(
  15. () => otherContexts.otel !== undefined,
  16. [otherContexts.otel]
  17. );
  18. useEffect(() => {
  19. const transaction = Sentry.getCurrentHub().getScope()?.getTransaction();
  20. if (transaction && usingOtel()) {
  21. transaction.tags.otel_event = true;
  22. transaction.tags.otel_sdk = sdk?.name;
  23. transaction.tags.otel_sdk_version = sdk?.version;
  24. }
  25. }, [usingOtel, sdk]);
  26. return (
  27. <Fragment>
  28. {!objectIsEmpty(response) && (
  29. <Chunk
  30. key="response"
  31. type="response"
  32. alias="response"
  33. group={group}
  34. event={event}
  35. value={response}
  36. />
  37. )}
  38. {!objectIsEmpty(feedback) && (
  39. <Chunk
  40. key="feedback"
  41. type="feedback"
  42. alias="feedback"
  43. group={group}
  44. event={event}
  45. value={feedback}
  46. />
  47. )}
  48. {user && !objectIsEmpty(user) && (
  49. <Chunk
  50. key="user"
  51. type="user"
  52. alias="user"
  53. group={group}
  54. event={event}
  55. value={user}
  56. />
  57. )}
  58. {Object.entries(otherContexts).map(([key, value]) => (
  59. <Chunk
  60. key={key}
  61. type={value?.type ?? ''}
  62. alias={key}
  63. group={group}
  64. event={event}
  65. value={value}
  66. />
  67. ))}
  68. </Fragment>
  69. );
  70. }