From 5597084871796335cf2ce68a0f7c3ca57cd4096d Mon Sep 17 00:00:00 2001 From: Lotfi Arif Date: Wed, 25 Feb 2026 23:53:46 +0100 Subject: [PATCH 01/20] feat: Add live updates context and section to HomePage --- implementations/web-react/src/App.tsx | 34 +++-- .../web-react/src/config/entries.ts | 2 + .../optimization/hooks/usePersonalization.ts | 18 ++- .../liveUpdates/LiveUpdatesContext.tsx | 42 ++++++ .../web-react/src/pages/HomePage.tsx | 41 +++++- .../src/sections/LiveUpdatesSection.tsx | 134 ++++++++++++++++++ 6 files changed, 255 insertions(+), 16 deletions(-) create mode 100644 implementations/web-react/src/optimization/liveUpdates/LiveUpdatesContext.tsx create mode 100644 implementations/web-react/src/sections/LiveUpdatesSection.tsx diff --git a/implementations/web-react/src/App.tsx b/implementations/web-react/src/App.tsx index f25cabb2..885ed53d 100644 --- a/implementations/web-react/src/App.tsx +++ b/implementations/web-react/src/App.tsx @@ -1,10 +1,11 @@ import { type JSX, useEffect, useMemo, useState } from 'react' import { Link, Navigate, Route, Routes, useLocation } from 'react-router-dom' import { AnalyticsEventDisplay } from './components/AnalyticsEventDisplay' -import { ENTRY_IDS } from './config/entries' +import { ENTRY_IDS, LIVE_UPDATES_ENTRY_ID } from './config/entries' import { HOME_PATH, PAGE_TWO_PATH } from './config/routes' import { useOptimization } from './optimization/hooks/useOptimization' import { useOptimizationState } from './optimization/hooks/useOptimizationState' +import { LiveUpdatesProvider } from './optimization/liveUpdates/LiveUpdatesContext' import { HomePage } from './pages/HomePage' import { PageTwoPage } from './pages/PageTwoPage' import { fetchEntries, getContentfulConfigError } from './services/contentfulClient' @@ -39,6 +40,7 @@ export default function App(): JSX.Element { const [entries, setEntries] = useState([]) const [entriesError, setEntriesError] = useState(null) + const [globalLiveUpdates, setGlobalLiveUpdates] = useState(false) useEffect(() => { if (!isReady || sdk === undefined) { @@ -81,6 +83,7 @@ export default function App(): JSX.Element { () => (Array.isArray(personalizations) ? personalizations.length : 0), [personalizations], ) + const liveUpdatesBaselineEntry = entriesById.get(LIVE_UPDATES_ENTRY_ID) const handleIdentify = (): void => { if (!isReady || sdk === undefined) { @@ -122,6 +125,10 @@ export default function App(): JSX.Element { return

Loading entries...

} + if (!liveUpdatesBaselineEntry) { + return

Live updates baseline entry is missing from fetched entries.

+ } + return (