diff --git a/.changeset/gorgeous-days-give.md b/.changeset/gorgeous-days-give.md new file mode 100644 index 000000000..d801dc50b --- /dev/null +++ b/.changeset/gorgeous-days-give.md @@ -0,0 +1,5 @@ +--- +'@guardian/support-dotcom-components': minor +--- + +Add pageId to targeting diff --git a/src/server/api/bannerRouter.ts b/src/server/api/bannerRouter.ts index eaa3ab058..4ffc915be 100644 --- a/src/server/api/bannerRouter.ts +++ b/src/server/api/bannerRouter.ts @@ -9,6 +9,7 @@ import { TestTracking, BannerDesignFromTool, Tracking, + hideSRMessagingForInfoPageIds, } from '../../shared/types'; import { selectAmountsTestVariant } from '../lib/ab'; import { ChannelSwitches } from '../channelSwitches'; @@ -60,6 +61,10 @@ export const buildBannerRouter = ( return {}; } + if (hideSRMessagingForInfoPageIds(targeting)) { + return {}; + } + const selectedTest = selectBannerTest( targeting, getDeviceType(req), diff --git a/src/server/api/epicRouter.ts b/src/server/api/epicRouter.ts index cdb9ef7dc..28c1c295c 100644 --- a/src/server/api/epicRouter.ts +++ b/src/server/api/epicRouter.ts @@ -6,6 +6,7 @@ import { EpicTest, EpicType, EpicVariant, + hideSRMessagingForInfoPageIds, TestTracking, Tracking, WeeklyArticleLog, @@ -83,6 +84,10 @@ export const buildEpicRouter = ( return {}; } + if (hideSRMessagingForInfoPageIds(targeting)) { + return {}; + } + const targetingMvtId = targeting.mvtId || 1; const tests = diff --git a/src/server/api/gutterRouter.ts b/src/server/api/gutterRouter.ts index 2e1ceb634..8918f407a 100644 --- a/src/server/api/gutterRouter.ts +++ b/src/server/api/gutterRouter.ts @@ -8,6 +8,7 @@ import { TestTracking, GutterTargeting, Tracking, + hideSRMessagingForInfoPageIds, } from '../../shared/types'; import { ChannelSwitches } from '../channelSwitches'; import { getDeviceType } from '../lib/deviceType'; @@ -41,6 +42,11 @@ export const buildGutterRouter = ( if (!enableGutterLiveblogs) { return {}; } + + if (hideSRMessagingForInfoPageIds(targeting)) { + return {}; + } + const testSelection = selectGutterTest( targeting, tests.get(), diff --git a/src/shared/types/targeting/banner.ts b/src/shared/types/targeting/banner.ts index a652176c9..fbc4920df 100644 --- a/src/shared/types/targeting/banner.ts +++ b/src/shared/types/targeting/banner.ts @@ -21,6 +21,7 @@ export type BannerTargeting = { isSignedIn: boolean; hasConsented: boolean; abandonedBasket?: AbandonedBasket; + pageId?: string; }; export type BannerPayload = { diff --git a/src/shared/types/targeting/epic.ts b/src/shared/types/targeting/epic.ts index 9216c5c89..4ae13c1d1 100644 --- a/src/shared/types/targeting/epic.ts +++ b/src/shared/types/targeting/epic.ts @@ -25,6 +25,7 @@ export type EpicTargeting = { url?: string; browserId?: string; // Only present if the user has consented to browserId-based targeting isSignedIn?: boolean; + pageId?: string; }; export type EpicPayload = { diff --git a/src/shared/types/targeting/gutter.ts b/src/shared/types/targeting/gutter.ts index 23327421a..a12f93650 100644 --- a/src/shared/types/targeting/gutter.ts +++ b/src/shared/types/targeting/gutter.ts @@ -5,6 +5,7 @@ export interface GutterTargeting { isSignedIn: boolean; tagIds?: string[]; sectionId?: string; + pageId?: string; } export type GutterPayload = { diff --git a/src/shared/types/targeting/shared.ts b/src/shared/types/targeting/shared.ts index 2ddf245b8..9fcae43bc 100644 --- a/src/shared/types/targeting/shared.ts +++ b/src/shared/types/targeting/shared.ts @@ -1,5 +1,8 @@ import { z } from 'zod'; import { purchaseInfoProduct, purchaseInfoUser } from '../purchaseInfo'; +import { BannerTargeting } from './banner'; +import { EpicTargeting } from './epic'; +import { GutterTargeting } from './gutter'; export type TagCounts = { [tag: string]: number; @@ -28,6 +31,19 @@ export interface PurchaseInfo { product: purchaseInfoProduct; } +//The pageIdsOfInterest has the pageIds in which we want to hide the SR messages +export const pageIdsOfInterest = new Set([ + 'info/privacy', + 'info/complaints-and-corrections', + 'about', +]); + +export const hideSRMessagingForInfoPageIds = ( + targeting: BannerTargeting | EpicTargeting | GutterTargeting, +): boolean => { + return targeting.pageId ? pageIdsOfInterest.has(targeting.pageId) : false; +}; + export const abandonedBasketSchema = z.object({ amount: z.union([z.number(), z.literal('other')]), billingPeriod: z.union([z.literal('ONE_OFF'), z.literal('MONTHLY'), z.literal('ANNUAL')]),