Merged in feature/refactor-lang (pull request #387)

feat: SW-238 Avoid prop drilling of lang

Approved-by: Michael Zetterberg
This commit is contained in:
Niclas Edenvin
2024-08-14 11:00:20 +00:00
parent 35128dbf44
commit e67212bd94
94 changed files with 378 additions and 322 deletions

View File

@@ -1,11 +1,18 @@
import { serverClient } from "@/lib/trpc/server"
import LanguageSwitcher from "@/components/Current/Header/LanguageSwitcher"
import { setLang } from "@/i18n/serverContext"
import { LangParams, PageArgs } from "@/types/params"
export default async function LanguageSwitcherRoute({
params,
}: PageArgs<LangParams>) {
setLang(params.lang)
export default async function LanguageSwitcherRoute() {
const data = await serverClient().contentstack.languageSwitcher.get()
if (!data) {
return null
}
return <LanguageSwitcher urls={data.urls} lang={data.lang} />
return <LanguageSwitcher urls={data.urls} />
}

View File

@@ -1,14 +1,9 @@
"use client"
import { useParams } from "next/navigation"
import { baseUrls } from "@/constants/routes/baseUrls"
import LanguageSwitcher from "@/components/Current/Header/LanguageSwitcher"
import { LangParams } from "@/types/params"
export default function Error() {
const params = useParams<LangParams>()
return <LanguageSwitcher urls={baseUrls} lang={params.lang} />
return <LanguageSwitcher urls={baseUrls} />
}

View File

@@ -1,15 +1,18 @@
import { serverClient } from "@/lib/trpc/server"
import MyPagesMobileDropdown from "@/components/Current/Header/MyPagesMobileDropdown"
import { setLang } from "@/i18n/serverContext"
import { LangParams, PageArgs } from "@/types/params"
export default async function MyPagesMobileDropdownPage({
params,
}: PageArgs<LangParams>) {
setLang(params.lang)
const navigation = await serverClient().contentstack.myPages.navigation.get()
if (!navigation) {
return null
}
return <MyPagesMobileDropdown navigation={navigation} lang={params.lang} />
return <MyPagesMobileDropdown navigation={navigation} />
}

View File

@@ -1,12 +1,7 @@
"use client"
import { useParams } from "next/navigation"
import MyPagesMobileDropdown from "@/components/Current/Header/MyPagesMobileDropdown"
import { LangParams } from "@/types/params"
export default function Error() {
const params = useParams<LangParams>()
return <MyPagesMobileDropdown navigation={null} lang={params.lang} />
return <MyPagesMobileDropdown navigation={null} />
}

View File

@@ -6,6 +6,7 @@ import { request } from "@/lib/graphql/request"
import ContentPage from "@/components/Current/ContentPage"
import Tracking from "@/components/Current/Tracking"
import { getLang, setLang } from "@/i18n/serverContext"
import type { LangParams, PageArgs, UriParams } from "@/types/params"
import type { GetCurrentBlockPageData } from "@/types/requests/currentBlockPage"
@@ -15,6 +16,8 @@ export default async function CurrentContentPage({
params,
searchParams,
}: PageArgs<LangParams, UriParams>) {
setLang(params.lang)
try {
if (!searchParams.uri) {
throw new Error("Bad URI")
@@ -23,10 +26,10 @@ export default async function CurrentContentPage({
const response = await request<GetCurrentBlockPageData>(
GetCurrentBlockPage,
{
locale: params.lang,
locale: getLang(),
url: searchParams.uri,
},
{ tags: [`${searchParams.uri}-${params.lang}`] }
{ tags: [`${searchParams.uri}-${getLang()}`] }
)
if (!response.data?.all_current_blocks_page?.total) {
@@ -46,7 +49,7 @@ export default async function CurrentContentPage({
const pageData = response.data.all_current_blocks_page.items[0]
const trackingData = {
lang: params.lang,
lang: getLang(),
publishedDate: pageData.system.updated_at,
createdDate: pageData.system.created_at,
pageId: pageData.system.uid,

View File

@@ -10,6 +10,7 @@ import LangPopup from "@/components/Current/LangPopup"
import SkipToMainContent from "@/components/SkipToMainContent"
import { getIntl } from "@/i18n"
import ServerIntlProvider from "@/i18n/Provider"
import { getLang, setLang } from "@/i18n/serverContext"
import type { Metadata } from "next"
@@ -31,9 +32,11 @@ export default async function RootLayout({
myPagesMobileDropdown: React.ReactNode
}
>) {
setLang(params.lang)
const { defaultLocale, locale, messages } = await getIntl()
return (
<html lang={params.lang}>
<html lang={getLang()}>
<head>
{/* eslint-disable-next-line @next/next/no-css-tags */}
<link rel="stylesheet" href="/_static/css/core.css" />
@@ -44,7 +47,7 @@ export default async function RootLayout({
strategy="beforeInteractive"
data-blockingmode="auto"
data-cbid="6d539de8-3e67-4f0f-a0df-8cef9070f712"
data-culture={params.lang}
data-culture={getLang()}
id="Cookiebot"
src="https://consent.cookiebot.com/uc.js"
/>
@@ -60,16 +63,15 @@ export default async function RootLayout({
/>
</head>
<body className="theme-00Corecolours theme-X0Oldcorecolours">
<LangPopup lang={params.lang} />
<LangPopup />
<SkipToMainContent />
<ServerIntlProvider intl={{ defaultLocale, locale, messages }}>
<Header
lang={params.lang}
myPagesMobileDropdown={myPagesMobileDropdown}
languageSwitcher={languageSwitcher}
/>
{children}
<Footer lang={params.lang} />
<Footer />
</ServerIntlProvider>
<Script id="page-tracking">{`
typeof _satellite !== "undefined" && _satellite.pageBottom();

View File

@@ -1,13 +1,5 @@
"use client"
import { useParams } from "next/navigation"
import NotFound from "@/components/Current/NotFound"
import { LangParams } from "@/types/params"
export default function NotFoundPage() {
const { lang } = useParams<LangParams>()
return <NotFound lang={lang} />
return <NotFound />
}