Commit 23acb3b3 authored by eddie's avatar eddie Committed by GitHub

feat: add statsig feature gate for widget (#6011)

* feat: add statsig feature gate for widget

* feat: move statsig check into featureFlag infra

* fix: move statsig check deeper into feature flag code

* Update src/featureFlags/flags/featureFlags.ts
Co-authored-by: default avatarZach Pomerantz <zzmp@uniswap.org>

* Update src/featureFlags/flags/dummyFeatureGate.ts
Co-authored-by: default avatarZach Pomerantz <zzmp@uniswap.org>

---------
Co-authored-by: default avatarZach Pomerantz <zzmp@uniswap.org>
parent 772416cc
...@@ -3,11 +3,10 @@ import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format' ...@@ -3,11 +3,10 @@ import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
import { Currency } from '@uniswap/sdk-core' import { Currency } from '@uniswap/sdk-core'
import { useWeb3React } from '@web3-react/core' import { useWeb3React } from '@web3-react/core'
import { NATIVE_CHAIN_ID } from 'constants/tokens' import { NATIVE_CHAIN_ID } from 'constants/tokens'
import { FeatureGate } from 'featureFlags/flags/featureFlags' import { useDummyGateEnabled } from 'featureFlags/flags/dummyFeatureGate'
import { CHAIN_ID_TO_BACKEND_NAME } from 'graphql/data/util' import { CHAIN_ID_TO_BACKEND_NAME } from 'graphql/data/util'
import { useStablecoinValue } from 'hooks/useStablecoinPrice' import { useStablecoinValue } from 'hooks/useStablecoinPrice'
import useCurrencyBalance from 'lib/hooks/useCurrencyBalance' import useCurrencyBalance from 'lib/hooks/useCurrencyBalance'
import { useGate } from 'statsig-react'
import styled from 'styled-components/macro' import styled from 'styled-components/macro'
import { StyledInternalLink } from 'theme' import { StyledInternalLink } from 'theme'
...@@ -89,7 +88,7 @@ export default function MobileBalanceSummaryFooter({ token }: { token: Currency ...@@ -89,7 +88,7 @@ export default function MobileBalanceSummaryFooter({ token }: { token: Currency
const formattedBalance = formatCurrencyAmount(balance, NumberType.TokenNonTx) const formattedBalance = formatCurrencyAmount(balance, NumberType.TokenNonTx)
const formattedUsdValue = formatCurrencyAmount(useStablecoinValue(balance), NumberType.FiatTokenStats) const formattedUsdValue = formatCurrencyAmount(useStablecoinValue(balance), NumberType.FiatTokenStats)
const chain = CHAIN_ID_TO_BACKEND_NAME[token.chainId].toLowerCase() const chain = CHAIN_ID_TO_BACKEND_NAME[token.chainId].toLowerCase()
const { value: isDummyGateFlagEnabled } = useGate(FeatureGate.DUMMY) const isDummyGateFlagEnabled = useDummyGateEnabled()
return ( return (
<Wrapper> <Wrapper>
......
import { BaseVariant, FeatureFlag, useBaseFlag } from '../index'
function useDummyGateFlag(): BaseVariant {
return useBaseFlag(FeatureFlag.statsigDummy)
}
export function useDummyGateEnabled(): boolean {
return useDummyGateFlag() === BaseVariant.Enabled
}
/**
* The value here must match the value in the statsig dashboard, if you plan to use statsig.
*/
export enum FeatureFlag { export enum FeatureFlag {
traceJsonRpc = 'traceJsonRpc', traceJsonRpc = 'traceJsonRpc',
permit2 = 'permit2', permit2 = 'permit2',
payWithAnyToken = 'payWithAnyToken', payWithAnyToken = 'payWithAnyToken',
swapWidget = 'swapWidget', swapWidget = 'swap_widget_replacement_enabled',
gqlRouting = 'gqlRouting', gqlRouting = 'gqlRouting',
} statsigDummy = 'web_dummy_gate_amplitude_id',
export enum FeatureGate {
DUMMY = 'web_dummy_gate_amplitude_id',
} }
import { atomWithStorage, useAtomValue, useUpdateAtom } from 'jotai/utils' import { atomWithStorage, useAtomValue, useUpdateAtom } from 'jotai/utils'
import { createContext, ReactNode, useCallback, useContext } from 'react' import { createContext, ReactNode, useCallback, useContext } from 'react'
import { useGate } from 'statsig-react'
export { FeatureFlag } from './flags/featureFlags' export { FeatureFlag } from './flags/featureFlags'
interface FeatureFlagsContextType { interface FeatureFlagsContextType {
...@@ -56,7 +57,12 @@ export enum BaseVariant { ...@@ -56,7 +57,12 @@ export enum BaseVariant {
} }
export function useBaseFlag(flag: string, defaultValue = BaseVariant.Control): BaseVariant { export function useBaseFlag(flag: string, defaultValue = BaseVariant.Control): BaseVariant {
switch (useFeatureFlagsContext().flags[flag]) { const { value: statsigValue } = useGate(flag) // non-existent gates return false
const featureFlagsContext = useFeatureFlagsContext()
if (statsigValue) {
return BaseVariant.Enabled
}
switch (featureFlagsContext.flags[flag]) {
case 'enabled': case 'enabled':
return BaseVariant.Enabled return BaseVariant.Enabled
case 'control': case 'control':
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment