contextSummaryOS.tsx 2.0 KB

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