diff --git a/app/config/feature-flags-context.tsx b/app/config/feature-flags-context.tsx index 335467f48..54fe0dc0b 100644 --- a/app/config/feature-flags-context.tsx +++ b/app/config/feature-flags-context.tsx @@ -4,21 +4,29 @@ import { useAppConfig } from "@app/hooks" import { useLevel } from "@app/graphql/level-context" const DeviceAccountEnabledKey = "deviceAccountEnabledRestAuth" +const BridgeTopupEnabledKey = "bridgeTopupEnabled" type FeatureFlags = { deviceAccountEnabled: boolean + bridgeTopupEnabled: boolean } type RemoteConfig = { [DeviceAccountEnabledKey]: boolean + [BridgeTopupEnabledKey]: boolean } const defaultRemoteConfig: RemoteConfig = { deviceAccountEnabledRestAuth: true, + // Default OFF: the Bridge/bank-topup GraphQL fields may not exist on the connected + // backend yet. Keep this off until backend support is confirmed, then flip in + // Firebase Remote Config. Gates the bridge queries in TopupCashout / AccountType. + bridgeTopupEnabled: false, } const defaultFeatureFlags = { deviceAccountEnabled: false, + bridgeTopupEnabled: false, } getRemoteConfig().setDefaults(defaultRemoteConfig) @@ -48,7 +56,10 @@ export const FeatureFlagContextProvider: React.FC = ({ const deviceAccountEnabledRestAuth = getRemoteConfig() .getValue(DeviceAccountEnabledKey) .asBoolean() - setRemoteConfig({ deviceAccountEnabledRestAuth }) + const bridgeTopupEnabled = getRemoteConfig() + .getValue(BridgeTopupEnabledKey) + .asBoolean() + setRemoteConfig({ deviceAccountEnabledRestAuth, bridgeTopupEnabled }) } catch (err) { console.error("Error fetching remote config: ", err) } finally { @@ -60,6 +71,8 @@ export const FeatureFlagContextProvider: React.FC = ({ const featureFlags = { deviceAccountEnabled: remoteConfig.deviceAccountEnabledRestAuth || galoyInstance.id === "Local", + bridgeTopupEnabled: + remoteConfig.bridgeTopupEnabled || galoyInstance.id === "Local", } if (!remoteConfigReady && currentLevel === "NonAuth") { diff --git a/app/screens/account-upgrade-flow/AccountType.tsx b/app/screens/account-upgrade-flow/AccountType.tsx index 182ef6713..a75862e29 100644 --- a/app/screens/account-upgrade-flow/AccountType.tsx +++ b/app/screens/account-upgrade-flow/AccountType.tsx @@ -19,6 +19,7 @@ import { ProgressSteps } from "@app/components/account-upgrade-flow" import { useLevel } from "@app/graphql/level-context" import { useActivityIndicator } from "@app/hooks" import { useI18nContext } from "@app/i18n/i18n-react" +import { useFeatureFlags } from "@app/config/feature-flags-context" // store import { useAppDispatch } from "@app/store/redux" @@ -33,18 +34,21 @@ const AccountType: React.FC = ({ navigation }) => { const { LL } = useI18nContext() const { currentLevel } = useLevel() const { toggleActivityIndicator } = useActivityIndicator() + const { bridgeTopupEnabled } = useFeatureFlags() const [bridgeKycModalVisible, setBridgeKycModalVisible] = useState(false) const [initiateBridgeKyc] = useBridgeInitiateKycMutation() const { data: kycStatusData, refetch: refetchKycStatus } = useBridgeKycStatusQuery({ fetchPolicy: "cache-and-network", + skip: !bridgeTopupEnabled, }) useFocusEffect( useCallback(() => { + if (!bridgeTopupEnabled) return refetchKycStatus() - }, [refetchKycStatus]), + }, [bridgeTopupEnabled, refetchKycStatus]), ) const bridgeKycStatus = kycStatusData?.bridgeKycStatus diff --git a/app/screens/topup-cashout-flow/TopupCashout.tsx b/app/screens/topup-cashout-flow/TopupCashout.tsx index acad8ac67..3864e61eb 100644 --- a/app/screens/topup-cashout-flow/TopupCashout.tsx +++ b/app/screens/topup-cashout-flow/TopupCashout.tsx @@ -28,6 +28,7 @@ import { } from "@app/graphql/generated" import { useActivityIndicator } from "@app/hooks" import { useLevel } from "@app/graphql/level-context" +import { useFeatureFlags } from "@app/config/feature-flags-context" type Props = StackScreenProps @@ -37,6 +38,7 @@ const TopupCashout: React.FC = ({ navigation }) => { const { currentLevel } = useLevel() const { colors } = useTheme().theme const { toggleActivityIndicator } = useActivityIndicator() + const { bridgeTopupEnabled } = useFeatureFlags() const [topupModalVisible, setTopupModalVisible] = useState(false) const [settleModalVisible, setSettleModalVisible] = useState(false) @@ -48,17 +50,20 @@ const TopupCashout: React.FC = ({ navigation }) => { const { data: kycStatusData, refetch: refetchKycStatus } = useBridgeKycStatusQuery({ fetchPolicy: "cache-and-network", + skip: !bridgeTopupEnabled, }) const { data: externalAccountsData, refetch: refetchExternalAccounts } = useBridgeExternalAccountsQuery({ fetchPolicy: "cache-and-network", + skip: !bridgeTopupEnabled, }) useFocusEffect( useCallback(() => { + if (!bridgeTopupEnabled) return refetchKycStatus() refetchExternalAccounts() - }, [refetchKycStatus, refetchExternalAccounts]), + }, [bridgeTopupEnabled, refetchKycStatus, refetchExternalAccounts]), ) const onRefresh = useCallback(async () => {