Crear páginas de administración en Next.js para Sistema KOND. Usar cuando: creando una nueva vista en pages/admin/, añadiendo sección a panel admin, creando página con datos de Supabase + fallback localStorage, añadiendo withAdminAuth, creando métricas, reportes, formularios o listados administrativos.
next-app/pages/admin/localStoragedynamic + ssr: false (recomendado para páginas con localStorage o charts)Usar cuando la página:
localStoragewithAdminAuthUsar cuando la página:
mounted guard para evitar hydrationpages/admin/nombre-pagina.jsstyles/nombre-pagina.module.css./assets/{{NOMBRE_PAGINA}} y {{DESCRIPCION}}../../utils/supabase*.jsnext-app/utils/sidebar.js| Regla | Motivo |
|---|---|
Siempre usar withAdminAuth(Componente) en el export | Protección de ruta |
ssr: false en dynamic() cuando hay localStorage | Evita crash durante SSR |
Fallback a localStorage en el catch del loadData | Funciona sin API |
Inicializar fechas y valores de new Date() dentro de useEffect | Hydration mismatch |
Usar escapeHtml() de ../../utils/utils.js antes de insertar HTML dinámico | XSS |
Llamar a setLoading(false) siempre en el finally | Loading state infinito |
// Layout y autenticación
import Layout from '../../components/Layout'
import withAdminAuth from '../../components/withAdminAuth'
// React
import { useState, useEffect, useMemo, useCallback } from 'react'
// Next.js
import dynamic from 'next/dynamic'
import Link from 'next/link'
import { useRouter } from 'next/router'
// Utilidades del proyecto
import { formatCurrency, formatDate } from '../../utils/catalogUtils'
// Acceso a datos (elegir según entidad)
import { getAllProductos, createProducto, updateProducto } from '../../utils/supabaseProducts'
import { getMovimientos } from '../../utils/supabaseFinanzas'
import { getPedidosCatalogo } from '../../utils/supabasePedidos'
next-app/pages/admin/withAdminAuth en el export defaultloadData tiene try/catch con fallback a localStoragefinally llama a setLoading(false)localStorage o librerías client-only → tiene dynamic + ssr: falsenext-app/styles/*.module.cssnew Date() fuera de useEffect