index.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {Fragment} from 'react';
  2. import ContextBlock from 'sentry/components/events/contexts/contextBlock';
  3. import type {DeviceContext, Event} from 'sentry/types/event';
  4. import {
  5. getContextMeta,
  6. getKnownData,
  7. getKnownStructuredData,
  8. getUnknownData,
  9. } from '../utils';
  10. import {
  11. deviceKnownDataValues,
  12. getDeviceKnownDataDetails,
  13. } from './getDeviceKnownDataDetails';
  14. import {getInferredData} from './utils';
  15. type Props = {
  16. data: DeviceContext;
  17. event: Event;
  18. meta?: Record<string, any>;
  19. };
  20. const deviceIgnoredDataValues = [];
  21. export function getKnownDeviceContextData({data, event, meta}: Props) {
  22. const inferredData = getInferredData(data);
  23. return getKnownData<DeviceContext, (typeof deviceKnownDataValues)[number]>({
  24. data: inferredData,
  25. meta,
  26. knownDataTypes: deviceKnownDataValues,
  27. onGetKnownDataDetails: v => getDeviceKnownDataDetails({...v, event}),
  28. }).map(v => ({
  29. ...v,
  30. subjectDataTestId: `device-context-${v.key.toLowerCase()}-value`,
  31. }));
  32. }
  33. export function getUnknownDeviceContextData({data, meta}: Pick<Props, 'data' | 'meta'>) {
  34. const inferredData = getInferredData(data);
  35. return getUnknownData({
  36. allData: inferredData,
  37. knownKeys: [...deviceKnownDataValues, ...deviceIgnoredDataValues],
  38. meta,
  39. });
  40. }
  41. export function DeviceEventContext({data, event, meta: propsMeta}: Props) {
  42. const meta = propsMeta ?? getContextMeta(event, 'device');
  43. const knownData = getKnownDeviceContextData({data, event, meta});
  44. const knownStructuredData = getKnownStructuredData(knownData, meta);
  45. const unknownData = getUnknownDeviceContextData({data, meta});
  46. return (
  47. <Fragment>
  48. <ContextBlock data={knownStructuredData} />
  49. <ContextBlock data={unknownData} />
  50. </Fragment>
  51. );
  52. }