feedbackTimestampsTooltip.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import {Fragment} from 'react';
  2. import styled from '@emotion/styled';
  3. import moment from 'moment-timezone';
  4. import AutoSelectText from 'sentry/components/autoSelectText';
  5. import {t} from 'sentry/locale';
  6. import {space} from 'sentry/styles/space';
  7. import type {FeedbackIssue} from 'sentry/utils/feedback/types';
  8. import {useUser} from 'sentry/utils/useUser';
  9. type Props = {
  10. feedbackItem: FeedbackIssue;
  11. };
  12. export default function FeedbackTimestampsTooltip({feedbackItem}: Props) {
  13. const user = useUser();
  14. const options = user?.options ?? {};
  15. const format = options.clock24Hours ? 'HH:mm:ss z' : 'LTS z';
  16. const dateFirstSeen = feedbackItem.firstSeen ? moment(feedbackItem.firstSeen) : null;
  17. const resolvedActivity = feedbackItem.activity.find(
  18. activity => activity.type === 'set_resolved'
  19. );
  20. const dateResolved = resolvedActivity ? moment(resolvedActivity.dateCreated) : null;
  21. return (
  22. <DescriptionList>
  23. <dt>{t('Created')}</dt>
  24. <dd>
  25. {dateFirstSeen ? (
  26. <AutoSelectText>
  27. {dateFirstSeen.format('ll')} {dateFirstSeen.format(format)}
  28. </AutoSelectText>
  29. ) : (
  30. <NotApplicableText>{t('n/a')}</NotApplicableText>
  31. )}
  32. </dd>
  33. {dateResolved && (
  34. <Fragment>
  35. <dt>{t('Resolved')}</dt>
  36. <dd>
  37. <AutoSelectText>
  38. {dateResolved.format('ll')} {dateResolved.format(format)}
  39. </AutoSelectText>
  40. </dd>
  41. </Fragment>
  42. )}
  43. </DescriptionList>
  44. );
  45. }
  46. const DescriptionList = styled('dl')`
  47. display: grid;
  48. grid-template-columns: max-content 1fr;
  49. gap: ${space(0.75)} ${space(1)};
  50. text-align: left;
  51. margin: 0;
  52. white-space: nowrap;
  53. `;
  54. const NotApplicableText = styled('span')`
  55. color: ${p => p.theme.subText};
  56. `;