"use client"; import React, { useState, useEffect } from "react"; import { db } from "@/lib/firebase"; import { collection, onSnapshot, addDoc, deleteDoc, doc, updateDoc } from "firebase/firestore"; import Link from "next/link"; interface Product { id: string; name: string; category: string; price: number; stock: number; } export default function InventoryPage() { const [products, setProducts] = useState([]); const [isModalOpen, setIsModalOpen] = useState(false); const [newProduct, setNewProduct] = useState({ name: "", category: "", price: 0, stock: 0 }); useEffect(() => { const unsub = onSnapshot(collection(db, "products"), (snap) => { const data = snap.docs.map(doc => ({ id: doc.id, ...doc.data() } as Product)); setProducts(data); }); return () => unsub(); }, []); const handleAdd = async (e: React.FormEvent) => { e.preventDefault(); await addDoc(collection(db, "products"), newProduct); setIsModalOpen(false); setNewProduct({ name: "", category: "", price: 0, stock: 0 }); }; const handleDelete = async (id: string) => { if(confirm("¿Seguro que quieres eliminar este producto?")) { await deleteDoc(doc(db, "products", id)); } }; return (
← Volver al Dashboard

Gestión de Inventario

{/* Inventory Table */}
{products.map((p) => ( ))}
Nombre Categoría Precio Stock Acciones
{p.name} {p.category} ${Number(p.price).toLocaleString()}
10 ? 'bg-green-400' : 'bg-red-400'}`}> {p.stock} uds.
{/* Modal Mockup */} {isModalOpen && (

Nuevo Producto

setNewProduct({...newProduct, name: e.target.value})} className="w-full bg-white/5 border border-white/10 rounded-2xl px-6 py-4 outline-none focus:border-blue-500/50" /> setNewProduct({...newProduct, category: e.target.value})} className="w-full bg-white/5 border border-white/10 rounded-2xl px-6 py-4 outline-none focus:border-blue-500/50" />
setNewProduct({...newProduct, price: Number(e.target.value)})} className="w-full bg-white/5 border border-white/10 rounded-2xl px-6 py-4 outline-none focus:border-blue-500/50" /> setNewProduct({...newProduct, stock: Number(e.target.value)})} className="w-full bg-white/5 border border-white/10 rounded-2xl px-6 py-4 outline-none focus:border-blue-500/50" />
)}
); }