quickContextCommitRow.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import styled from '@emotion/styled';
  2. import UserAvatar from 'sentry/components/avatar/userAvatar';
  3. import CommitLink from 'sentry/components/commitLink';
  4. import {CommitRowProps, formatCommitMessage} from 'sentry/components/commitRow';
  5. import ExternalLink from 'sentry/components/links/externalLink';
  6. import PanelItem from 'sentry/components/panels/panelItem';
  7. import TextOverflow from 'sentry/components/textOverflow';
  8. import {Tooltip} from 'sentry/components/tooltip';
  9. import {t, tct} from 'sentry/locale';
  10. import ConfigStore from 'sentry/stores/configStore';
  11. import {space} from 'sentry/styles/space';
  12. function QuickContextCommitRow({commit}: CommitRowProps) {
  13. const user = ConfigStore.get('user');
  14. const isUser = user?.id === commit.author?.id;
  15. const hasPullRequestURL = commit.pullRequest && commit.pullRequest.externalUrl;
  16. const commitMessage = formatCommitMessage(commit.message);
  17. return (
  18. <StyledPanelItem key={commit.id} data-test-id="quick-context-commit-row">
  19. <UserAvatar size={24} user={commit.author} />
  20. <CommitLinks>
  21. {hasPullRequestURL && commit.message && (
  22. <Tooltip containerDisplayMode="inline" showOnlyOnOverflow title={commitMessage}>
  23. <LinkToPullRequest data-test-id="quick-context-commit-row-pr-link">
  24. <ExternalLink href={commit.pullRequest?.externalUrl}>
  25. {commitMessage}
  26. </ExternalLink>
  27. </LinkToPullRequest>
  28. </Tooltip>
  29. )}
  30. <LinkToCommit
  31. hasPrTitle={hasPullRequestURL && commit.message}
  32. data-test-id="quick-context-commit-row-commit-link"
  33. >
  34. {tct('View commit [commitLink] by [author]', {
  35. author: isUser ? t('You') : commit.author?.name ?? t('Unknown author'),
  36. commitLink: (
  37. <CommitLink
  38. inline
  39. showIcon={false}
  40. commitId={commit.id}
  41. repository={commit.repository}
  42. />
  43. ),
  44. })}
  45. </LinkToCommit>
  46. </CommitLinks>
  47. </StyledPanelItem>
  48. );
  49. }
  50. const StyledPanelItem = styled(PanelItem)`
  51. display: flex;
  52. align-items: center;
  53. gap: ${space(1)};
  54. padding: 0;
  55. border: none;
  56. & + & {
  57. margin-top: ${space(1)};
  58. }
  59. `;
  60. const CommitLinks = styled('div')`
  61. flex: 1;
  62. flex-direction: column;
  63. min-width: 0;
  64. `;
  65. const LinkToPullRequest = styled(TextOverflow)`
  66. font-size: ${p => p.theme.fontSizeLarge};
  67. line-height: 1.2;
  68. `;
  69. const LinkToCommit = styled(TextOverflow)<{hasPrTitle: string | null | undefined}>`
  70. font-size: ${p => (p.hasPrTitle ? p.theme.fontSizeSmall : p.theme.fontSizeLarge)};
  71. color: ${p => (p.hasPrTitle ? p.theme.subText : p.theme.textColor)};
  72. line-height: 1.5;
  73. margin: 0;
  74. `;
  75. export {QuickContextCommitRow};