Merged in chore/upgrade-next (pull request #3124)

Upgrade next@15.5.6

* chore: upgrade next@15.5.6

* chore: upgrade turborepo@2.6.1

* fix typings for scandic-web

* fix: set correct type for pages

* cleanup

* fix more route.ts typing issues

* Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/upgrade-next

* explicitly import the types


Approved-by: Linus Flood
This commit is contained in:
Joakim Jäderberg
2025-11-13 07:33:56 +00:00
parent ce469bc4b4
commit dc53ab9245
64 changed files with 746 additions and 404 deletions

View File

@@ -5,10 +5,8 @@ import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext"
import type { LangParams, PageArgs } from "@/types/params"
export default async function BookingConfirmationPage(
props: PageArgs<LangParams, { RefId?: string }>
props: PageProps<"/[lang]/hotelreservation/booking-confirmation">
) {
const searchParams = await props.searchParams
const lang = await getLang()

View File

@@ -5,28 +5,25 @@ import { logger } from "@scandic-hotels/common/logger"
import GuaranteeCallbackPage from "@/components/GuaranteeCallback"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { PaymentCallbackStatusEnum } from "@scandic-hotels/common/constants/paymentCallbackStatusEnum"
import type { LangParams, PageArgs } from "@/types/params"
export default async function GuaranteePaymentCallbackPage(
props: PageArgs<
LangParams,
{
status?: PaymentCallbackStatusEnum
RefId?: string
confirmationNumber?: string
ancillary?: string
}
>
props: PageProps<"/[lang]/hotelreservation/gla-payment-callback">
) {
const searchParams = await props.searchParams
const params = await props.params
logger.debug(`[gla-payment-callback] callback started`)
const lang = params.lang
const status = searchParams.status
const confirmationNumber = searchParams.confirmationNumber
const refId = searchParams.RefId
const lang = params.lang as Lang
const status = searchParams.status as PaymentCallbackStatusEnum
const confirmationNumber =
typeof searchParams.confirmationNumber === "string"
? searchParams.confirmationNumber
: null
const refId =
typeof searchParams.RefId === "string" ? searchParams.RefId : null
if (!status || !confirmationNumber || !refId) {
notFound()
}

View File

@@ -1,9 +1,7 @@
import styles from "./layout.module.css"
import type { LangParams, LayoutArgs } from "@/types/params"
export default function PaymentCallbackLayout({
children,
}: React.PropsWithChildren<LayoutArgs<LangParams>>) {
}: LayoutProps<"/[lang]/hotelreservation/payment-callback">) {
return <div className={styles.layout}>{children}</div>
}

View File

@@ -6,23 +6,16 @@ import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { auth } from "@/auth"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { PaymentCallbackStatusEnum } from "@scandic-hotels/common/constants/paymentCallbackStatusEnum"
import type { LangParams, PageArgs } from "@/types/params"
export default async function PaymentCallbackPage(
props: PageArgs<
LangParams,
{
status?: PaymentCallbackStatusEnum
confirmationNumber?: string
}
>
props: PageProps<"/[lang]/hotelreservation/payment-callback">
) {
const searchParams = await props.searchParams
const params = await props.params
logger.debug(`[payment-callback] callback started`)
const lang = params.lang
const lang = params.lang as Lang
let userAccessToken = null
const session = await auth()

View File

@@ -4,22 +4,20 @@ import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { getHotel } from "@/lib/trpc/memoizedRequests"
import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext"
import styles from "./page.module.css"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { Metadata } from "next"
import type { LangParams, NextSearchParams, PageArgs } from "@/types/params"
export async function generateMetadata({
searchParams,
params,
}: PageArgs<LangParams, { hotel: string }>): Promise<Metadata> {
}: PageProps<"/[lang]/hotelreservation/alternative-hotels/map">): Promise<Metadata> {
const intl = await getIntl()
const { hotel } = await searchParams
const { lang } = await params
const lang = (await params).lang as Lang
if (!hotel || Array.isArray(hotel)) {
return {}
@@ -50,10 +48,11 @@ export async function generateMetadata({
}
export default async function AlternativeHotelsMapPage(
props: PageArgs<LangParams, NextSearchParams>
props: PageProps<"/[lang]/hotelreservation/alternative-hotels/map">
) {
const searchParams = await props.searchParams
const lang = await getLang()
const params = await props.params
const lang = params.lang as Lang
return (
<div className={styles.main}>

View File

@@ -4,24 +4,19 @@ import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { getHotel } from "@/lib/trpc/memoizedRequests"
import { getIntl } from "@/i18n"
import { getLang } from "@/i18n/serverContext"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { Metadata } from "next"
import {
type LangParams,
type NextSearchParams,
type PageArgs,
} from "@/types/params"
export async function generateMetadata({
searchParams,
params,
}: PageArgs<LangParams, { hotel: string }>): Promise<Metadata> {
export async function generateMetadata(
props: PageProps<"/[lang]/hotelreservation/alternative-hotels">
): Promise<Metadata> {
const intl = await getIntl()
const searchParams = await props.searchParams
const params = await props.params
const { hotel } = await searchParams
const { lang } = await params
if (!hotel || Array.isArray(hotel)) {
return {}
@@ -29,7 +24,7 @@ export async function generateMetadata({
const hotelData = await getHotel({
hotelId: hotel,
language: lang,
language: params.lang as Lang,
isCardOnlyPayment: false,
})
const hotelName = hotelData?.additionalData?.name
@@ -52,10 +47,11 @@ export async function generateMetadata({
}
export default async function AlternativeHotelsPage(
props: PageArgs<LangParams, NextSearchParams>
props: PageProps<"/[lang]/hotelreservation/alternative-hotels">
) {
const searchParams = await props.searchParams
const lang = await getLang()
const lang = (await props.params).lang as Lang
return (
<AlternativeHotelsPagePrimitive
lang={lang}

View File

@@ -2,17 +2,17 @@ import { EnterDetailsPage as EnterDetailsPagePrimitive } from "@scandic-hotels/b
import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import type { LangParams, NextSearchParams, PageArgs } from "@/types/params"
import type { Lang } from "@scandic-hotels/common/constants/language"
export default async function DetailsPage(
props: PageArgs<LangParams, NextSearchParams>
props: PageProps<"/[lang]/hotelreservation/details">
) {
const { lang } = await props.params
const params = await props.params
const searchParams = await props.searchParams
return (
<EnterDetailsPagePrimitive
lang={lang}
lang={params.lang as Lang}
searchParams={searchParams}
config={bookingFlowConfig}
/>

View File

@@ -1,9 +1,7 @@
import styles from "./layout.module.css"
import type { LangParams, LayoutArgs } from "@/types/params"
export default function StandardHotelReservationLayout({
children,
}: React.PropsWithChildren<LayoutArgs<LangParams>>) {
}: LayoutProps<"/[lang]/hotelreservation">) {
return <div className={styles.layout}>{children}</div>
}

View File

@@ -6,16 +6,16 @@ import {
import styles from "./page.module.css"
import type { LangParams, PageArgs } from "@/types/params"
import type { Lang } from "@scandic-hotels/common/constants/language"
export default async function HotelReservationPage(
props: PageArgs<LangParams>
props: PageProps<"/[lang]/hotelreservation">
) {
const params = await props.params
const pageTrackingData: TrackingSDKPageData = {
pageId: "hotelreservation",
domainLanguage: params.lang,
domainLanguage: params.lang as Lang,
channel: TrackingChannelEnum["hotelreservation"],
pageName: "hotelreservation",
siteSections: "hotelreservation",

View File

@@ -3,34 +3,31 @@ import { toCapitalCase } from "@scandic-hotels/common/utils/toCapitalCase"
import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { getLang } from "@/i18n/serverContext"
import styles from "./page.module.css"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { Metadata } from "next"
import type { LangParams, NextSearchParams, PageArgs } from "@/types/params"
export async function generateMetadata({
searchParams,
}: PageArgs<LangParams, { city: string }>): Promise<Metadata> {
const { city } = await searchParams
export async function generateMetadata(
props: PageProps<"/[lang]/hotelreservation/select-hotel/map">
): Promise<Metadata> {
const { city } = await props.searchParams
return {
title: `${toCapitalCase(city)}`,
title: `${toCapitalCase(typeof city === "string" ? city : "")}`,
}
}
export default async function SelectHotelMapPage(
props: PageArgs<LangParams, NextSearchParams>
props: PageProps<"/[lang]/hotelreservation/select-hotel/map">
) {
const searchParams = await props.searchParams
const lang = await getLang()
const params = await props.params
return (
<div className={styles.main}>
<SelectHotelMapPagePrimitive
lang={lang}
lang={params.lang as Lang}
searchParams={searchParams}
config={bookingFlowConfig}
/>

View File

@@ -3,27 +3,29 @@ import { toCapitalCase } from "@scandic-hotels/common/utils/toCapitalCase"
import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { getLang } from "@/i18n/serverContext"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { Metadata } from "next"
import type { LangParams, NextSearchParams, PageArgs } from "@/types/params"
export async function generateMetadata(
props: PageProps<"/[lang]/hotelreservation/select-hotel">
): Promise<Metadata> {
const searchParams = await props.searchParams
export async function generateMetadata({
searchParams,
}: PageArgs<LangParams, { city: string }>): Promise<Metadata> {
const { city } = await searchParams
if (typeof searchParams.city !== "string" || !searchParams.city) {
return {}
}
return {
title: `${toCapitalCase(city)}`,
title: `${toCapitalCase(searchParams.city)}`,
}
}
export default async function SelectHotelPage(
props: PageArgs<LangParams, NextSearchParams>
props: PageProps<"/[lang]/hotelreservation/select-hotel">
) {
const searchParams = await props.searchParams
const lang = await getLang()
const params = await props.params
const lang = params.lang as Lang
return (
<SelectHotelPagePrimitive

View File

@@ -3,26 +3,22 @@ import { SelectRatePage as SelectRatePagePrimitive } from "@scandic-hotels/booki
import { bookingFlowConfig } from "@/constants/bookingFlowConfig"
import { getHotel } from "@/lib/trpc/memoizedRequests"
import { getLang } from "@/i18n/serverContext"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type { Metadata } from "next"
import {
type LangParams,
type NextSearchParams,
type PageArgs,
} from "@/types/params"
export async function generateMetadata(
props: PageProps<"/[lang]/hotelreservation/select-rate">
): Promise<Metadata> {
const searchParams = await props.searchParams
const params = await props.params
export async function generateMetadata({
searchParams,
params,
}: PageArgs<LangParams, { hotel: string }>): Promise<Metadata> {
const { hotel } = await searchParams
const { lang } = await params
if (typeof searchParams.hotel !== "string" || !searchParams.hotel) {
return {}
}
const hotelData = await getHotel({
hotelId: hotel,
language: lang,
hotelId: searchParams.hotel,
language: params.lang as Lang,
isCardOnlyPayment: false,
})
@@ -36,10 +32,12 @@ export async function generateMetadata({
}
export default async function SelectRatePage(
props: PageArgs<LangParams, NextSearchParams>
props: PageProps<"/[lang]/hotelreservation/select-rate">
) {
const searchParams = await props.searchParams
const lang = await getLang()
const params = await props.params
const lang = params.lang as Lang
return (
<SelectRatePagePrimitive

View File

@@ -3,19 +3,21 @@ import { setLang } from "@/i18n/serverContext"
import Tracking from "./tracking"
import type { LangParams, PageArgs } from "@/types/params"
import type { Lang } from "@scandic-hotels/common/constants/language"
export default async function MyStayPage(
props: PageArgs<LangParams, { RefId?: string }>
props: PageProps<"/[lang]/hotelreservation/my-stay">
) {
const searchParams = await props.searchParams
const params = await props.params
setLang(params.lang)
const refId = searchParams.RefId
const lang = params.lang as Lang
setLang(lang)
const refId = typeof searchParams.RefId === "string" ? searchParams.RefId : ""
return (
<>
<MyStay refId={refId} lang={params.lang} />
<MyStay refId={refId} lang={lang} />
<Tracking />
</>
)