diff --git a/ws-nextjs-app/pages/[service]/offline/OfflinePage.tsx b/ws-nextjs-app/pages/[service]/offline/OfflinePage.tsx index b87e4062f1b..ac839b52a16 100644 --- a/ws-nextjs-app/pages/[service]/offline/OfflinePage.tsx +++ b/ws-nextjs-app/pages/[service]/offline/OfflinePage.tsx @@ -3,11 +3,22 @@ import Helmet from 'react-helmet'; import { ServiceContext } from '#contexts/ServiceContext'; import ErrorMain from '#app/legacy/components/ErrorMain'; import { useOfflinePageFlag } from '#app/hooks/useOfflinePageFlag'; +import MostRead from '#app/components/MostRead/Canonical'; +import { MostReadData } from '#app/components/MostRead/types'; +import Heading from '#app/components/Heading'; +import Paragraph from '#app/components/Paragraph'; -const OfflinePage = () => { +interface PageData { + mostReadData?: MostReadData | null; +} + +interface OfflinePageProps { + pageData?: PageData | null; +} + +const OfflinePage = ({ pageData }: OfflinePageProps) => { const { service, dir, script } = use(ServiceContext); - // Track offline page visit (sets flag in localStorage, PWA only) useOfflinePageFlag(); const title = 'You are offline'; @@ -18,22 +29,44 @@ const OfflinePage = () => { 'Refresh the page when your connection is restored', ]; + const mostReadData = pageData?.mostReadData; + return ( <> {title} - + + {mostReadData?.items?.length ? ( +
+ + {title} + + + {message} + + + Most read articles + + +
+ ) : ( + + )} ); }; diff --git a/ws-nextjs-app/pages/[service]/offline/index.page.tsx b/ws-nextjs-app/pages/[service]/offline/index.page.tsx index 8df456fa8fb..65a3955fc1e 100644 --- a/ws-nextjs-app/pages/[service]/offline/index.page.tsx +++ b/ws-nextjs-app/pages/[service]/offline/index.page.tsx @@ -1,15 +1,20 @@ import dynamic from 'next/dynamic'; import { GetServerSideProps } from 'next'; -import { OFFLINE_PAGE } from '#app/routes/utils/pageTypes'; +import { OFFLINE_PAGE, MOST_READ_PAGE } from '#app/routes/utils/pageTypes'; import PageDataParams from '#app/models/types/pageDataParams'; import deriveVariant from '#nextjs/utilities/deriveVariant'; -import extractHeaders from '#server/utilities/extractHeaders'; import logResponseTime from '#server/utilities/logResponseTime'; +import getPageData from '#nextjs/utilities/pageRequests/getPageData'; +import extractHeaders from '#src/server/utilities/extractHeaders'; const OfflinePage = dynamic(() => import('./OfflinePage')); export const getServerSideProps: GetServerSideProps = async context => { - const { service, variant: variantFromUrl } = context.query as PageDataParams; + const { + service, + variant: variantFromUrl, + renderer_env: rendererEnv, + } = context.query as PageDataParams; const variant = deriveVariant(variantFromUrl); logResponseTime({ path: context.resolvedUrl }, context.res, () => null); @@ -19,12 +24,33 @@ export const getServerSideProps: GetServerSideProps = async context => { 'public, max-age=300, stale-while-revalidate=600, stale-if-error=3600', ); + let mostReadData = null; + + try { + const { data } = await getPageData({ + pageType: MOST_READ_PAGE, + id: `/${service}/popular/read`, + resolvedUrl: `/${service}/popular/read`, + service, + variant: variant || undefined, + rendererEnv: rendererEnv || 'live', + }); + + mostReadData = data?.pageData ?? null; + } catch (err) { + // eslint-disable-next-line no-console + console.error('Failed to fetch most read data:', err); + } + return { props: { - service, - variant, + pageData: { + mostReadData, + }, pageType: OFFLINE_PAGE, + service, status: 200, + variant: variant || null, timeOnServer: Date.now(), pathname: `/${service}/offline`, ...extractHeaders(context.req.headers),