1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import {createContext, useMemo} from 'react';
- import type {RouteContextInterface} from 'react-router';
- import HookStore from 'sentry/stores/hookStore';
- import type {Organization} from 'sentry/types/organization';
- const DEFAULT_CONTEXT = {
- setDisableRouteAnalytics: () => {},
- setRouteAnalyticsParams: () => {},
- setOrganization: () => {},
- setEventNames: () => {},
- previousUrl: '',
- };
- /**
- * This context is used to set analytics params for route based analytics.
- * It is used by multiple different hooks and an HoC, each with
- * slightly different use cases.
- */
- export const RouteAnalyticsContext = createContext<{
- previousUrl: string;
- /**
- * Enable/disable route analytics manually
- * @param disabled - defaults to true
- */
- setDisableRouteAnalytics: (disabled?: boolean) => void;
- setEventNames: (evetKey: string, eventName: string) => void;
- setOrganization: (organization: Organization) => void;
- setRouteAnalyticsParams: (params: Record<string, any>) => void;
- }>(DEFAULT_CONTEXT);
- interface Props extends RouteContextInterface {
- children?: React.ReactNode;
- }
- export default function RouteAnalyticsContextProvider({children, ...props}: Props) {
- const useRouteActivatedHook = HookStore.get('react-hook:route-activated')[0];
- const {
- setDisableRouteAnalytics,
- setRouteAnalyticsParams,
- setOrganization,
- setEventNames,
- previousUrl,
- } = useRouteActivatedHook?.(props) || DEFAULT_CONTEXT;
- const memoizedValue = useMemo(
- () => ({
- setDisableRouteAnalytics,
- setRouteAnalyticsParams,
- setOrganization,
- setEventNames,
- previousUrl,
- }),
- [
- setDisableRouteAnalytics,
- setRouteAnalyticsParams,
- setOrganization,
- setEventNames,
- previousUrl,
- ]
- );
- return (
- <RouteAnalyticsContext.Provider value={memoizedValue}>
- {children}
- </RouteAnalyticsContext.Provider>
- );
- }
|