index.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {memo} from 'react';
  2. import styled from '@emotion/styled';
  3. import Highlight from 'sentry/components/highlight';
  4. import Tooltip from 'sentry/components/tooltip';
  5. import {defined} from 'sentry/utils';
  6. import getDynamicText from 'sentry/utils/getDynamicText';
  7. import {getFormattedTimestamp} from './utils';
  8. type Props = {
  9. searchTerm: string;
  10. displayRelativeTime?: boolean;
  11. relativeTime?: string;
  12. timestamp?: string;
  13. };
  14. const Time = memo(function Time({
  15. timestamp,
  16. relativeTime,
  17. displayRelativeTime,
  18. searchTerm,
  19. }: Props) {
  20. if (!(defined(timestamp) && defined(relativeTime))) {
  21. return <div />;
  22. }
  23. const {date, time, displayTime} = getFormattedTimestamp(
  24. timestamp,
  25. relativeTime,
  26. displayRelativeTime
  27. );
  28. return (
  29. <Wrapper>
  30. <Tooltip
  31. title={
  32. <div>
  33. <div>{date}</div>
  34. {time !== '\u2014' && <div>{time}</div>}
  35. </div>
  36. }
  37. containerDisplayMode="inline-flex"
  38. disableForVisualTest
  39. >
  40. {getDynamicText({
  41. value: <Highlight text={searchTerm}>{displayTime}</Highlight>,
  42. fixed: '00:00:00',
  43. })}
  44. </Tooltip>
  45. </Wrapper>
  46. );
  47. });
  48. export default Time;
  49. const Wrapper = styled('div')`
  50. font-size: ${p => p.theme.fontSizeSmall};
  51. color: ${p => p.theme.textColor};
  52. `;