device.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import {t} from 'sentry/locale';
  2. import type {Event} from 'sentry/types/event';
  3. import {isEmptyObject} from 'sentry/utils/object/isEmptyObject';
  4. import {SectionKey} from 'sentry/views/issueDetails/streamline/context';
  5. import {InterimSection} from 'sentry/views/issueDetails/streamline/interimSection';
  6. import KeyValueList from './interfaces/keyValueList';
  7. type Props = {
  8. event: Event;
  9. };
  10. export function EventDevice({event}: Props) {
  11. const data = event.device ?? {};
  12. const extras = Object.entries<any>(data.data ?? {}).map(([key, value]) => ({
  13. key,
  14. value,
  15. subject: key,
  16. isContextData: true,
  17. }));
  18. if (isEmptyObject(event.device)) {
  19. return null;
  20. }
  21. return (
  22. <InterimSection type={SectionKey.DEVICE} title={t('Device')}>
  23. <KeyValueList
  24. shouldSort={false}
  25. data={[
  26. {
  27. key: 'name',
  28. subject: t('Name'),
  29. value: data.name,
  30. },
  31. {
  32. key: 'version',
  33. subject: t('Version'),
  34. value: data.version,
  35. },
  36. {
  37. key: 'build',
  38. subject: t('Build'),
  39. value: data.build,
  40. },
  41. ...extras,
  42. ]}
  43. />
  44. </InterimSection>
  45. );
  46. }