diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 32ad739..9cb21dd 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -35,19 +35,24 @@ const Dashboard = () => { }); }, [dateRange, ordersData]); - const { totalRevenue, totalOrders, averageOrderValue, salesByProduct } = useMemo(() => { + const { totalRevenue, totalOrders, averageOrderValue, salesByProduct, revenueByProduct } = useMemo(() => { let revenue = 0; let totalItems = 0; const productSalesMap: Record = {}; + const productRevenueMap: Record = {}; filteredData.forEach(order => { - revenue += (order.Quantidade * order.Valor_Unitario); + const itemRevenue = order.Quantidade * order.Valor_Unitario; + revenue += itemRevenue; totalItems += order.Quantidade; const productName = order.Descricao_Produto.split(' TAMANHO')[0]; + if (productSalesMap[productName]) { productSalesMap[productName] += order.Quantidade; + productRevenueMap[productName] += itemRevenue; } else { productSalesMap[productName] = order.Quantidade; + productRevenueMap[productName] = itemRevenue; } }); @@ -59,7 +64,15 @@ const Dashboard = () => { fill: COLORS[index % COLORS.length] })); - return { totalRevenue: revenue, totalOrders: totalItems, averageOrderValue: revenue / (filteredData.length || 1), salesByProduct: productsData }; + const revenueData = Object.keys(productRevenueMap).map(key => ({ + name: key, + value: productRevenueMap[key] + })).sort((a, b) => b.value - a.value).slice(0, 10).map((item, index) => ({ + ...item, + fill: COLORS[index % COLORS.length] + })); + + return { totalRevenue: revenue, totalOrders: totalItems, averageOrderValue: revenue / (filteredData.length || 1), salesByProduct: productsData, revenueByProduct: revenueData }; }, [filteredData]); const formatCurrency = (value: number) => { @@ -146,26 +159,21 @@ const Dashboard = () => {
-

Distribuição de Produtos

+

Receita por Produto

- - {salesByProduct.map((_, index) => ( + + {revenueByProduct.map((_, index) => ( ))} - + } cursor={{ fill: '#222222' }} />
- {salesByProduct.map((entry, index) => ( + {revenueByProduct.map((entry, index) => (
{entry.name}