mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
69 lines
1.8 KiB
TypeScript
69 lines
1.8 KiB
TypeScript
import {createContext, useMemo} from 'react';
|
|
import type {RouteContextInterface} from 'react-router';
|
|
|
|
import HookStore from 'sentry/stores/hookStore';
|
|
import type {Organization} from 'sentry/types';
|
|
|
|
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>
|
|
);
|
|
}
|