contextSummaryOS.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import styled from '@emotion/styled';
  2. import {AnnotatedText} from 'sentry/components/events/meta/annotatedText';
  3. import TextOverflow from 'sentry/components/textOverflow';
  4. import {t} from 'sentry/locale';
  5. import {space} from 'sentry/styles/space';
  6. import {Meta} from 'sentry/types';
  7. import {defined} from 'sentry/utils';
  8. import ContextSummaryNoSummary from './contextSummaryNoSummary';
  9. import Item from './item';
  10. import {ContextItemProps} from './types';
  11. import {generateIconName} from './utils';
  12. type Data = {
  13. name: string | boolean;
  14. kernel_version?: string;
  15. version?: string | boolean;
  16. };
  17. type VersionElement = {
  18. subject: string;
  19. value: string;
  20. meta?: Meta;
  21. };
  22. type Props = ContextItemProps<Data, 'os' | 'client_os'>;
  23. export function ContextSummaryOS({data, meta}: Props) {
  24. if (Object.keys(data).length === 0) {
  25. return <ContextSummaryNoSummary title={t('Unknown OS')} />;
  26. }
  27. const getVersionElement = (): VersionElement => {
  28. if (defined(data.version) && typeof data.version === 'string') {
  29. return {
  30. subject: t('Version:'),
  31. value: data.version,
  32. meta: meta.version?.[''],
  33. };
  34. }
  35. if (defined(data.kernel_version)) {
  36. return {
  37. subject: t('Kernel:'),
  38. value: data.kernel_version,
  39. meta: meta.kernel_version?.[''],
  40. };
  41. }
  42. return {
  43. subject: t('Version:'),
  44. value: t('Unknown'),
  45. };
  46. };
  47. const versionElement = getVersionElement();
  48. return (
  49. <Item icon={generateIconName(data.name)}>
  50. <h3>
  51. <AnnotatedText value={data.name} meta={meta.name?.['']} />
  52. </h3>
  53. <TextOverflow isParagraph data-test-id="context-sub-title">
  54. <Subject>{versionElement.subject}</Subject>
  55. <AnnotatedText value={versionElement.value} meta={versionElement.meta} />
  56. </TextOverflow>
  57. </Item>
  58. );
  59. }
  60. const Subject = styled('strong')`
  61. margin-right: ${space(0.5)};
  62. `;