platformSelector.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import {PlatformIcon} from 'platformicons';
  2. import {Flex} from 'sentry/components/container/flex';
  3. import {SegmentedControl} from 'sentry/components/segmentedControl';
  4. import {t} from 'sentry/locale';
  5. import localStorage from 'sentry/utils/localStorage';
  6. import {decodeScalar} from 'sentry/utils/queryString';
  7. import {useLocation} from 'sentry/utils/useLocation';
  8. import {useNavigate} from 'sentry/utils/useNavigate';
  9. import {
  10. DEFAULT_PLATFORM,
  11. PLATFORM_LOCAL_STORAGE_KEY,
  12. PLATFORM_QUERY_PARAM,
  13. } from 'sentry/views/insights/mobile/common/queries/useCrossPlatformProject';
  14. import {MobileCursors} from 'sentry/views/insights/mobile/screenload/constants';
  15. export function PlatformSelector() {
  16. const navigate = useNavigate();
  17. const {query, pathname} = useLocation();
  18. const platform =
  19. decodeScalar(query[PLATFORM_QUERY_PARAM]) ??
  20. localStorage.getItem(PLATFORM_LOCAL_STORAGE_KEY) ??
  21. DEFAULT_PLATFORM;
  22. return (
  23. <Flex>
  24. <SegmentedControl
  25. size="md"
  26. value={platform}
  27. aria-label={t('Filter platform')}
  28. onChange={val => {
  29. localStorage.setItem(PLATFORM_LOCAL_STORAGE_KEY, val);
  30. navigate({
  31. pathname,
  32. query: {
  33. ...query,
  34. [MobileCursors.SCREENS_TABLE]: undefined,
  35. [PLATFORM_QUERY_PARAM]: val,
  36. },
  37. });
  38. }}
  39. >
  40. <SegmentedControl.Item
  41. key="Android"
  42. aria-label={t('Android')}
  43. icon={<PlatformIcon format="lg" size={28} platform="android" />}
  44. />
  45. <SegmentedControl.Item
  46. key="iOS"
  47. aria-label={t('iOS')}
  48. icon={
  49. <PlatformIcon format="lg" size={28} platform="apple" aria-label={t('iOS')} />
  50. }
  51. />
  52. </SegmentedControl>
  53. </Flex>
  54. );
  55. }