Files

39 lines
1.3 KiB
TypeScript

'use client'
import { posthogClient, useConsentState, useFeatureFlags, useSearchParamsShallow } from 'common'
import { useEffect } from 'react'
import { SEARCH_V2_FLAG, type SearchV2Variant } from './constants'
const VARIANTS: SearchV2Variant[] = ['control', 'search-v2-active']
/**
* Reads the `docs-search-v2` PostHog experiment flag.
* Defaults to `'control'` while the flag store is loading or if the flag is unset,
* so an unresolved state always falls back to the current search experience.
*/
export function useSearchV2Variant(): SearchV2Variant {
const { posthog } = useFeatureFlags()
const { hasAccepted } = useConsentState()
const searchParams = useSearchParamsShallow()
const override = searchParams.get(SEARCH_V2_FLAG)
const isOverridden = VARIANTS.includes(override as SearchV2Variant)
const flagValue = posthog[SEARCH_V2_FLAG]
const isFlagResolved = flagValue !== undefined
const flagVariant: SearchV2Variant =
flagValue === 'search-v2-active' ? 'search-v2-active' : 'control'
useEffect(() => {
if (isOverridden || !isFlagResolved) return
posthogClient.captureExperimentExposure(SEARCH_V2_FLAG, { variant: flagVariant }, hasAccepted)
}, [isOverridden, isFlagResolved, flagVariant, hasAccepted])
if (isOverridden) {
return override as SearchV2Variant
}
return flagVariant
}