diff --git a/components/Current/Header/LoginButton.tsx b/components/Current/Header/LoginButton.tsx index 8634b71bc..d74d63e80 100644 --- a/components/Current/Header/LoginButton.tsx +++ b/components/Current/Header/LoginButton.tsx @@ -1,6 +1,5 @@ "use client" -import { usePathname } from "next/navigation" import { PropsWithChildren, useEffect } from "react" import { login } from "@/constants/routes/handleAuth" @@ -8,6 +7,7 @@ import { login } from "@/constants/routes/handleAuth" import Link from "@/components/TempDesignSystem/Link" import { LinkProps } from "@/components/TempDesignSystem/Link/link" import useLang from "@/hooks/useLang" +import { useLazyPathname } from "@/hooks/useLazyPathname" import { trackLoginClick } from "@/utils/tracking" import { TrackingPosition } from "@/types/components/tracking" @@ -25,7 +25,11 @@ export default function LoginButton({ color?: LinkProps["color"] }>) { const lang = useLang() - const pathName = usePathname() + const pathName = useLazyPathname() + + const href = pathName + ? `${login[lang]}?redirectTo=${encodeURIComponent(pathName)}` + : login[lang] useEffect(() => { document @@ -43,7 +47,7 @@ export default function LoginButton({ className={className} id={trackingId} color={color} - href={`${login[lang]}?redirectTo=${encodeURIComponent(pathName)}`} + href={href} prefetch={false} > {children} diff --git a/hooks/useLazyPathname.ts b/hooks/useLazyPathname.ts new file mode 100644 index 000000000..5f3a53c18 --- /dev/null +++ b/hooks/useLazyPathname.ts @@ -0,0 +1,16 @@ +"use client" +import { usePathname } from "next/navigation" +import { useEffect, useState } from "react" + +/*** This hook is used to get the current pathname (as reflected in window.location.href) of the page. During ssr, the value from usePathname() + * is the value return from NextResponse.rewrite() (e.g. the path from the app directory) instead of the actual pathname from the URL. + */ +export function useLazyPathname() { + const pathName = usePathname() + const [updatedPathName, setUpdatedPathName] = useState(null) + + useEffect(() => { + setUpdatedPathName(pathName) + }, [pathName]) + return updatedPathName ? updatedPathName : null +}