diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts index 3767ec1e5d..290e61d7d6 100644 --- a/src/lib/statsig/gates.ts +++ b/src/lib/statsig/gates.ts @@ -3,3 +3,4 @@ export type Gate = | 'debug_show_feedcontext' // DISABLED DUE TO EME | 'post_feed_lang_window' // DISABLED DUE TO EME | 'remove_show_latest_button' + | 'trending_topics_beta' diff --git a/src/state/trending-config.tsx b/src/state/trending-config.tsx index a1845f0de4..470526d2cf 100644 --- a/src/state/trending-config.tsx +++ b/src/state/trending-config.tsx @@ -1,5 +1,6 @@ import React from 'react' +import {useGate} from '#/lib/statsig/statsig' import {useServiceConfigQuery} from '#/state/queries/service-config' import {device} from '#/storage' @@ -12,19 +13,40 @@ const Context = React.createContext({ }) export function Provider({children}: React.PropsWithChildren<{}>) { + const gate = useGate() // refetches at most every minute const {data: config, isLoading: isInitialLoad} = useServiceConfigQuery() const ctx = React.useMemo(() => { - // previously cached value + /* + * While loading, use cached value + */ const cachedEnabled = device.get(['trendingBetaEnabled']) if (isInitialLoad) { return {enabled: Boolean(cachedEnabled)} } + + /* + * Doing an extra check here to reduce hits to statsig. If it's disabled on + * the server, we can exit early. + */ const enabled = Boolean(config?.topicsEnabled) + if (!enabled) { + // cache for next reload + device.set(['trendingBetaEnabled'], enabled) + return {enabled: false} + } + + /* + * Service is enabled, but also check statsig in case we're rolling back. + */ + const gateEnabled = gate('trending_topics_beta') + const _enabled = enabled && gateEnabled + // update cache - device.set(['trendingBetaEnabled'], enabled) - return {enabled} - }, [isInitialLoad, config]) + device.set(['trendingBetaEnabled'], _enabled) + + return {enabled: _enabled} + }, [isInitialLoad, config, gate]) return {children} }