123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import {useCallback} from 'react';
- import PreferencesStore from 'sentry/stores/preferencesStore';
- import {useLegacyStore} from 'sentry/stores/useLegacyStore';
- import trackAdvancedAnalyticsEvent from 'sentry/utils/analytics/trackAdvancedAnalyticsEvent';
- import useOrganization from 'sentry/utils/useOrganization';
- import useUrlParams from 'sentry/utils/useUrlParams';
- import {getDefaultLayout} from 'sentry/views/replays/detail/layout/utils';
- export enum LayoutKey {
- /**
- * ### Top
- *┌────────────────────┐
- *│ Timeline │
- *├───────────┬────────┤
- *│ Details > Crumbs │
- *│ > │
- *│ > |
- *│ > │
- *│ > │
- *└───────────┴────────┘
- */
- no_video = 'no_video',
- /**
- * ### Video Only
- *┌────────────────────┐
- *│ Timeline │
- *├────────────────────┤
- *│ │
- *│ |
- *│ Video │
- *│ │
- *│ │
- *└────────────────────┘
- */
- video_only = 'video_only',
- /**
- * ### Topbar
- *┌────────────────────┐
- *│ Timeline │
- *├───────────┬────────┤
- *│ Video │ Crumbs │
- *│ │ │
- *├^^^^^^^^^^^^^^^^^^^^┤
- *│ Details │
- *│ │
- *└────────────────────┘
- */
- topbar = 'topbar',
- /**
- * ### Sidebar Left
- * ┌───────────────────┐
- * │ Timeline │
- * ├────────┬──────────┤
- * │ Video > Details │
- * │ > │
- * │^^^^^^^ > |
- * │ Crumbs > │
- * │ Tabs > │
- * └────────┴──────────┘
- */
- sidebar_left = 'sidebar_left',
- }
- function isLayout(val: string): val is LayoutKey {
- return val in LayoutKey;
- }
- function useActiveReplayTab() {
- const collapsed = !!useLegacyStore(PreferencesStore).collapsed;
- const defaultLayout = getDefaultLayout(collapsed);
- const organization = useOrganization();
- const {getParamValue, setParamValue} = useUrlParams('l_page', defaultLayout);
- const paramValue = getParamValue();
- return {
- getLayout: useCallback(
- (): LayoutKey =>
- isLayout(paramValue || '') ? (paramValue as LayoutKey) : defaultLayout,
- [defaultLayout, paramValue]
- ),
- setLayout: useCallback(
- (value: string) => {
- const chosenLayout = isLayout(value) ? value : defaultLayout;
- setParamValue(chosenLayout);
- trackAdvancedAnalyticsEvent('replay.details-layout-changed', {
- organization,
- default_layout: defaultLayout,
- chosen_layout: chosenLayout,
- });
- },
- [organization, defaultLayout, setParamValue]
- ),
- };
- }
- export default useActiveReplayTab;
|