packageData.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import ClippedBox from 'sentry/components/clippedBox';
  2. import ErrorBoundary from 'sentry/components/errorBoundary';
  3. import KeyValueList from 'sentry/components/events/interfaces/keyValueList';
  4. import {t} from 'sentry/locale';
  5. import type {Event} from 'sentry/types/event';
  6. import {isEmptyObject} from 'sentry/utils/object/isEmptyObject';
  7. import {SectionKey} from 'sentry/views/issueDetails/streamline/context';
  8. import {InterimSection} from 'sentry/views/issueDetails/streamline/interimSection';
  9. type Props = {
  10. event: Event;
  11. };
  12. export function EventPackageData({event}: Props) {
  13. let longKeys: boolean, title: string;
  14. const packages = Object.entries(event.packages || {}).map(([key, value]) => ({
  15. key,
  16. value,
  17. subject: key,
  18. meta: event._meta?.packages?.[key]?.[''],
  19. }));
  20. switch (event.platform) {
  21. case 'csharp':
  22. longKeys = true;
  23. title = t('Assemblies');
  24. break;
  25. case 'java':
  26. longKeys = true;
  27. title = t('Dependencies');
  28. break;
  29. default:
  30. longKeys = false;
  31. title = t('Packages');
  32. }
  33. if (isEmptyObject(event.packages)) {
  34. return null;
  35. }
  36. return (
  37. <InterimSection title={title} type={SectionKey.PACKAGES}>
  38. <ClippedBox>
  39. <ErrorBoundary mini>
  40. <KeyValueList data={packages} longKeys={longKeys} />
  41. </ErrorBoundary>
  42. </ClippedBox>
  43. </InterimSection>
  44. );
  45. }