Proyecto final: dashboard React
El objetivo es construir un dashboard React completo para gestionar productos y pedidos. Debe aplicar arquitectura, rutas, server state, formularios, accesibilidad, testing y despliegue.
Funcionalidades
- Login simulado.
- Listado de productos con busqueda y paginacion.
- Detalle de producto.
- Crear y editar producto.
- Listado de pedidos.
- Estado vacio, loading y error.
- Proteccion de rutas privadas.
- Tests de flujos principales.
Arquitectura
txt
src/
app/
router.tsx
providers.tsx
features/
auth/
products/
orders/
shared/
ui/
hooks/
lib/Rutas
txt
/login
/products
/products/:id
/products/new
/ordersProviders
tsx
export function AppProviders({ children }: { children: React.ReactNode }) {
return (
<QueryClientProvider client={queryClient}>
<AuthProvider>{children}</AuthProvider>
</QueryClientProvider>
)
}Server state
Productos:
tsx
function useProducts(params: ProductFilters) {
return useQuery({
queryKey: ["products", params],
queryFn: () => fetchProducts(params)
})
}Crear producto:
tsx
function useCreateProduct() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: createProduct,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["products"] })
}
})
}URL state
La busqueda debe vivir en URL:
txt
/products?search=keyboard&page=2Asi se puede compartir enlace y volver atras correctamente.
Formulario
Campos:
- Nombre.
- SKU.
- Precio.
- Stock.
- Activo.
Validaciones:
- Nombre obligatorio.
- SKU obligatorio.
- Precio mayor o igual a 0.
- Stock entero mayor o igual a 0.
Accesibilidad
Checklist:
- Inputs con label.
- Errores asociados con
aria-describedby. - Botones reales.
- Foco visible.
- Navegacion con teclado.
- Mensajes de guardado con
role="status".
Testing
Tests minimos:
- Login permite entrar.
- Productos muestra loading y luego lista.
- Busqueda actualiza URL.
- Crear producto invalida cache.
- Error de API muestra mensaje.
- Formulario muestra errores accesibles.
Despliegue
Build:
bash
npm run buildServidor SPA:
txt
todas las rutas internas -> index.htmlCriterios de calidad
- Componentes de UI no llaman directamente a la API.
- Hooks encapsulan server state.
- Formularios tienen validacion clara.
- Estados loading/error/empty estan implementados.
- Tests cubren flujos criticos.
- No hay secretos en variables frontend.
- La app se puede desplegar como archivos estaticos.
