Merged in chore/next15 (pull request #1999)

chore (SW-834): Upgrade to Next 15

* wip: apply codemod and upgrade swc plugin

* wip: design-system to react 19, fix issues from async (search)params

* wip: fix remaining issues from codemod

serverClient is now async because context use headers()
getLang is now async because it uses headers()

* Minor cleanup

* Inline react-material-symbols package

Package is seemingly not maintained any more and doesn't support
React 19. This copies the package source into `design-system`,
makes the necessary changes for 19 and export it for others to use.

* Fix missing awaits

* Disable modal exit animations

Enabling modal exit animations via isExiting prop is causing
modals to be rendered in "hidden" state and never unmount.
Seems to be an issue with react-aria-components,
see https://github.com/adobe/react-spectrum/issues/7563.
Can probably be fixed by rewriting to a solution similar to
https://react-spectrum.adobe.com/react-aria/examples/framer-modal-sheet.html

* Remove unstable cache implementation and use in memory cache locally

* Fix ref type in SelectFilter

* Use cloneElement to add key prop to element


Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-06-02 11:11:50 +00:00
parent 47abd7d5ef
commit cbf9e7b7c2
188 changed files with 4883 additions and 1023 deletions

View File

@@ -14,9 +14,10 @@ import type {
UIDParams,
} from "@/types/params"
export default async function ContentTypePage({
params,
}: PageArgs<LangParams & ContentTypeWebviewParams & UIDParams, {}>) {
export default async function ContentTypePage(
props: PageArgs<LangParams & ContentTypeWebviewParams & UIDParams, {}>
) {
const params = await props.params
const intl = await getIntl()
const user = await getProfile()
@@ -36,8 +37,8 @@ export default async function ContentTypePage({
case "unauthorized": // fall through
case "forbidden": // fall through
case "token_expired":
const h = headers()
const returnURL = `/${params.lang}/webview${h.get("x-pathname")!}`
const headersList = await headers()
const returnURL = `/${params.lang}/webview${headersList.get("x-pathname")!}`
const redirectURL = `/${params.lang}/webview/refresh?returnUrl=${encodeURIComponent(returnURL)}`
console.log(`[webview:page] user error, redirecting to: ${redirectURL}`)
redirect(redirectURL)

View File

@@ -2,7 +2,8 @@ import { env } from "@/env/server"
import type { LangParams, PageArgs } from "@/types/params"
export async function generateMetadata({ params }: PageArgs<LangParams>) {
export async function generateMetadata(props: PageArgs<LangParams>) {
const params = await props.params;
return {
robots: {
index: env.isLangLive(params.lang),

View File

@@ -47,10 +47,11 @@ import type { LangParams, PageArgs } from "@/types/params"
import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation"
import type { SafeUser } from "@/types/user"
export default async function MyStay({
params,
searchParams,
}: PageArgs<LangParams, { RefId?: string }>) {
export default async function MyStay(
props: PageArgs<LangParams, { RefId?: string }>
) {
const searchParams = await props.searchParams
const params = await props.params
setLang(params.lang)
const refId = searchParams.RefId
@@ -66,7 +67,8 @@ export default async function MyStay({
const isLoggedIn = await isLoggedInUser()
const bv = cookies().get("bv")?.value
const cookieStore = await cookies()
const bv = cookieStore.get("bv")?.value
let bookingConfirmation
if (isLoggedIn) {
bookingConfirmation = await getBookingConfirmation(refId)

View File

@@ -6,8 +6,8 @@ import {
type TrackingSDKPageData,
} from "@/types/components/tracking"
export default function Tracking() {
const lang = getLang()
export default async function Tracking() {
const lang = await getLang()
const pageTrackingData: TrackingSDKPageData = {
channel: TrackingChannelEnum.hotels,

View File

@@ -26,10 +26,13 @@ export const metadata: Metadata = {
title: "Webview",
}
export default async function RootLayout({
children,
params,
}: React.PropsWithChildren<LayoutArgs<LangParams>>) {
export default async function RootLayout(props: React.PropsWithChildren<LayoutArgs<LangParams>>) {
const params = await props.params;
const {
children
} = props;
setLang(params.lang)
const messages = await getMessages(params.lang)