import { useEffect, useState } from 'react' import MiTablero from '../components/MiTablero' import TableroGeneral from '../components/TableroGeneral' import type { AccionesTablero } from '../components/comunes' import { esRolConEquipo } from '../lib/mi-tablero' import { getMe, getSesion } from '../services/auth' import BannerModoLocal from '../components/BannerModoLocal' import DarkModeToggle from '../components/DarkModeToggle' type Vista = 'mia' | 'general' const VISTAS: { id: Vista; etiqueta: string; clave: string }[] = [ { id: 'mia', etiqueta: 'Mi tablero', clave: 'mi-tablero' }, { id: 'general', etiqueta: 'Tablero comercial', clave: 'tablero-comercial' }, ] /** * Tableros con vista por rol: cada tab se muestra solo si el módulo está * permitido en la matriz de roles del API (GET /auth/me → modulos). Con un * solo tab permitido no hay segmented control: la vista va directa. La * sección Equipo del tablero comercial sigue la regla de rol (esRolConEquipo). */ export default function DashboardPage() { const sesion = getSesion() const rol = sesion?.usuario.rol ?? 'vendedor' const conEquipo = esRolConEquipo(rol) // null = aún sin dato del API (sesiones viejas sin modulos): no se filtra const [permitidos, setPermitidos] = useState(() => sesion?.usuario.modulos ?? null) const [elegida, setElegida] = useState(null) const [acciones, setAcciones] = useState(null) useEffect(() => { getMe() .then((usuario) => setPermitidos(usuario.modulos ?? null)) .catch(() => {}) // si /me falla se mantiene lo que hubiera }, []) const permitidas = VISTAS.filter((v) => permitidos === null || permitidos.includes(v.clave)) const vista: Vista | null = permitidas.length === 0 ? null : permitidas.some((v) => v.id === elegida) ? elegida : permitidas[0]!.id return (
← Menú F FRASA Desarrollos
{permitidas.length > 1 && (
{permitidas.map((v) => ( ))}
)} {vista !== null && ( )}
{vista === null ? (

Tu rol no tiene tableros asignados por ahora.

) : vista === 'mia' ? ( ) : ( )}
) }