diff --git a/packages/shared/src/components/marketingCta/common.tsx b/packages/shared/src/components/marketingCta/common.tsx index 8104ac43f47..26673a260e3 100644 --- a/packages/shared/src/components/marketingCta/common.tsx +++ b/packages/shared/src/components/marketingCta/common.tsx @@ -6,6 +6,7 @@ import { CardTitle } from '../cards/common/Card'; import classed from '../../lib/classed'; import { anchorDefaultRel } from '../../lib/strings'; import { Pill, PillSize } from '../Pill'; +import { isExtension, isIOSNative, isNullOrUndefined } from '../../lib/func'; export type MarketingCtaFlags = { title: string; @@ -30,13 +31,34 @@ export enum MarketingCtaVariant { BriefCard = 'brief_card', } +interface MarketingCtaTargets { + webapp: boolean; + extension: boolean; + ios: boolean; +} + export interface MarketingCta { campaignId: string; createdAt: Date; variant: MarketingCtaVariant; flags: MarketingCtaFlags; + targets?: MarketingCtaTargets; } +const platformToMarketingCtaTarget = (): keyof MarketingCtaTargets => { + if (isIOSNative()) { + return 'ios'; + } + if (isExtension) { + return 'extension'; + } + return 'webapp'; +}; + +export const isMarketingCtaTarget = (targets: MarketingCtaTargets): boolean => + isNullOrUndefined(targets) || + targets[platformToMarketingCtaTarget()] === true; + type HeaderProps = Pick & { onClose?: (e?: React.MouseEvent | React.KeyboardEvent) => void; buttonSize?: ButtonSize; diff --git a/packages/shared/src/hooks/useBoot.ts b/packages/shared/src/hooks/useBoot.ts index 36b47639748..90fddc59846 100644 --- a/packages/shared/src/hooks/useBoot.ts +++ b/packages/shared/src/hooks/useBoot.ts @@ -3,7 +3,10 @@ import { useRouter } from 'next/router'; import { BOOT_QUERY_KEY } from '../contexts/common'; import type { Squad } from '../graphql/sources'; import type { Boot } from '../lib/boot'; -import { MarketingCtaVariant } from '../components/marketingCta/common'; +import { + isMarketingCtaTarget, + MarketingCtaVariant, +} from '../components/marketingCta/common'; import type { MarketingCta } from '../components/marketingCta/common'; import { CLEAR_MARKETING_CTA_MUTATION } from '../graphql/users'; import { gqlClient } from '../graphql/common'; @@ -70,6 +73,10 @@ export const useBoot = (): UseBoot => { return null; } + if (isMarketingCtaTarget(bootData?.marketingCta?.targets) === false) { + return null; + } + return bootData?.marketingCta; };