diff --git a/app/admin/responses/page.tsx b/app/admin/responses/page.tsx index 9d80169..c36814c 100644 --- a/app/admin/responses/page.tsx +++ b/app/admin/responses/page.tsx @@ -2,7 +2,7 @@ import { createServerClient } from '@supabase/ssr' import { cookies } from 'next/headers' import { ResponsesTable, type DisplayRow } from './responses-table' import { SurveySelect } from './survey-select' -import { SignOutButton } from '../sign-out-button' +import { AdminNavBar } from '@/components/admin-nav-bar' import { formatDate, renderValue } from './admin-format' export const dynamic = 'force-dynamic' @@ -218,7 +218,9 @@ export default async function AdminResponsesPage({ }) return ( -
+ <> + +

Control de respuestas

@@ -241,8 +243,6 @@ export default async function AdminResponsesPage({
Actualizar - Usuarios -
@@ -268,6 +268,7 @@ export default async function AdminResponsesPage({ )} )} -
+
+ ) } diff --git a/app/admin/usuarios/page.tsx b/app/admin/usuarios/page.tsx index 6755476..2baa1ae 100644 --- a/app/admin/usuarios/page.tsx +++ b/app/admin/usuarios/page.tsx @@ -2,7 +2,7 @@ import { createServerClient } from '@supabase/ssr' import { cookies } from 'next/headers' import { getSupabaseAdmin } from '@/lib/supabase' import { formatDate } from '../responses/admin-format' -import { SignOutButton } from '../sign-out-button' +import { AdminNavBar } from '@/components/admin-nav-bar' import { InviteForm } from './invite-form' export const dynamic = 'force-dynamic' @@ -146,16 +146,14 @@ export default async function AdminUsuariosPage() { }) return ( -
+ <> + +

Usuarios

{userRows.length} usuarios registrados

-
- Respuestas - -
@@ -191,6 +189,7 @@ export default async function AdminUsuariosPage() { )}
-
+ + ) } diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index 14fa0af..dccdc2e 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -1,6 +1,7 @@ 'use client' import { useState } from 'react' import { useSearchParams } from 'next/navigation' +import { AdminNavBar } from '@/components/admin-nav-bar' import { FilterSidebar } from '@/components/dashboard/filter-sidebar' import { TalentoRiesgoCard } from '@/components/dashboard/talento-riesgo-card' import { PrevalenciaCuidadoresCard } from '@/components/dashboard/prevalencia-cuidadores-card' @@ -46,7 +47,9 @@ export default function DashboardPage() { const [lens, setLens] = useState('empresa') return ( -
+ <> + +
)}
-
+ + ) } diff --git a/app/globals.css b/app/globals.css index 89183de..4e1fb75 100644 --- a/app/globals.css +++ b/app/globals.css @@ -998,6 +998,21 @@ body { .db-placeholder-title { font-size: 1rem; font-weight: 600; color: #494F4F; } .db-placeholder-hint { font-size: 0.8125rem; max-width: 420px; line-height: 1.5; } +/* ── Nav compartido (dashboard / respuestas / usuarios) ── */ +.admin-nav-bar { + display: flex; align-items: center; justify-content: space-between; + gap: 16px; padding: 10px 24px; background: var(--color-surface); + border-bottom: 1px solid var(--color-border); flex-wrap: wrap; +} +.admin-nav { display: flex; gap: 4px; } +.admin-nav-link { + padding: 6px 14px; border-radius: var(--radius); font-size: 0.875rem; + font-weight: 600; color: var(--color-text-muted); text-decoration: none; + transition: background 0.15s, color 0.15s; +} +.admin-nav-link:hover { background: var(--color-primary-light); color: var(--color-text); } +.admin-nav-link-active { background: var(--color-primary-light); color: var(--color-primary-hover); } + /* ── Admin: control de respuestas (Etapa 3V) ── */ .admin-page { max-width: 1100px; margin: 0 auto; padding: 24px; } .admin-header { diff --git a/components/admin-nav-bar.tsx b/components/admin-nav-bar.tsx new file mode 100644 index 0000000..f1a339f --- /dev/null +++ b/components/admin-nav-bar.tsx @@ -0,0 +1,34 @@ +import { SignOutButton } from '@/app/admin/sign-out-button' + +interface AdminNavBarProps { + active: 'dashboard' | 'responses' | 'usuarios' +} + +const LINKS = [ + { id: 'dashboard', href: '/dashboard', label: 'Dashboard' }, + { id: 'responses', href: '/admin/responses', label: 'Respuestas' }, + { id: 'usuarios', href: '/admin/usuarios', label: 'Usuarios' }, +] as const + +// Nav compartido entre /dashboard, /admin/responses y /admin/usuarios — las +// tres pantallas detrás del login. Sin esto, cada una era una isla y el único +// modo de llegar a otra era escribir la URL a mano. +export function AdminNavBar({ active }: AdminNavBarProps) { + return ( +
+ + +
+ ) +}