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:
@@ -2,9 +2,10 @@ import { headers } from "next/headers"
|
||||
|
||||
import { getLang } from "@/i18n/serverContext"
|
||||
|
||||
export function appendSlugToPathname(slug?: string) {
|
||||
const pathname = headers().get("x-pathname")
|
||||
const lang = getLang()
|
||||
export async function appendSlugToPathname(slug?: string) {
|
||||
const headersList = await headers()
|
||||
const pathname = headersList.get("x-pathname")
|
||||
const lang = await getLang()
|
||||
|
||||
if (!pathname || !slug) {
|
||||
return null
|
||||
|
||||
@@ -18,22 +18,23 @@ export async function generateMetadata({
|
||||
LangParams & ContentTypeParams & UIDParams,
|
||||
{ subpage?: string; filterFromUrl?: string }
|
||||
>) {
|
||||
const { subpage, filterFromUrl, ...otherSearchParams } = searchParams
|
||||
const { lang } = await params
|
||||
const { subpage, filterFromUrl, ...otherSearchParams } = await searchParams
|
||||
// If there are other (real) search params, we don't want to index the page as this will
|
||||
// cause duplicate content issues.
|
||||
const noIndexOnSearchParams = !!Object.keys(otherSearchParams).length
|
||||
const { metadata, alternates } =
|
||||
await serverClient().contentstack.metadata.get({
|
||||
subpage,
|
||||
filterFromUrl,
|
||||
noIndex: noIndexOnSearchParams,
|
||||
})
|
||||
const caller = await serverClient()
|
||||
const { metadata, alternates } = await caller.contentstack.metadata.get({
|
||||
subpage,
|
||||
filterFromUrl,
|
||||
noIndex: noIndexOnSearchParams,
|
||||
})
|
||||
|
||||
if (!metadata) {
|
||||
return {
|
||||
robots: {
|
||||
index: env.isLangLive(params.lang),
|
||||
follow: env.isLangLive(params.lang),
|
||||
index: env.isLangLive(lang),
|
||||
follow: env.isLangLive(lang),
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -46,8 +47,8 @@ export async function generateMetadata({
|
||||
...metadata,
|
||||
robots: {
|
||||
...(metadata.robots ?? {}),
|
||||
index: isIndexable(metadata.robots?.index, params.lang, alternates),
|
||||
follow: isIndexable(metadata.robots?.follow, params.lang, alternates),
|
||||
index: isIndexable(metadata.robots?.index, lang, alternates),
|
||||
follow: isIndexable(metadata.robots?.follow, lang, alternates),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import { getLocations } from "@/lib/trpc/memoizedRequests"
|
||||
|
||||
import { generateChildrenString } from "@/components/HotelReservation/utils"
|
||||
import { safeTry } from "@/utils/safeTry"
|
||||
import { convertSearchParamsToObj, type SelectHotelParams } from "@/utils/url"
|
||||
import { type SelectHotelParams } from "@/utils/url"
|
||||
|
||||
import type {
|
||||
AlternativeHotelsSearchParams,
|
||||
@@ -42,17 +42,9 @@ export async function getHotelSearchDetails<
|
||||
| SelectRateSearchParams
|
||||
| AlternativeHotelsSearchParams,
|
||||
>(
|
||||
{
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: T & {
|
||||
[key: string]: string
|
||||
}
|
||||
},
|
||||
selectHotelParams: SelectHotelParams<T>,
|
||||
isAlternativeHotels?: boolean
|
||||
): Promise<HotelSearchDetails<T> | null> {
|
||||
const selectHotelParams = convertSearchParamsToObj<T>(searchParams)
|
||||
|
||||
const [locations, error] = await safeTry(getLocations())
|
||||
if (!locations || error) {
|
||||
return null
|
||||
|
||||
@@ -8,8 +8,8 @@ import { isValidSession } from "./session"
|
||||
|
||||
export async function isLoggedInUser(): Promise<boolean> {
|
||||
const session = await auth()
|
||||
const cookie = cookies()
|
||||
const webviewTokenCookie = cookie.get("webviewToken")
|
||||
const cookieStore = await cookies()
|
||||
const webviewTokenCookie = cookieStore.get("webviewToken")
|
||||
|
||||
// We assume we have a valid session if we have a webviewTokenCookie.
|
||||
return isValidSession(session) || !!webviewTokenCookie?.value
|
||||
|
||||
@@ -55,7 +55,7 @@ export function searchParamsToRecord(searchParams: URLSearchParams) {
|
||||
|
||||
export function convertSearchParamsToObj<T extends PartialRoom>(
|
||||
searchParams: Record<string, string>
|
||||
) {
|
||||
): SelectHotelParams<T> {
|
||||
const searchParamsObject = Object.entries(searchParams).reduce<
|
||||
SelectHotelParams<T>
|
||||
>((acc, [key, value]) => {
|
||||
|
||||
@@ -6,22 +6,23 @@ import { webviews } from "@/constants/routes/webviews"
|
||||
|
||||
import type { Lang } from "@/constants/languages"
|
||||
|
||||
export function webviewSearchParams() {
|
||||
export async function webviewSearchParams() {
|
||||
const searchParams = new URLSearchParams()
|
||||
const loginType = headers().get("loginType")
|
||||
const headersList = await headers()
|
||||
const loginType = headersList.get("loginType")
|
||||
if (loginType) {
|
||||
searchParams.set("loginType", loginType)
|
||||
}
|
||||
|
||||
const adobeMc = headers().get("adobe_mc")
|
||||
const adobeMc = headersList.get("adobe_mc")
|
||||
if (adobeMc) {
|
||||
searchParams.set("adobe_mc", adobeMc)
|
||||
}
|
||||
return searchParams
|
||||
}
|
||||
|
||||
export function modWebviewLink(url: string, lang: Lang) {
|
||||
const searchParams = webviewSearchParams()
|
||||
export async function modWebviewLink(url: string, lang: Lang) {
|
||||
const searchParams = await webviewSearchParams()
|
||||
const urlWithoutLang = url.replace(`/${lang}`, "")
|
||||
|
||||
const webviewUrl = `/${lang}/webview${urlWithoutLang}`
|
||||
|
||||
Reference in New Issue
Block a user