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:
@@ -23,8 +23,9 @@ const tokenResponseSchema = z.object({
|
||||
|
||||
export async function GET(
|
||||
request: NextRequest,
|
||||
{ params }: { params: { lang: string } }
|
||||
props: { params: Promise<{ lang: string }> }
|
||||
) {
|
||||
const params = await props.params
|
||||
const { lang } = params
|
||||
|
||||
const result = searchParamsSchema.safeParse({
|
||||
@@ -72,7 +73,7 @@ export async function GET(
|
||||
redirect(`/${lang}/sas-x-scandic/error?errorCode=invalid_state`)
|
||||
}
|
||||
|
||||
const cookieStore = cookies()
|
||||
const cookieStore = await cookies()
|
||||
cookieStore.set(SAS_TOKEN_STORAGE_KEY, tokenData.access_token, {
|
||||
maxAge: 3600,
|
||||
httpOnly: true,
|
||||
@@ -83,7 +84,8 @@ export async function GET(
|
||||
stateResult.data.intent === "unlink" ||
|
||||
stateResult.data.intent === "transfer"
|
||||
) {
|
||||
const [data, error] = await safeTry(serverClient().partner.sas.requestOtp())
|
||||
const caller = await serverClient()
|
||||
const [data, error] = await safeTry(caller.partner.sas.requestOtp())
|
||||
if (!data || error) {
|
||||
console.error("[SAS] Failed to request OTP", error)
|
||||
redirect(`/${lang}/sas-x-scandic/error`)
|
||||
|
||||
@@ -12,9 +12,10 @@ import { UnlinkError } from "../components/UnlinkError"
|
||||
|
||||
import type { LangParams, PageArgs, SearchParams } from "@/types/params"
|
||||
|
||||
export default async function Page({
|
||||
searchParams,
|
||||
}: PageArgs<LangParams> & SearchParams<{ errorCode?: "dateOfBirthMismatch" }>) {
|
||||
export default async function Page(
|
||||
props: PageArgs<LangParams> & SearchParams<{ errorCode?: "dateOfBirthMismatch" }>
|
||||
) {
|
||||
const searchParams = await props.searchParams;
|
||||
const intl = await getIntl()
|
||||
|
||||
const { errorCode } = searchParams
|
||||
|
||||
@@ -13,10 +13,13 @@ import type { PropsWithChildren } from "react"
|
||||
|
||||
import type { LangParams, LayoutArgs } from "@/types/params"
|
||||
|
||||
export default async function SasXScandicLayout({
|
||||
children,
|
||||
params,
|
||||
}: PropsWithChildren<LayoutArgs<LangParams>>) {
|
||||
export default async function SasXScandicLayout(props: PropsWithChildren<LayoutArgs<LangParams>>) {
|
||||
const params = await props.params;
|
||||
|
||||
const {
|
||||
children
|
||||
} = props;
|
||||
|
||||
const intl = await getIntl()
|
||||
|
||||
return (
|
||||
|
||||
@@ -10,9 +10,8 @@ import { LinkAccountForm } from "./LinkAccountForm"
|
||||
|
||||
import type { LangParams, PageArgs } from "@/types/params"
|
||||
|
||||
export default async function SASxScandicLinkPage({
|
||||
params,
|
||||
}: PageArgs<LangParams>) {
|
||||
export default async function SASxScandicLinkPage(props: PageArgs<LangParams>) {
|
||||
const params = await props.params;
|
||||
const profile = await getProfileSafely()
|
||||
|
||||
if (!profile || !profile.loyalty) return null
|
||||
|
||||
@@ -12,9 +12,8 @@ import { SASModal } from "../../components/SASModal"
|
||||
|
||||
import type { LangParams, PageArgs } from "@/types/params"
|
||||
|
||||
export default async function SASxScandicLinkPage({
|
||||
params,
|
||||
}: PageArgs<LangParams>) {
|
||||
export default async function SASxScandicLinkPage(props: PageArgs<LangParams>) {
|
||||
const params = await props.params;
|
||||
const intl = await getIntl()
|
||||
|
||||
return (
|
||||
|
||||
@@ -24,10 +24,9 @@ const searchParamsSchema = z.object({
|
||||
|
||||
type Intent = z.infer<typeof searchParamsSchema>["intent"]
|
||||
|
||||
export default async function SASxScandicLoginPage({
|
||||
searchParams,
|
||||
params,
|
||||
}: PageArgs<LangParams> & SearchParams) {
|
||||
export default async function SASxScandicLoginPage(props: PageArgs<LangParams> & SearchParams) {
|
||||
const params = await props.params;
|
||||
const searchParams = await props.searchParams;
|
||||
const result = searchParamsSchema.safeParse(searchParams)
|
||||
if (!result.success) {
|
||||
// TOOD where to redirect?
|
||||
|
||||
@@ -29,12 +29,13 @@ const searchParamsSchema = z.object({
|
||||
export type OtpError = z.infer<typeof otpError>
|
||||
type Intent = z.infer<typeof intent>
|
||||
|
||||
export default async function SASxScandicOneTimePasswordPage({
|
||||
searchParams,
|
||||
params,
|
||||
}: PageArgs<LangParams> & SearchParams) {
|
||||
export default async function SASxScandicOneTimePasswordPage(
|
||||
props: PageArgs<LangParams> & SearchParams
|
||||
) {
|
||||
const params = await props.params
|
||||
const searchParams = await props.searchParams
|
||||
const intl = await getIntl()
|
||||
const cookieStore = cookies()
|
||||
const cookieStore = await cookies()
|
||||
const tokenCookie = cookieStore.get(SAS_TOKEN_STORAGE_KEY)
|
||||
|
||||
const result = searchParamsSchema.safeParse(searchParams)
|
||||
@@ -49,9 +50,8 @@ export default async function SASxScandicOneTimePasswordPage({
|
||||
|
||||
const handleOtpVerified: OnSubmitHandler = async ({ otp }) => {
|
||||
"use server"
|
||||
const [data, error] = await safeTry(
|
||||
serverClient().partner.sas.verifyOtp({ otp })
|
||||
)
|
||||
const caller = await serverClient()
|
||||
const [data, error] = await safeTry(caller.partner.sas.verifyOtp({ otp }))
|
||||
|
||||
if (error || !data) {
|
||||
throw error || new Error("OTP verification failed")
|
||||
@@ -166,7 +166,8 @@ async function handleLinkAccount({
|
||||
}: {
|
||||
lang: Lang
|
||||
}): ReturnType<OnSubmitHandler> {
|
||||
const [res, error] = await safeTry(serverClient().partner.sas.linkAccount())
|
||||
const caller = await serverClient()
|
||||
const [res, error] = await safeTry(caller.partner.sas.linkAccount())
|
||||
if (!res || error) {
|
||||
console.error("[SAS] link account error", error)
|
||||
return {
|
||||
@@ -208,7 +209,8 @@ async function handleUnlinkAccount({
|
||||
}: {
|
||||
lang: Lang
|
||||
}): ReturnType<OnSubmitHandler> {
|
||||
const [res, error] = await safeTry(serverClient().partner.sas.unlinkAccount())
|
||||
const caller = await serverClient()
|
||||
const [res, error] = await safeTry(caller.partner.sas.unlinkAccount())
|
||||
if (!res || error) {
|
||||
console.error("[SAS] unlink account error", error)
|
||||
return {
|
||||
@@ -239,7 +241,7 @@ async function handleTransferPoints({
|
||||
}: {
|
||||
lang: Lang
|
||||
}): ReturnType<OnSubmitHandler> {
|
||||
const cookieStore = cookies()
|
||||
const cookieStore = await cookies()
|
||||
const pointsCookie = cookieStore.get(SAS_TRANSFER_POINT_KEY)
|
||||
const points = Number(pointsCookie?.value)
|
||||
|
||||
@@ -252,8 +254,9 @@ async function handleTransferPoints({
|
||||
}
|
||||
}
|
||||
|
||||
const caller = await serverClient()
|
||||
const [res, error] = await safeTry(
|
||||
serverClient().partner.sas.transferPoints({
|
||||
caller.partner.sas.transferPoints({
|
||||
points,
|
||||
})
|
||||
)
|
||||
|
||||
@@ -20,10 +20,9 @@ import styles from "./transferSuccess.module.css"
|
||||
import type { LangParams, PageArgs, SearchParams } from "@/types/params"
|
||||
import type { Lang } from "@/constants/languages"
|
||||
|
||||
export default async function SASxScandicTransferSuccessPage({
|
||||
params,
|
||||
searchParams,
|
||||
}: PageArgs<LangParams> & SearchParams<{ p?: string }>) {
|
||||
export default async function SASxScandicTransferSuccessPage(props: PageArgs<LangParams> & SearchParams<{ p?: string }>) {
|
||||
const searchParams = await props.searchParams;
|
||||
const params = await props.params;
|
||||
const intl = await getIntl()
|
||||
const { lang } = params
|
||||
const addedPoints = Number(searchParams.p) || 0
|
||||
|
||||
@@ -12,9 +12,8 @@ import { SASModal } from "../../components/SASModal"
|
||||
|
||||
import type { LangParams, PageArgs } from "@/types/params"
|
||||
|
||||
export default async function SASxScandicUnlinkSuccessPage({
|
||||
params,
|
||||
}: PageArgs<LangParams>) {
|
||||
export default async function SASxScandicUnlinkSuccessPage(props: PageArgs<LangParams>) {
|
||||
const params = await props.params;
|
||||
const intl = await getIntl()
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user