From 4f338566cdaaf3cd026d252aba258af88af2617f Mon Sep 17 00:00:00 2001 From: Chris Bongers Date: Fri, 5 Jun 2026 15:27:18 +0200 Subject: [PATCH] fix: target android specific --- .../src/components/marketing/cta/common.tsx | 17 ++++++++++++++--- packages/shared/src/graphql/marketingCta.ts | 1 + packages/shared/src/hooks/useBoot.ts | 7 ++++++- packages/shared/src/hooks/useMarketingCtas.ts | 3 ++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/shared/src/components/marketing/cta/common.tsx b/packages/shared/src/components/marketing/cta/common.tsx index 2d231219039..716e754deb4 100644 --- a/packages/shared/src/components/marketing/cta/common.tsx +++ b/packages/shared/src/components/marketing/cta/common.tsx @@ -40,6 +40,7 @@ interface MarketingCtaTargets { webapp: boolean; extension: boolean; ios: boolean; + android: boolean; } export interface MarketingCta { @@ -50,19 +51,29 @@ export interface MarketingCta { targets?: MarketingCtaTargets; } -const platformToMarketingCtaTarget = (): keyof MarketingCtaTargets => { +// Android has no runtime bridge like `isIOSNative()`; it's only known via boot +// data (`?android` param), so callers must pass the flag in from boot context. +const platformToMarketingCtaTarget = ( + isAndroidApp = false, +): keyof MarketingCtaTargets => { if (isIOSNative()) { return 'ios'; } + if (isAndroidApp) { + return 'android'; + } if (isExtension) { return 'extension'; } return 'webapp'; }; -export const isMarketingCtaTarget = (targets: MarketingCtaTargets): boolean => +export const isMarketingCtaTarget = ( + targets: MarketingCtaTargets, + isAndroidApp = false, +): boolean => isNullOrUndefined(targets) || - targets[platformToMarketingCtaTarget()] === true; + targets[platformToMarketingCtaTarget(isAndroidApp)] === true; type HeaderProps = Pick & { onClose?: (e?: React.MouseEvent | React.KeyboardEvent) => void; diff --git a/packages/shared/src/graphql/marketingCta.ts b/packages/shared/src/graphql/marketingCta.ts index a51fc7d43e3..bba7d8947e0 100644 --- a/packages/shared/src/graphql/marketingCta.ts +++ b/packages/shared/src/graphql/marketingCta.ts @@ -25,6 +25,7 @@ export const MARKETING_CTAS_BY_VARIANT_QUERY = gql` webapp extension ios + android } } } diff --git a/packages/shared/src/hooks/useBoot.ts b/packages/shared/src/hooks/useBoot.ts index 1ced7ace25a..03a5a4dfdad 100644 --- a/packages/shared/src/hooks/useBoot.ts +++ b/packages/shared/src/hooks/useBoot.ts @@ -85,7 +85,12 @@ export const useBoot = (): UseBoot => { return null; } - if (isMarketingCtaTarget(bootData?.marketingCta?.targets) === false) { + if ( + isMarketingCtaTarget( + bootData?.marketingCta?.targets, + bootData?.isAndroidApp, + ) === false + ) { return null; } diff --git a/packages/shared/src/hooks/useMarketingCtas.ts b/packages/shared/src/hooks/useMarketingCtas.ts index 232f136866a..8ac7c526144 100644 --- a/packages/shared/src/hooks/useMarketingCtas.ts +++ b/packages/shared/src/hooks/useMarketingCtas.ts @@ -54,7 +54,8 @@ export function useMarketingCtas( }); const targetedCtas = (data ?? []).filter( - (cta) => !cta.targets || isMarketingCtaTarget(cta.targets), + (cta) => + !cta.targets || isMarketingCtaTarget(cta.targets, bootData?.isAndroidApp), ); const dismissMutation = useMutation({