fix(landing): Trade-In nav как внешний <a> на /trade-in/v2 (ChunkLoadError) (#2365)
This commit is contained in:
parent
d31fabd102
commit
38f703c8ec
2 changed files with 30 additions and 14 deletions
|
|
@ -23,12 +23,21 @@ import { useMe } from "@/lib/useMe";
|
||||||
interface NavItem {
|
interface NavItem {
|
||||||
href: string;
|
href: string;
|
||||||
label: string;
|
label: string;
|
||||||
|
/**
|
||||||
|
* true → путь обслуживает ОТДЕЛЬНОЕ приложение за Caddy (не этот Next-фронт),
|
||||||
|
* рендерим plain `<a>` без prefetch/client-navigation. Иначе Next
|
||||||
|
* префетчит RSC для чужого маршрута → «Failed to fetch RSC payload» +
|
||||||
|
* ChunkLoadError в консоли (Caddy отдаёт 307 стороннего приложения).
|
||||||
|
*/
|
||||||
|
external?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NAV_ITEMS: NavItem[] = [
|
const NAV_ITEMS: NavItem[] = [
|
||||||
{ href: "/analytics", label: "Аналитика" },
|
{ href: "/analytics", label: "Аналитика" },
|
||||||
{ href: "/site-finder", label: "Site Finder" },
|
{ href: "/site-finder", label: "Site Finder" },
|
||||||
{ href: "/trade-in/", label: "Trade-In" },
|
// /trade-in/** проксируется Caddy в отдельный tradein-frontend (basePath
|
||||||
|
// /trade-in, canonical /trade-in/v2). Для ЭТОГО приложения — внешняя ссылка.
|
||||||
|
{ href: "/trade-in/v2", label: "Trade-In", external: true },
|
||||||
{ href: "/concept", label: "Концепция" },
|
{ href: "/concept", label: "Концепция" },
|
||||||
{ href: "/admin/scrape/all", label: "Админ" },
|
{ href: "/admin/scrape/all", label: "Админ" },
|
||||||
];
|
];
|
||||||
|
|
@ -81,19 +90,24 @@ export function TopNav({ rightSlot }: TopNavProps) {
|
||||||
GenDesign
|
GenDesign
|
||||||
</Link>
|
</Link>
|
||||||
<div style={{ display: "flex", gap: 24, alignItems: "center" }}>
|
<div style={{ display: "flex", gap: 24, alignItems: "center" }}>
|
||||||
{items.map((item) => (
|
{items.map((item) => {
|
||||||
<Link
|
const linkStyle = {
|
||||||
key={item.href}
|
fontSize: 14,
|
||||||
href={item.href}
|
color: "var(--fg-secondary)",
|
||||||
style={{
|
textDecoration: "none",
|
||||||
fontSize: 14,
|
} as const;
|
||||||
color: "var(--fg-secondary)",
|
// Внешний маршрут (за Caddy → другое приложение): plain <a>, без
|
||||||
textDecoration: "none",
|
// Next prefetch/RSC — иначе ChunkLoadError в консоли лендинга.
|
||||||
}}
|
return item.external ? (
|
||||||
>
|
<a key={item.href} href={item.href} style={linkStyle}>
|
||||||
{item.label}
|
{item.label}
|
||||||
</Link>
|
</a>
|
||||||
))}
|
) : (
|
||||||
|
<Link key={item.href} href={item.href} style={linkStyle}>
|
||||||
|
{item.label}
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
})}
|
||||||
{rightSlot}
|
{rightSlot}
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@ describe("isPathAllowed — pilot allowed paths (только trade-in)", () =>
|
||||||
const allowed: string[] = [
|
const allowed: string[] = [
|
||||||
"/trade-in",
|
"/trade-in",
|
||||||
"/trade-in/",
|
"/trade-in/",
|
||||||
|
// canonical prod-маршрут (TopNav nav-item href, обслуживается tradein-frontend)
|
||||||
|
"/trade-in/v2",
|
||||||
"/trade-in/123",
|
"/trade-in/123",
|
||||||
"/trade-in/api/v1/search",
|
"/trade-in/api/v1/search",
|
||||||
"/trade-in/api/v1/me",
|
"/trade-in/api/v1/me",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue