[Statsig] Add test gates and events (#3659)
* [Statsig] Add test gates and events * Better typeszio/stable
parent
30c2c05103
commit
096725110a
|
@ -113,4 +113,14 @@ export type LogEvents = {
|
||||||
| 'ProfileMenu'
|
| 'ProfileMenu'
|
||||||
| 'ProfileHoverCard'
|
| 'ProfileHoverCard'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
'test:all:always': {}
|
||||||
|
'test:all:sometimes': {}
|
||||||
|
'test:all:boosted_by_gate1': {reason: 'base' | 'gate1'}
|
||||||
|
'test:all:boosted_by_gate2': {reason: 'base' | 'gate2'}
|
||||||
|
'test:all:boosted_by_both': {reason: 'base' | 'gate1' | 'gate2'}
|
||||||
|
'test:gate1:always': {}
|
||||||
|
'test:gate1:sometimes': {}
|
||||||
|
'test:gate2:always': {}
|
||||||
|
'test:gate2:sometimes': {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,6 @@ export type Gate =
|
||||||
| 'hide_vertical_scroll_indicators'
|
| 'hide_vertical_scroll_indicators'
|
||||||
| 'show_follow_back_label_v2'
|
| 'show_follow_back_label_v2'
|
||||||
| 'start_session_with_following_v2'
|
| 'start_session_with_following_v2'
|
||||||
|
| 'test_gate_1'
|
||||||
|
| 'test_gate_2'
|
||||||
| 'use_new_suggestions_endpoint'
|
| 'use_new_suggestions_endpoint'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, {useMemo} from 'react'
|
import React, {useEffect, useMemo} from 'react'
|
||||||
import {StyleSheet} from 'react-native'
|
import {StyleSheet} from 'react-native'
|
||||||
import {
|
import {
|
||||||
AppBskyActorDefs,
|
AppBskyActorDefs,
|
||||||
|
@ -11,6 +11,7 @@ import {useLingui} from '@lingui/react'
|
||||||
import {useFocusEffect} from '@react-navigation/native'
|
import {useFocusEffect} from '@react-navigation/native'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
|
import {logEvent, useGate} from '#/lib/statsig/statsig'
|
||||||
import {cleanError} from '#/lib/strings/errors'
|
import {cleanError} from '#/lib/strings/errors'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {useLabelerInfoQuery} from '#/state/queries/labeler'
|
import {useLabelerInfoQuery} from '#/state/queries/labeler'
|
||||||
|
@ -465,6 +466,7 @@ function ProfileScreenLoaded({
|
||||||
accessibilityHint=""
|
accessibilityHint=""
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
<TestGates />
|
||||||
</ScreenHider>
|
</ScreenHider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -522,3 +524,77 @@ const styles = StyleSheet.create({
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const shouldExposeToGate2 = Math.random() < 0.2
|
||||||
|
|
||||||
|
// --- Temporary: we're testing our Statsig setup ---
|
||||||
|
let TestGates = React.memo(function TestGates() {
|
||||||
|
const gate = useGate()
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
logEvent('test:all:always', {})
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
logEvent('test:all:sometimes', {})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1) {
|
||||||
|
logEvent('test:all:boosted_by_gate1', {
|
||||||
|
reason: 'base',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1) {
|
||||||
|
logEvent('test:all:boosted_by_gate2', {
|
||||||
|
reason: 'base',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.1) {
|
||||||
|
logEvent('test:all:boosted_by_both', {
|
||||||
|
reason: 'base',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return [
|
||||||
|
gate('test_gate_1') ? <TestGate1 /> : null,
|
||||||
|
shouldExposeToGate2 && gate('test_gate_2') ? <TestGate2 /> : null,
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
function TestGate1() {
|
||||||
|
useEffect(() => {
|
||||||
|
logEvent('test:gate1:always', {})
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
logEvent('test:gate1:sometimes', {})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.5) {
|
||||||
|
logEvent('test:all:boosted_by_gate1', {
|
||||||
|
reason: 'gate1',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.5) {
|
||||||
|
logEvent('test:all:boosted_by_both', {
|
||||||
|
reason: 'gate1',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
function TestGate2() {
|
||||||
|
useEffect(() => {
|
||||||
|
logEvent('test:gate2:always', {})
|
||||||
|
if (Math.random() < 0.2) {
|
||||||
|
logEvent('test:gate2:sometimes', {})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.5) {
|
||||||
|
logEvent('test:all:boosted_by_gate2', {
|
||||||
|
reason: 'gate2',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.5) {
|
||||||
|
logEvent('test:all:boosted_by_both', {
|
||||||
|
reason: 'gate2',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue