diff --git a/frontend/src/app/site-finder/analysis/[cad]/page.tsx b/frontend/src/app/site-finder/analysis/[cad]/page.tsx index c3c8a854..6a82c8da 100644 --- a/frontend/src/app/site-finder/analysis/[cad]/page.tsx +++ b/frontend/src/app/site-finder/analysis/[cad]/page.tsx @@ -9,10 +9,17 @@ interface PageProps { params: Promise<{ cad: string }>; } +// Next.js delivers `cad` URL-encoded (":" -> "%3A"); decode once at the page +// boundary so downstream hooks/components see canonical "66:41:0204016:10" +// and re-encode exactly once when building API URLs / hrefs (prevents the +// double-encode that made backend regex reject the cad with HTTP 400). +// Regression history: PR #351 added this in Client Component; A7 split into +// Server Component (PR #356) dropped it; this restores in Server boundary. export async function generateMetadata({ params, }: PageProps): Promise { - const { cad } = await params; + const { cad: cadRaw } = await params; + const cad = decodeURIComponent(cadRaw); return { title: `Анализ ${cad} — Site Finder`, description: `Анализ инвестиционного участка ${cad}`, @@ -22,7 +29,8 @@ export async function generateMetadata({ // ── Page ────────────────────────────────────────────────────────────────────── export default async function AnalysisPage({ params }: PageProps) { - const { cad } = await params; + const { cad: cadRaw } = await params; + const cad = decodeURIComponent(cadRaw); return (