Files
FastGPT/document/components/docs/Redirect.tsx
T
2026-04-26 21:08:47 +08:00

46 lines
1.2 KiB
TypeScript

'use client';
import { useEffect } from 'react';
import { usePathname, useRouter } from 'next/navigation';
import { getLocalizedPath, i18n } from '@/lib/i18n';
import { useCurrentLang } from '@/lib/localized-navigation';
interface RedirectProps {
to: string;
}
function removeLocalePrefix(pathname: string): string {
const segments = pathname.split('/').filter(Boolean);
if (segments[0] && i18n.languages.includes(segments[0])) {
return `/${segments.slice(1).join('/')}`;
}
return pathname;
}
function normalizeDocPath(to: string, pathname: string): string {
const target = to.replace(/(?:\.[a-z]{2}(?:-[A-Z]{2})?)?\.mdx$/, '');
if (target.startsWith('/')) {
return removeLocalePrefix(target);
}
const currentPath = removeLocalePrefix(pathname);
const basePath = currentPath.endsWith('/') ? currentPath : `${currentPath}/`;
return new URL(target, `http://localhost${basePath}`).pathname;
}
export function Redirect({ to }: RedirectProps) {
const router = useRouter();
const pathname = usePathname();
const lang = useCurrentLang();
useEffect(() => {
router.push(getLocalizedPath(normalizeDocPath(to, pathname), lang));
}, [to, pathname, lang, router]);
return null;
}