"use client"; import { useMemo } from "react"; import { iconArchive, iconBox, iconCart, iconDelivery, iconTag, iconUsersGroup } from "../_core/icons"; import { useOperatingDay } from "../_core/hooks/use-operating-day"; import { productsResource, shopCartsResource, usersResource, warehousesResource } from "../_core/services/entities"; import { QuickActionCard } from "./_components/quick-action-card"; import { StatCard } from "./_components/stat-card"; const ROLE_LABELS: Record = { admin: "administrador", cashier: "cajero" }; function money(value: number) { return value.toLocaleString("es-AR", { style: "currency", currency: "USD" }); } export default function AdminDashboardPage() { const { data: carts, isLoading: loadingCarts } = shopCartsResource.useList(); const { data: products, isLoading: loadingProducts } = productsResource.useList(); const { data: warehouses } = warehousesResource.useList(); const { data: users, isLoading: loadingUsers } = usersResource.useList(); const { start: operatingDayStart } = useOperatingDay(); const salesToday = useMemo(() => { if (!carts) return null; return carts .filter((c) => c.status === "paid" && new Date(c.createdAt) >= operatingDayStart) .reduce((sum, c) => sum + Number(c.totalPrice), 0); }, [carts, operatingDayStart]); const stockByProduct = useMemo(() => { const map = new Map(); for (const w of warehouses ?? []) map.set(w.productId, (map.get(w.productId) ?? 0) + w.stock); return map; }, [warehouses]); const lowStockCount = useMemo(() => { if (!products) return null; return products.filter((p) => (stockByProduct.get(p.id) ?? 0) <= p.minStock).length; }, [products, stockByProduct]); const usersByRole = useMemo(() => { const counts: Record = {}; for (const u of users ?? []) counts[u.role] = (counts[u.role] ?? 0) + 1; return counts; }, [users]); const usersHint = Object.entries(usersByRole) .map(([role, count]) => `${count} ${ROLE_LABELS[role] ?? role}${count === 1 ? "" : "s"}`) .join(", "); return (

Resumen

Estado general del negocio.

0 ? "En el catálogo" : "Conectá el catálogo para ver el total"} />

Accesos rápidos

); }