From db79610e7bf3204aac4cc6eb6cc42da1afd0c2c5 Mon Sep 17 00:00:00 2001 From: Liming Cheung <267123381+liming-cheung-nhs@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:12:28 +0100 Subject: [PATCH] via-632: adobe analytics poc --- .tool-versions | 1 + .../analytics/DigitalDataScript.tsx | 25 ++++ .../analytics/digitalDataConfig.ts | 127 ++++++++++++++++++ src/app/layout.tsx | 7 + src/types/nhsapp-js.d.ts | 1 + tsconfig.json | 2 +- 6 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 src/app/_components/analytics/DigitalDataScript.tsx create mode 100644 src/app/_components/analytics/digitalDataConfig.ts diff --git a/.tool-versions b/.tool-versions index d7fea77c..848faad1 100644 --- a/.tool-versions +++ b/.tool-versions @@ -3,6 +3,7 @@ terraform 1.14.1 pre-commit 4.5.0 vale 3.13.0 +gitleaks 8.30.1 nodejs 22.13.1 # ============================================================================== diff --git a/src/app/_components/analytics/DigitalDataScript.tsx b/src/app/_components/analytics/DigitalDataScript.tsx new file mode 100644 index 00000000..5f6db496 --- /dev/null +++ b/src/app/_components/analytics/DigitalDataScript.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { buildDigitalData } from "@src/app/_components/analytics/digitalDataConfig"; +import { usePathname } from "next/navigation"; +import { useEffect } from "react"; + +const toSafeInlineScriptJson = (value: unknown): string => { + return JSON.stringify(value) + .replace(/ { + const pathname = usePathname(); + const digitalData = buildDigitalData(pathname); + const digitalDataScript = `window.digitalData = ${toSafeInlineScriptJson(digitalData)};`; + + // Keep window.digitalData current on every client-side navigation + useEffect(() => { + window.digitalData = buildDigitalData(pathname); + }, [pathname]); + + return