From 9718e295dc46568359ad49370a982486c500507f Mon Sep 17 00:00:00 2001 From: hotinglok Date: Thu, 17 Oct 2024 15:30:52 +0100 Subject: [PATCH 1/2] Initial approach to add analytics --- .../ATIAnalytics/amp/ampAnalyticsJson.ts | 12 ++++++-- src/app/components/ATIAnalytics/amp/index.tsx | 6 +++- .../components/ATIAnalytics/atiUrl/index.ts | 2 ++ src/app/components/ATIAnalytics/index.tsx | 7 +++-- src/app/components/ATIAnalytics/types.ts | 11 +++++++ src/app/components/AmpExperiment/index.tsx | 16 +++++++++- src/app/pages/ArticlePage/ArticlePage.tsx | 6 +++- .../experimentTopStories/helpers.tsx | 30 +++++++++++++++++++ 8 files changed, 83 insertions(+), 7 deletions(-) diff --git a/src/app/components/ATIAnalytics/amp/ampAnalyticsJson.ts b/src/app/components/ATIAnalytics/amp/ampAnalyticsJson.ts index 85f3dbfcf50..f0c5053bcf0 100644 --- a/src/app/components/ATIAnalytics/amp/ampAnalyticsJson.ts +++ b/src/app/components/ATIAnalytics/amp/ampAnalyticsJson.ts @@ -4,7 +4,11 @@ import { ATIAnalyticsProps } from '../types'; -const ampAnalyticsJson = ({ baseUrl, pageviewParams }: ATIAnalyticsProps) => ({ +const ampAnalyticsJson = ({ + baseUrl, + pageviewParams, + eventsParams, +}: ATIAnalyticsProps) => ({ transport: { beacon: false, xhrpost: false, @@ -13,8 +17,12 @@ const ampAnalyticsJson = ({ baseUrl, pageviewParams }: ATIAnalyticsProps) => ({ requests: { base: baseUrl, pageview: '${base}' + pageviewParams, + ...eventsParams?.requests, + }, + triggers: { + trackPageview: { on: 'visible', request: 'pageview' }, + ...eventsParams?.triggers, }, - triggers: { trackPageview: { on: 'visible', request: 'pageview' } }, }); export default ampAnalyticsJson; diff --git a/src/app/components/ATIAnalytics/amp/index.tsx b/src/app/components/ATIAnalytics/amp/index.tsx index d9ed28337d6..fb3222f5cd0 100644 --- a/src/app/components/ATIAnalytics/amp/index.tsx +++ b/src/app/components/ATIAnalytics/amp/index.tsx @@ -12,13 +12,17 @@ const JsonInlinedScript = (data: AMPAnalyticsData) => ( /> ); -const AmpATIAnalytics = ({ pageviewParams }: ATIAnalyticsProps) => { +const AmpATIAnalytics = ({ + pageviewParams, + eventsParams, +}: ATIAnalyticsProps) => { return ( {JsonInlinedScript( getAmpAnalyticsJson({ baseUrl: getEnvConfig().SIMORGH_ATI_BASE_URL, pageviewParams, + eventsParams, }), )} diff --git a/src/app/components/ATIAnalytics/atiUrl/index.ts b/src/app/components/ATIAnalytics/atiUrl/index.ts index 6b2bcda0ab6..6f2ef2a1264 100644 --- a/src/app/components/ATIAnalytics/atiUrl/index.ts +++ b/src/app/components/ATIAnalytics/atiUrl/index.ts @@ -252,6 +252,7 @@ export const buildATIEventTrackUrl = ({ advertiserID, url, detailedPlacement, + variant, }: ATIEventTrackingProps) => { // on AMP, variable substitutions are used in the value and they cannot be // encoded: https://github.com/ampproject/amphtml/blob/master/spec/amp-var-substitutions.md @@ -323,6 +324,7 @@ export const buildATIEventTrackUrl = ({ advertiserID, url, detailedPlacement, + variant, }), wrap: false, disableEncoding: true, diff --git a/src/app/components/ATIAnalytics/index.tsx b/src/app/components/ATIAnalytics/index.tsx index 26dcbf18730..76f1a60cde2 100644 --- a/src/app/components/ATIAnalytics/index.tsx +++ b/src/app/components/ATIAnalytics/index.tsx @@ -6,7 +6,7 @@ import AmpATIAnalytics from './amp'; import { ATIProps } from './types'; import buildATIUrl from './params'; -const ATIAnalytics = ({ data, atiData }: ATIProps) => { +const ATIAnalytics = ({ data, atiData, atiEventsData }: ATIProps) => { const requestContext = useContext(RequestContext); const serviceContext = useContext(ServiceContext); const { isAmp } = requestContext; @@ -23,7 +23,10 @@ const ATIAnalytics = ({ data, atiData }: ATIProps) => { } return isAmp ? ( - + ) : ( ); diff --git a/src/app/components/ATIAnalytics/types.ts b/src/app/components/ATIAnalytics/types.ts index a5f438cec35..125247cb542 100644 --- a/src/app/components/ATIAnalytics/types.ts +++ b/src/app/components/ATIAnalytics/types.ts @@ -91,9 +91,19 @@ export interface ATIConfigurationDetailsProviders { atiData?: ATIData; } +export interface ATIEventsData { + requests?: { + [key: string]: string; + }; + triggers?: { + [key: string]: object; + }; +} + export interface ATIAnalyticsProps { baseUrl?: string; pageviewParams: string; + eventsParams?: ATIEventsData; } export interface ATIEventTrackingProps { @@ -136,4 +146,5 @@ export interface ATIPageTrackingProps { export interface ATIProps { data?: PageData; atiData?: ATIData; + atiEventsData?: ATIEventsData; } diff --git a/src/app/components/AmpExperiment/index.tsx b/src/app/components/AmpExperiment/index.tsx index 54e7d615c95..d2c984e5510 100644 --- a/src/app/components/AmpExperiment/index.tsx +++ b/src/app/components/AmpExperiment/index.tsx @@ -32,7 +32,10 @@ const AmpHead = () => ( ); -const AmpExperiment = ({ experimentConfig }: AmpExperimentProps) => { +const AmpExperiment = ({ + experimentConfig, + analyticsConfig, +}: AmpExperimentProps) => { return ( <> @@ -43,6 +46,17 @@ const AmpExperiment = ({ experimentConfig }: AmpExperimentProps) => { dangerouslySetInnerHTML={{ __html: JSON.stringify(experimentConfig) }} /> + {analyticsConfig && ( + +