From 4a783d165fc63a002dd07758dc40cc39d2bb3db6 Mon Sep 17 00:00:00 2001 From: adevopg Date: Sun, 12 Jul 2026 22:57:00 +0000 Subject: [PATCH] =?UTF-8?q?Layout=20visual:=20cabecera=20con=20nav/sesi?= =?UTF-8?q?=C3=B3n/idioma=20+=20pie,=20tema=20Tailwind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - components/Header.tsx (server, lee sesión): marca, nav (Inicio; login/register o account/logout según sesión), LanguageSwitcher y LogoutButton. - components/LanguageSwitcher.tsx (cliente): cambia de idioma conservando la ruta (next-intl usePathname/useRouter). components/LogoutButton.tsx (compartido). - components/Footer.tsx. app/[locale]/layout.tsx envuelve children con Header/Footer (columna min-h-screen). Se unifica el LogoutButton (se borra el de account/). - messages: namespace Nav. Verificado: home ES/EN con cabecera+nav+idioma+pie; enlaces locale-aware (/en/login); textos por idioma. Al leer sesión en el header, todas las rutas pasan a dinámicas. Co-Authored-By: Claude Opus 4.8 (1M context) --- web-next/app/[locale]/account/page.tsx | 2 +- web-next/app/[locale]/layout.tsx | 10 +++- web-next/components/Footer.tsx | 10 ++++ web-next/components/Header.tsx | 47 +++++++++++++++++++ web-next/components/LanguageSwitcher.tsx | 28 +++++++++++ .../account => components}/LogoutButton.tsx | 10 ++-- web-next/messages/en.json | 8 ++++ web-next/messages/es.json | 8 ++++ 8 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 web-next/components/Footer.tsx create mode 100644 web-next/components/Header.tsx create mode 100644 web-next/components/LanguageSwitcher.tsx rename web-next/{app/[locale]/account => components}/LogoutButton.tsx (65%) diff --git a/web-next/app/[locale]/account/page.tsx b/web-next/app/[locale]/account/page.tsx index 83d7986..a4a0a23 100644 --- a/web-next/app/[locale]/account/page.tsx +++ b/web-next/app/[locale]/account/page.tsx @@ -1,7 +1,7 @@ import { getTranslations, setRequestLocale } from 'next-intl/server' import { redirect } from '@/i18n/navigation' import { getSession } from '@/lib/session' -import { LogoutButton } from './LogoutButton' +import { LogoutButton } from '@/components/LogoutButton' export const dynamic = 'force-dynamic' diff --git a/web-next/app/[locale]/layout.tsx b/web-next/app/[locale]/layout.tsx index 3d37230..b86092b 100644 --- a/web-next/app/[locale]/layout.tsx +++ b/web-next/app/[locale]/layout.tsx @@ -3,6 +3,8 @@ import { notFound } from 'next/navigation' import { NextIntlClientProvider, hasLocale } from 'next-intl' import { getTranslations, setRequestLocale } from 'next-intl/server' import { routing } from '@/i18n/routing' +import { Header } from '@/components/Header' +import { Footer } from '@/components/Footer' import '../globals.css' export function generateStaticParams() { @@ -44,8 +46,12 @@ export default async function LocaleLayout({ return ( - - {children} + + +
+
{children}
+