import { useMemo, useState } from 'react'; import { Link, useOutletContext } from 'react-router-dom'; import { Search, ChevronRight, Package, TrendingUp } from 'lucide-react'; import DateRangePicker from '../components/DateRangePicker'; import type { OrderData, DateRange } from '../types'; const Products = () => { const { dateRange, setDateRange, ordersData } = useOutletContext<{ dateRange: DateRange, setDateRange: (range: DateRange) => void, ordersData: OrderData[] }>(); const [searchTerm, setSearchTerm] = useState(''); const productsData = useMemo(() => { const orders = ordersData; const productMap: Record = {}; orders.forEach(order => { const [day, month, year] = order.Data_Pedido.split('-').map(Number); const orderDate = new Date(year, month - 1, day); if (orderDate < dateRange.start || orderDate > dateRange.end) return; if (!productMap[order.ID_Produto]) { productMap[order.ID_Produto] = { id: order.ID_Produto, name: order.Descricao_Produto.split(' TAMANHO')[0], totalSold: 0, revenue: 0, lastPrice: order.Valor_Unitario }; } productMap[order.ID_Produto].totalSold += order.Quantidade; productMap[order.ID_Produto].revenue += (order.Quantidade * order.Valor_Unitario); productMap[order.ID_Produto].lastPrice = order.Valor_Unitario; }); let result = Object.values(productMap); if (searchTerm) { result = result.filter(p => p.name.toLowerCase().includes(searchTerm.toLowerCase()) || p.id.includes(searchTerm)); } return result.sort((a, b) => b.totalSold - a.totalSold); }, [dateRange, searchTerm, ordersData]); const formatCurrency = (value: number) => { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(value); }; return (

Produtos

Gestão de catálogo e performance de vendas por item.

setSearchTerm(e.target.value)} className="w-full md:w-64 bg-white dark:bg-dark-input border border-zinc-200 dark:border-dark-border text-zinc-900 dark:text-dark-text rounded-xl pl-10 pr-4 py-2.5 focus:outline-none focus:border-brand-primary focus:ring-2 focus:ring-brand-primary/20 transition-all shadow-sm" />
{productsData.map((product) => ( ))}
ID Produto Descrição Total Vendido Receita Gerada Ações
#{product.id}
{product.name}
Preço Atual: {formatCurrency(product.lastPrice)}
{product.totalSold} un.
{formatCurrency(product.revenue)} Ver Gráfico
); }; export default Products;