[Statsig] Fix exposure logging for reduced onboarding (#4131)

* Add dangerouslyDisableExposureLogging option

* Rename onboarding gate to v2

* Disable exposure logging for onboarding in PostFeed query
zio/stable
dan 2024-05-21 00:17:57 +01:00 committed by GitHub
parent 516eb69637
commit 4fa92d7a49
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 29 additions and 14 deletions

View File

@ -4,7 +4,7 @@ export type Gate =
| 'disable_min_shell_on_foregrounding_v3'
| 'disable_poll_on_discover_v2'
| 'dms'
| 'reduced_onboarding_and_home_algo'
| 'reduced_onboarding_and_home_algo_v2'
| 'request_notifications_permission_after_onboarding'
| 'show_follow_back_label_v2'
| 'start_session_with_following_v2'

View File

@ -108,20 +108,29 @@ export function logEvent<E extends keyof LogEvents>(
// Our own cache ensures consistent evaluation within a single session.
const GateCache = React.createContext<Map<string, boolean> | null>(null)
export function useGate(): (gateName: Gate) => boolean {
type GateOptions = {
dangerouslyDisableExposureLogging?: boolean
}
export function useGate(): (gateName: Gate, options?: GateOptions) => boolean {
const cache = React.useContext(GateCache)
if (!cache) {
throw Error('useGate() cannot be called outside StatsigProvider.')
}
const gate = React.useCallback(
(gateName: Gate): boolean => {
(gateName: Gate, options: GateOptions = {}): boolean => {
const cachedValue = cache.get(gateName)
if (cachedValue !== undefined) {
return cachedValue
}
const value = Statsig.initializeCalled()
? Statsig.checkGate(gateName)
: false
let value = false
if (Statsig.initializeCalled()) {
if (options.dangerouslyDisableExposureLogging) {
value = Statsig.checkGateWithExposureLoggingDisabled(gateName)
} else {
value = Statsig.checkGate(gateName)
}
}
cache.set(gateName, value)
return value
},

View File

@ -83,7 +83,7 @@ export function StepFinished() {
* selected in onboarding and therefore we don't need to run this
* code (which would overwrite the other feeds already set).
*/
if (!gate('reduced_onboarding_and_home_algo')) {
if (!gate('reduced_onboarding_and_home_algo_v2')) {
const otherFeeds = selectedFeeds.length
? selectedFeeds.map(f => ({
type: 'feed',
@ -120,7 +120,7 @@ export function StepFinished() {
})(),
(async () => {
if (!gate('reduced_onboarding_and_home_algo')) return
if (!gate('reduced_onboarding_and_home_algo_v2')) return
const {imageUri, imageMime} = profileStepResults
if (imageUri && imageMime) {

View File

@ -134,7 +134,7 @@ export function StepInterests() {
}, [track])
React.useEffect(() => {
if (!gate('reduced_onboarding_and_home_algo')) {
if (!gate('reduced_onboarding_and_home_algo_v2')) {
requestNotificationsPermission('StartOnboarding')
}
}, [gate, requestNotificationsPermission])

View File

@ -94,7 +94,7 @@ export function StepProfile() {
React.useEffect(() => {
// We have an experiment running for redueced onboarding, where this screen shows up as the first in onboarding.
// We only want to request permissions when that gate is actually active to prevent pollution
if (gate('reduced_onboarding_and_home_algo')) {
if (gate('reduced_onboarding_and_home_algo_v2')) {
requestNotificationsPermission('StartOnboarding')
}
}, [gate, requestNotificationsPermission])

View File

@ -24,7 +24,7 @@ import {Portal} from '#/components/Portal'
export function Onboarding() {
const {_} = useLingui()
const gate = useGate()
const isReducedOnboardingEnabled = gate('reduced_onboarding_and_home_algo')
const isReducedOnboardingEnabled = gate('reduced_onboarding_and_home_algo_v2')
const [state, dispatch] = React.useReducer(
isReducedOnboardingEnabled ? reducerReduced : reducer,
isReducedOnboardingEnabled ? {...initialStateReduced} : {...initialState},

View File

@ -152,7 +152,13 @@ export function usePostFeedQuery(
feedTuners,
userInterests, // Not in the query key because they don't change.
getAgent,
useBaseFollowingFeed: gate('reduced_onboarding_and_home_algo'),
useBaseFollowingFeed: gate(
'reduced_onboarding_and_home_algo_v2',
{
// If you're not already in this experiment, we don't want to expose you to it now.
dangerouslyDisableExposureLogging: true,
},
),
}),
cursor: undefined,
}

View File

@ -112,7 +112,7 @@ export function TestCtrls() {
testID="e2eStartOnboarding"
onPress={() => {
// TODO remove when experiment is over
setGate('reduced_onboarding_and_home_algo', true)
setGate('reduced_onboarding_and_home_algo_v2', true)
onboardingDispatch({type: 'start'})
}}
accessibilityRole="button"
@ -123,7 +123,7 @@ export function TestCtrls() {
testID="e2eStartLongboarding"
onPress={() => {
// TODO remove when experiment is over
setGate('reduced_onboarding_and_home_algo', false)
setGate('reduced_onboarding_and_home_algo_v2', false)
onboardingDispatch({type: 'start'})
}}
accessibilityRole="button"