pageTimeRangeSelector.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import {useState} from 'react';
  2. import styled from '@emotion/styled';
  3. import TimeRangeSelector from 'sentry/components/organizations/timeRangeSelector';
  4. import {Panel} from 'sentry/components/panels';
  5. import {DEFAULT_RELATIVE_PERIODS} from 'sentry/constants';
  6. import {t} from 'sentry/locale';
  7. import space from 'sentry/styles/space';
  8. type Props = React.ComponentProps<typeof TimeRangeSelector> & {
  9. className?: string;
  10. };
  11. function PageTimeRangeSelector({className, ...props}: Props) {
  12. const [isCalendarOpen, setIsCalendarOpen] = useState(false);
  13. return (
  14. <DropdownDate className={className} isCalendarOpen={isCalendarOpen}>
  15. <TimeRangeSelector
  16. key={`period:${props.relative}-start:${props.start}-end:${props.end}-utc:${props.utc}-defaultPeriod:${props.defaultPeriod}`}
  17. label={<DropdownLabel>{t('Date Range:')}</DropdownLabel>}
  18. onToggleSelector={isOpen => setIsCalendarOpen(isOpen)}
  19. relativeOptions={DEFAULT_RELATIVE_PERIODS}
  20. {...props}
  21. />
  22. </DropdownDate>
  23. );
  24. }
  25. const DropdownDate = styled(Panel)<{isCalendarOpen: boolean}>`
  26. display: flex;
  27. justify-content: center;
  28. align-items: center;
  29. height: 42px;
  30. background: ${p => p.theme.background};
  31. border: 1px solid ${p => p.theme.border};
  32. border-radius: ${p =>
  33. p.isCalendarOpen
  34. ? `${p.theme.borderRadius} ${p.theme.borderRadius} 0 0`
  35. : p.theme.borderRadius};
  36. padding: 0;
  37. margin: 0;
  38. font-size: ${p => p.theme.fontSizeMedium};
  39. color: ${p => p.theme.textColor};
  40. /* TimeRangeRoot in TimeRangeSelector */
  41. > div {
  42. width: 100%;
  43. align-self: stretch;
  44. }
  45. /* StyledItemHeader used to show selected value of TimeRangeSelector */
  46. > div > div:first-child {
  47. padding: 0 ${space(2)};
  48. }
  49. /* Menu that dropdowns from TimeRangeSelector */
  50. > div > div:last-child {
  51. /* Remove awkward 1px width difference on dropdown due to border */
  52. box-sizing: content-box;
  53. font-size: 1em;
  54. }
  55. `;
  56. const DropdownLabel = styled('span')`
  57. text-align: left;
  58. font-weight: 600;
  59. color: ${p => p.theme.textColor};
  60. > span:last-child {
  61. font-weight: 400;
  62. }
  63. `;
  64. export default PageTimeRangeSelector;