All files / app/features/analytics searchAnalyticsContext.tsx

0% Statements 0/10
100% Branches 0/0
0% Functions 0/4
0% Lines 0/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                                                                         
import { createContext, ReactNode, useContext, useMemo } from "react";
 
import { getOrCreateSearchSessionId } from "./searchAttribution";
 
interface SearchAnalyticsValue {
  searchSessionId: string;
  searchQueryId: string;
  pageNumber: number;
}
 
const SearchAnalyticsContext = createContext<SearchAnalyticsValue | null>(null);
 
export function SearchAnalyticsProvider({
  children,
  searchQueryId,
  pageNumber,
}: {
  children: ReactNode;
  searchQueryId: string;
  pageNumber: number;
}) {
  const searchSessionId = useMemo(() => getOrCreateSearchSessionId(), []);
  const value = useMemo(
    () => ({ searchSessionId, searchQueryId, pageNumber }),
    [searchSessionId, searchQueryId, pageNumber],
  );
  return (
    <SearchAnalyticsContext.Provider value={value}>
      {children}
    </SearchAnalyticsContext.Provider>
  );
}
 
export function useSearchAnalytics(): SearchAnalyticsValue | null {
  return useContext(SearchAnalyticsContext);
}