Introducción
Al desarrollar un panel de administración utilizando el componente DashboardLayout
de @toolpad/core
, es común encontrarse con desafíos al gestionar las rutas y la navegación. En este artículo, abordaremos un problema específico: cómo la configuración del DashboardLayout
ignora la ruta base en los segmentos y ocasiona que los enlaces activos no se resalten correctamente en el menú lateral.
Configuración del Proyecto
Al implementar el diseño del panel, los componentes principales que estamos utilizando son AppProvider
y DashboardLayout
. Nuestras rutas están organizadas bajo /dashboard
, lo que lleva a una estructura similar a:
/dashboard
/dashboard/products
/dashboard/employees
Implementación del Sidebar
Para ilustrar la estructura, a continuación se presenta un ejemplo del componente PortalSidebar
que hemos configurado:
import React from "react";
import PropTypes from "prop-types";
import Box from "@mui/material/Box";
import { AppProvider } from "@toolpad/core/AppProvider";
import { DashboardLayout } from "@toolpad/core/DashboardLayout";
import { NAVIGATION } from "./navItems";
function PortalSidebar({ children }) {
return (
<AppProvider
navigation={NAVIGATION}
basename="dashboard/"
>
<DashboardLayout>
<Box
sx={{
py: 4,
px: 3,
display: "flex",
flexDirection: "column",
alignItems: "flex-start",
}}
>
{children}
</Box>
</DashboardLayout>
</AppProvider>
);
}
PortalSidebar.propTypes = {
children: PropTypes.node,
};
export default PortalSidebar;
Definiendo los Elementos de Navegación
Los elementos que aparecen en la barra lateral se definen en un archivo separado (navItems.js
), donde cada segmento representa una ruta:
import { HomeOutlined, ShoppingCartOutlined } from "@mui/icons-material";
export const NAVIGATION = [
{
segment: "",
title: "Dashboard",
icon: <HomeOutlined />,
},
{
segment: "products",
title: "Products",
icon: <ShoppingCartOutlined />,
},
];
El Problema Encontrado
Al intentar corregir el enrutamiento, se probó anteponer dashboard/
a los valores de segmento en NAVIGATION
. Aunque esto orientó los elementos de la barra lateral a las URLs correctas, el problema surgió cuando se notó que el resaltado activo desapareció. El DashboardLayout
no marcaba el elemento de navegación actual como activo, a pesar de que estábamos en la ruta correcta.
Métodos Intentados
- Prefijación de Rutas: Agregar
dashboard/
a los segmentos funcionó, pero ignoró la lógica del estado activo. - Uso de
basename
: La inclusión debasename="dashboard/"
enAppProvider
no resolvió el problema. - Campo
href
: Intentar agregar un campohref
personalizado a cada elemento de navegación fue igualmente ineficaz, ya que Toolpad parece depender exclusivamente del segmento para la navegación.
Conclusión
El manejo adecuado de las rutas y la navegación en aplicaciones construidas con Toolpad puede ser complejo, especialmente con la configuración de componentes como DashboardLayout
. La falta de un resaltado activo es una limitación frustrante que podría requerir una modificación más profunda en la forma en que se gestionan las rutas y los estados activos.
Si algún miembro de la comunidad ha encontrado una solución o tiene consejos sobre cómo manejar este problema, sería de gran ayuda compartir esta información. La colaboración es clave para mejorar nuestras implementaciones y resolver desafíos similares en el futuro.