actionCategory.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {memo} from 'react';
  2. import styled from '@emotion/styled';
  3. import Tooltip from 'sentry/components/tooltip';
  4. import {t} from 'sentry/locale';
  5. import {BreadcrumbType, Crumb} from 'sentry/types/breadcrumbs';
  6. type Props = {
  7. action: Crumb;
  8. };
  9. type ActionCategoryInfo = {
  10. description: string;
  11. title: string;
  12. };
  13. function getActionCategoryInfo(crumb: Crumb): ActionCategoryInfo {
  14. switch (crumb.type) {
  15. case BreadcrumbType.USER:
  16. case BreadcrumbType.UI:
  17. return {
  18. title: t('UI Click'),
  19. description: `${crumb.category}: ${crumb.message}`,
  20. };
  21. case BreadcrumbType.NAVIGATION:
  22. return {
  23. title: t('Navigation'),
  24. description: `${crumb.category}: ${crumb.data?.from ?? ''} => ${
  25. crumb.data?.to ?? ''
  26. }`,
  27. };
  28. case BreadcrumbType.ERROR:
  29. return {
  30. title: t('Error'),
  31. description: `${crumb.data?.type}: ${crumb.data?.value}`,
  32. };
  33. case BreadcrumbType.INIT:
  34. return {
  35. title: t('Replay Start'),
  36. description: crumb.data?.url,
  37. };
  38. default:
  39. return {
  40. title: t('Default'),
  41. description: '',
  42. };
  43. }
  44. }
  45. const ActionCategory = memo(({action}: Props) => {
  46. const {title, description} = getActionCategoryInfo(action);
  47. return (
  48. <Tooltip title={description} disabled={!description} skipWrapper disableForVisualTest>
  49. <Value>{title}</Value>
  50. </Tooltip>
  51. );
  52. });
  53. const Value = styled('div')`
  54. color: ${p => p.theme.headingColor};
  55. font-size: ${p => p.theme.fontSizeMedium};
  56. font-weight: 400;
  57. text-transform: capitalize;
  58. `;
  59. export default ActionCategory;