releasesSortOptions.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import styled from '@emotion/styled';
  2. import {t} from 'sentry/locale';
  3. import {ReleasesDisplayOption} from './releasesDisplayOptions';
  4. import ReleasesDropdown from './releasesDropdown';
  5. export enum ReleasesSortOption {
  6. CRASH_FREE_USERS = 'crash_free_users',
  7. CRASH_FREE_SESSIONS = 'crash_free_sessions',
  8. USERS_24_HOURS = 'users_24h',
  9. SESSIONS_24_HOURS = 'sessions_24h',
  10. SESSIONS = 'sessions',
  11. DATE = 'date',
  12. BUILD = 'build',
  13. SEMVER = 'semver',
  14. ADOPTION = 'adoption',
  15. }
  16. type Props = {
  17. environments: string[];
  18. onSelect: (key: string) => void;
  19. selected: ReleasesSortOption;
  20. selectedDisplay: ReleasesDisplayOption;
  21. };
  22. function ReleasesSortOptions({selected, selectedDisplay, onSelect, environments}: Props) {
  23. const sortOptions = {
  24. [ReleasesSortOption.DATE]: {label: t('Date Created')},
  25. [ReleasesSortOption.SESSIONS]: {label: t('Total Sessions')},
  26. ...(selectedDisplay === ReleasesDisplayOption.USERS
  27. ? {
  28. [ReleasesSortOption.USERS_24_HOURS]: {label: t('Active Users')},
  29. [ReleasesSortOption.CRASH_FREE_USERS]: {label: t('Crash Free Users')},
  30. }
  31. : {
  32. [ReleasesSortOption.SESSIONS_24_HOURS]: {label: t('Active Sessions')},
  33. [ReleasesSortOption.CRASH_FREE_SESSIONS]: {label: t('Crash Free Sessions')},
  34. }),
  35. [ReleasesSortOption.BUILD]: {label: t('Build Number')},
  36. [ReleasesSortOption.SEMVER]: {label: t('Semantic Version')},
  37. } as React.ComponentProps<typeof ReleasesDropdown>['options'];
  38. const isDisabled = environments.length !== 1;
  39. sortOptions[ReleasesSortOption.ADOPTION] = {
  40. label: t('Date Adopted'),
  41. disabled: isDisabled,
  42. tooltip: isDisabled
  43. ? t('Select one environment to use this sort option.')
  44. : undefined,
  45. };
  46. return (
  47. <StyledReleasesDropdown
  48. label={t('Sort By')}
  49. options={sortOptions}
  50. selected={selected}
  51. onSelect={onSelect}
  52. />
  53. );
  54. }
  55. export default ReleasesSortOptions;
  56. const StyledReleasesDropdown = styled(ReleasesDropdown)`
  57. z-index: 2;
  58. @media (max-width: ${p => p.theme.breakpoints.large}) {
  59. order: 2;
  60. }
  61. `;