focusTabs.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import queryString from 'query-string';
  2. import ListLink from 'sentry/components/links/listLink';
  3. import ScrollableTabs from 'sentry/components/replays/scrollableTabs';
  4. import {t} from 'sentry/locale';
  5. import trackAdvancedAnalyticsEvent from 'sentry/utils/analytics/trackAdvancedAnalyticsEvent';
  6. import useActiveReplayTab, {TabKey} from 'sentry/utils/replays/hooks/useActiveReplayTab';
  7. import {useLocation} from 'sentry/utils/useLocation';
  8. import useOrganization from 'sentry/utils/useOrganization';
  9. const ReplayTabs: Record<TabKey, string> = {
  10. [TabKey.console]: t('Console'),
  11. [TabKey.network]: t('Network'),
  12. [TabKey.dom]: t('DOM Events'),
  13. [TabKey.issues]: t('Issues'),
  14. [TabKey.memory]: t('Memory'),
  15. [TabKey.trace]: t('Trace'),
  16. };
  17. type Props = {
  18. className?: string;
  19. };
  20. function FocusTabs({className}: Props) {
  21. const organization = useOrganization();
  22. const {pathname, query} = useLocation();
  23. const {getActiveTab, setActiveTab} = useActiveReplayTab();
  24. const activeTab = getActiveTab();
  25. return (
  26. <ScrollableTabs className={className} underlined>
  27. {Object.entries(ReplayTabs).map(([tab, label]) => (
  28. <ListLink
  29. key={tab}
  30. isActive={() => tab === activeTab}
  31. to={`${pathname}?${queryString.stringify({...query, t_main: tab})}`}
  32. onClick={e => {
  33. e.preventDefault();
  34. setActiveTab(tab);
  35. trackAdvancedAnalyticsEvent('replay.details-tab-changed', {
  36. tab,
  37. organization,
  38. });
  39. }}
  40. >
  41. {label}
  42. </ListLink>
  43. ))}
  44. </ScrollableTabs>
  45. );
  46. }
  47. export default FocusTabs;