Files
gitlab-instance-0a899031_cn…/app/digital/lib/locale-link.tsx
2026-06-08 06:49:21 -05:00

42 lines
1.1 KiB
TypeScript

"use client";
import NextLink from "next/link";
import { usePathname as useNextPathname } from "next/navigation";
import { useLocale } from "../context/LocaleContext";
import {
isInternalNavigationClick,
startNavigation,
} from "@/app/lib/navigation-loading";
type LocaleLinkProps = React.ComponentProps<typeof NextLink>;
export function LocaleLink({ href, onClick, ...props }: LocaleLinkProps) {
const locale = useLocale();
const hrefStr = typeof href === "string" ? href : href.pathname ?? "/";
const localeHref =
hrefStr.startsWith("/api/") || hrefStr.startsWith("/_next")
? hrefStr
: hrefStr.startsWith("/")
? `/${locale}/digital${hrefStr === "/" ? "" : hrefStr}`
: hrefStr;
return (
<NextLink
href={localeHref}
onClick={(event) => {
if (isInternalNavigationClick(event.nativeEvent, event.currentTarget)) {
startNavigation();
}
onClick?.(event);
}}
{...props}
/>
);
}
export function usePathname() {
const path = useNextPathname();
const match = path?.match(/^\/(zh|en)\/digital(\/.*)?$/);
return match ? (match[2] ?? "/") : path ?? "/";
}