- Create COMPONENTES-FRONTEND.md with detailed documentation of all 17 components - Document 3 reusable components: Layout, ClabeDisplay, CodiQR - Document 14 page components with props, hooks, dependencies, and line counts - Update FRONTEND_INVENTORY.yml with expanded component details - Update _INDEX.yml to include new documentation file Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
16 KiB
16 KiB
Catalogo de Componentes Frontend - MiChangarrito
Version: 1.0.0 Actualizado: 2026-01-20 Framework: React 19.2.0 + TypeScript Bundler: Vite 7.2.4 Estilos: TailwindCSS 4.1.18
Indice
Resumen Ejecutivo
| Metrica | Valor |
|---|---|
| Total Componentes Reutilizables | 3 |
| Total Paginas | 14 |
| Total Contexts | 1 (AuthContext) |
| Total Lineas de Codigo (aprox) | ~5,500 |
Componentes de Layout
Layout.tsx
- Archivo:
src/components/Layout.tsx - Lineas: 178
- Descripcion: Layout principal de la aplicacion con sidebar responsive y navegacion completa.
- Props: Ninguna (usa
<Outlet />de react-router-dom) - Estado interno:
sidebarOpen: boolean- Control de sidebar mobile
- Hooks usados:
useState- Estado del sidebaruseNavigate- Navegacion programaticauseAuth- Contexto de autenticacion
- Dependencias:
react-router-dom(Outlet, NavLink, useNavigate)lucide-react(16 iconos: LayoutDashboard, Package, ShoppingCart, Users, CreditCard, Boxes, Settings, Menu, X, Store, LogOut, Gift, FileText, Truck, Coins, QrCode)clsx- Clases condicionalesAuthContext- Usuario y logout
- Funcionalidades:
- Sidebar fijo en desktop (lg:)
- Sidebar overlay en mobile con backdrop oscuro
- Navegacion a 12 rutas principales
- Avatar con iniciales del tenant
- Boton de logout
- Header mobile con hamburger menu
Componentes de Pagos
ClabeDisplay.tsx
- Archivo:
src/components/payments/ClabeDisplay.tsx - Lineas: 113
- Descripcion: Muestra y permite copiar la CLABE virtual del tenant para recibir transferencias SPEI.
- Props:
showCreateButton?: boolean- Mostrar boton para crear CLABE (default: true)beneficiaryName?: string- Nombre del beneficiario
- Estado interno:
copied: boolean- Indica si se copio la CLABE
- Hooks usados:
useState- Estado de copiadouseQuery- Fetch de CLABE existenteuseMutation- Creacion de CLABEuseQueryClient- Invalidacion de cache
- Dependencias:
@tanstack/react-query(useQuery, useMutation, useQueryClient)lucide-react(Copy, Check, Building)codiSpeiApi- API de CoDi/SPEI
- Funcionalidades:
- Mostrar CLABE formateada (XXX XXX XXXX XXXX XXXX)
- Copiar al clipboard con feedback visual
- Crear CLABE virtual si no existe
- Estados de loading y vacio
CodiQR.tsx
- Archivo:
src/components/payments/CodiQR.tsx - Lineas: 168
- Descripcion: Genera y muestra QR de cobro CoDi con temporizador de expiracion.
- Props:
amount: number- Monto a cobrar (requerido)description?: string- Descripcion del cobrosaleId?: string- ID de venta asociadaonSuccess?: () => void- Callback al confirmar pagoonCancel?: () => void- Callback al cancelar
- Estado interno:
transactionId: string | null- ID de transaccion generadatimeLeft: number- Segundos restantes (inicia en 300)
- Hooks usados:
useState- Estado del QR y timeruseEffect- Generacion automatica y countdownuseMutation- Generar QRuseQuery- Polling del estado (cada 3s)
- Dependencias:
@tanstack/react-querylucide-react(QrCode, Clock, Check, X, RefreshCw)codiSpeiApi- API de CoDi/SPEI
- Funcionalidades:
- Genera QR automaticamente al montar
- Countdown de 5 minutos
- Polling cada 3 segundos para verificar pago
- Estados: loading, confirmado, expirado
- Regenerar QR
Paginas
Autenticacion
Login.tsx
- Archivo:
src/pages/Login.tsx - Lineas: 104
- Descripcion: Pagina de inicio de sesion con telefono y PIN.
- Props: Ninguna (export default)
- Estado interno:
phone: string- Telefono (10 digitos)pin: string- PIN (4-6 digitos)error: string- Mensaje de errorisLoading: boolean- Estado de carga
- Hooks usados:
useState- Estados del formulariouseNavigate- Redireccion post-loginuseAuth- Funcion login
- Dependencias:
react-router-dom(useNavigate, Link)AuthContext- Autenticacion
- Validaciones:
- Telefono: 10 digitos numericos
- PIN: 4-6 digitos numericos
- Ruta:
/login(publica)
Register.tsx
- Archivo:
src/pages/Register.tsx - Lineas: 242
- Descripcion: Pagina de registro de nuevos negocios.
- Props: Ninguna (export default)
- Estado interno:
formData: object- Datos del formulario completoerror: string- Mensaje de errorisLoading: boolean- Estado de carga
- Hooks usados:
useState- Estados del formulariouseNavigate- Redireccion post-registrouseAuth- Funcion register
- Dependencias:
react-router-dom(useNavigate, Link)AuthContext- Autenticacion
- Campos del formulario:
name- Nombre del negocio (requerido)ownerName- Nombre del propietario (requerido)businessType- Tipo de negocio (select)phone- Telefono 10 digitos (requerido)pin- PIN 4-6 digitos (requerido)confirmPin- Confirmacion de PIN (requerido)email- Email (opcional)
- Tipos de negocio: tiendita, fonda, taqueria, tortilleria, verduleria, otro
- Ruta:
/register(publica)
Dashboard y Operaciones
Dashboard.tsx
- Archivo:
src/pages/Dashboard.tsx - Lineas: 270
- Descripcion: Panel principal con metricas, pedidos recientes y alertas de stock.
- Estado interno: Ninguno (todo via React Query)
- Hooks usados:
useQuery(x3) - Stats, pedidos recientes, stock bajo
- Dependencias:
@tanstack/react-querylucide-react(TrendingUp, ShoppingCart, Users, CreditCard, Package, AlertCircle, Loader2)- APIs: dashboardApi, ordersApi, inventoryApi
- Secciones:
- Grid de 4 tarjetas de estadisticas
- Pedidos recientes (ultimos 5)
- Alertas de stock bajo
- Componentes internos:
LoadingSpinner- Indicador de cargaErrorMessage- Mensaje de error
- Ruta:
/dashboard
Products.tsx
- Archivo:
src/pages/Products.tsx - Lineas: 512
- Descripcion: Catalogo CRUD de productos con busqueda y filtrado por categoria.
- Estado interno:
search: string- Termino de busquedacategory: string- Filtro de categoriashowModal: boolean- Modal crear/editareditingProduct: Product | null- Producto en ediciondeletingProduct: Product | null- Producto a eliminarformData: ProductFormData- Datos del formularioformError: string | null- Error del formulario
- Hooks usados:
useState(x7) - Estados del CRUDuseQuery- Lista de productosuseMutation(x3) - Create, update, deleteuseQueryClient- Invalidacion
- Dependencias:
@tanstack/react-querylucide-react(Search, Plus, Edit, Trash2, Package, X, AlertCircle, Loader2)productsApi
- Categorias: bebidas, botanas, lacteos, panaderia, limpieza, abarrotes, otros
- Ruta:
/products
Orders.tsx
- Archivo:
src/pages/Orders.tsx - Lineas: 250
- Descripcion: Gestion de pedidos con flujo de estados.
- Estado interno:
filter: string- Filtro de estado
- Hooks usados:
useState- FiltrouseQuery(x2) - Pedidos filtrados y todosuseMutation- Cambio de estadouseQueryClient- Invalidacion
- Dependencias:
@tanstack/react-querylucide-react(Clock, CheckCircle, XCircle, ChefHat, Package, Loader2, AlertCircle, RefreshCw)clsxordersApi
- Estados de pedido: pending, confirmed, preparing, ready, completed, cancelled
- Flujo: pending -> confirmed -> preparing -> ready -> completed
- Ruta:
/orders
Customers.tsx
- Archivo:
src/pages/Customers.tsx - Lineas: 390
- Descripcion: Directorio de clientes con CRUD y balance de fiado.
- Estado interno:
search: string- BusquedaisModalOpen: boolean- Modal crear/editareditingCustomer: Customer | nullformData: CustomerFormDataformError: string | null
- Hooks usados:
useState(x5)useQuery- Lista clientesuseMutation(x2) - Create, updateuseQueryClient
- Dependencias:
@tanstack/react-querylucide-react(Search, Plus, Phone, Mail, MapPin, CreditCard, X, Loader2, AlertCircle, Edit2)customersApi
- Informacion mostrada: nombre, telefono, email, direccion, compras, total gastado, fiado
- Ruta:
/customers
Inventory.tsx
- Archivo:
src/pages/Inventory.tsx - Lineas: 357
- Descripcion: Control de existencias con movimientos y alertas.
- Estado interno:
showLowStock: boolean- Toggle filtro stock bajo
- Hooks usados:
useStateuseQuery(x4) - Productos, movimientos, stock bajo, alertas
- Dependencias:
@tanstack/react-querylucide-react(Package, TrendingUp, TrendingDown, AlertTriangle, Plus, Minus, Loader2, AlertCircle, RefreshCw)clsx- APIs: productsApi, inventoryApi
- Secciones:
- Banner de alertas
- Cards de resumen (unidades, valor, stock bajo)
- Tabla de inventario con barras de progreso
- Movimientos recientes
- Ruta:
/inventory
Finanzas
Fiado.tsx
- Archivo:
src/pages/Fiado.tsx - Lineas: 660
- Descripcion: Gestion de cuentas de credito con pagos y recordatorios.
- Estado interno:
filter: 'all' | 'pending' | 'overdue'- FiltroshowNewFiadoModal: booleanshowPaymentModal: booleanselectedFiado: Fiado | null
- Hooks usados:
useState(x4)useMemo(x3) - Stats, filtrado, pagos recientesuseQuery(x2) - Fiados, clientesuseMutation(x2) - Crear fiado, registrar pagouseQueryClient
- Dependencias:
@tanstack/react-querylucide-react(CreditCard, AlertTriangle, CheckCircle, Clock, Plus, Loader2, X, DollarSign)clsx- APIs: fiadosApi, customersApi
- Componentes internos:
NewFiadoModal- Crear nuevo fiadoPaymentModal- Registrar pago
- Ruta:
/fiado
CodiSpei.tsx
- Archivo:
src/pages/CodiSpei.tsx - Lineas: 450
- Descripcion: Cobros via CoDi (QR) y SPEI (CLABE virtual).
- Estado interno:
activeTab: 'codi' | 'spei'qrAmount: stringqrDescription: stringcopied: boolean
- Hooks usados:
useState(x4)useQuery(x4) - Transacciones CoDi, info SPEI, transacciones SPEIuseMutation(x2) - Generar QR, crear CLABEuseQueryClient
- Dependencias:
@tanstack/react-querylucide-react(QrCode, CreditCard, Copy, Check, Clock, ArrowDownLeft, RefreshCw, Plus, Smartphone)codiSpeiApi
- Tabs:
- CoDi: Generar QR, historial de cobros
- SPEI: Card con CLABE, historial de transferencias
- Ruta:
/codi-spei
Invoices.tsx
- Archivo:
src/pages/Invoices.tsx - Lineas: 668
- Descripcion: Facturacion electronica CFDI 4.0 con timbrado y envio.
- Estado interno:
filter: string- Filtro de estadoshowConfig: boolean- Modal configuracionshowNewInvoice: boolean- Modal nueva factura
- Hooks usados:
useState(x3)useQuery(x3) - Facturas, resumen, config fiscaluseMutation(x2) - Timbrar, enviaruseQueryClient
- Dependencias:
@tanstack/react-querylucide-react(FileText, Send, XCircle, CheckCircle, Clock, Download, Plus, Settings, AlertCircle)clsxinvoicesApi
- Componentes internos:
TaxConfigModal- Configuracion fiscal (RFC, regimen, PAC)NewInvoiceModal- Crear factura con conceptos
- Estados factura: draft, pending, stamped, sent, cancelled
- Ruta:
/invoices
Tokens.tsx
- Archivo:
src/pages/Tokens.tsx - Lineas: 329
- Descripcion: Tienda de tokens para servicios premium con Stripe checkout.
- Estado interno:
selectedPackage: string | null
- Hooks usados:
useStateuseQuery(x3) - Balance, paquetes, historialuseMutation- Compra con redirect a Stripe
- Dependencias:
@tanstack/react-querylucide-react(Coins, Package, TrendingUp, Clock, Check, ShoppingCart, MessageSquare, FileText, Sparkles)billingApi
- Secciones:
- Card de balance con gradiente
- Grid de costos por servicio
- Grid de paquetes de tokens
- Historial de uso
- Ruta:
/tokens
Marketplace y Extras
Marketplace.tsx
- Archivo:
src/pages/Marketplace.tsx - Lineas: 731
- Descripcion: Marketplace B2B para comprar a proveedores.
- Estado interno:
view: 'suppliers' | 'orders' | 'favorites'selectedCategory: string | nullsearchQuery: stringselectedSupplier: anyshowCart: booleancart: { product, quantity }[]
- Hooks usados:
useState(x6)useQuery(x3) - Proveedores, ordenes, favoritosuseMutation- Crear ordenuseQueryClient
- Dependencias:
@tanstack/react-querylucide-react(Store, Search, Star, Heart, ShoppingCart, Package, Truck, Clock, CheckCircle, XCircle, MapPin, Phone, ChevronRight)clsxmarketplaceApi
- Componentes internos:
SupplierCard- Tarjeta de proveedorOrderCard- Tarjeta de ordenSupplierDetailModal- Detalle con productosCartModal- Carrito de compras
- Categorias: bebidas, botanas, lacteos, pan, abarrotes, limpieza
- Ruta:
/marketplace
Referrals.tsx
- Archivo:
src/pages/Referrals.tsx - Lineas: 271
- Descripcion: Sistema de referidos con codigo unico y recompensas.
- Estado interno:
copied: boolean
- Hooks usados:
useStateuseQuery(x2) - Stats, lista de referidos
- Dependencias:
@tanstack/react-querylucide-react(Gift, Users, Copy, Share2, Check, Clock, X)referralsApi
- Secciones:
- Card de compartir con codigo
- Grid de estadisticas
- Como funciona (3 pasos)
- Lista de referidos
- Ruta:
/referrals
Settings.tsx
- Archivo:
src/pages/Settings.tsx - Lineas: 166
- Descripcion: Configuracion del negocio (mock data - pendiente API).
- Estado interno: Ninguno (formularios no controlados)
- Hooks usados: Ninguno
- Dependencias:
lucide-react(Store, CreditCard, Bell, MessageSquare, Shield)
- Secciones:
- Informacion del negocio
- Configuracion de fiado
- WhatsApp Business
- Notificaciones
- Plan de suscripcion
- Estado: MOCK DATA - Pendiente implementar endpoints backend
- Ruta:
/settings
Contexts
AuthContext
- Archivo:
src/contexts/AuthContext.tsx - Lineas: ~120
- Descripcion: Gestion de autenticacion y sesion del usuario.
- Provee:
user: User | null- Usuario autenticadotenant: Tenant | null- Tenant/negocioisAuthenticated: boolean- Estado de autenticacionisLoading: boolean- Cargando sesionlogin(phone, pin): Promise<void>- Iniciar sesionregister(data): Promise<void>- Registrar negociologout(): void- Cerrar sesion
- Persistencia: localStorage (accessToken, refreshToken, user, tenant)
Servicios API
lib/api.ts
- Archivo:
src/lib/api.ts - Lineas: ~400
- Descripcion: Cliente Axios con todos los endpoints agrupados.
Grupos de API:
| Grupo | Endpoints |
|---|---|
authApi |
register, login, refresh, changePin |
productsApi |
getAll, getById, create, update, delete |
ordersApi |
getAll, getById, create, updateStatus |
customersApi |
getAll, getById, create, update, getFiado |
inventoryApi |
getMovements, createMovement, getLowStock, getAlerts |
dashboardApi |
getStats, getSalesChart, getTopProducts |
fiadosApi |
getAll, getPending, create, pay, cancel |
invoicesApi |
getAll, getSummary, getTaxConfig, saveTaxConfig, create, stamp, send, cancel, download |
marketplaceApi |
getSuppliers, getSupplierProducts, getOrders, createOrder, getFavorites, addFavorite |
referralsApi |
getStats, getMyReferrals, generateCode, validateCode |
billingApi |
getTokenBalance, getTokenPackages, getTokenUsage, purchaseTokens |
codiSpeiApi |
getClabe, createClabe, generateQr, getCodiStatus, getCodiTransactions, getSpeiTransactions |
Interceptores:
- Request: Agrega Bearer token automaticamente
- Response: Maneja 401, intenta refresh token, limpia localStorage si falla