diff --git a/src/pages/Sellers.tsx b/src/pages/Sellers.tsx index a7f024b..fa0d37b 100644 --- a/src/pages/Sellers.tsx +++ b/src/pages/Sellers.tsx @@ -1,7 +1,8 @@ import { useEffect, useMemo, useState } from 'react'; import { Link, useOutletContext } from 'react-router-dom'; -import { ArrowRight, BriefcaseBusiness, Search } from 'lucide-react'; +import { BriefcaseBusiness, ChevronRight, Search } from 'lucide-react'; import DateRangePicker from '../components/DateRangePicker'; +import PaginationControls from '../components/PaginationControls'; import RefreshStatus from '../components/RefreshStatus'; import { fetchSellerAnalytics } from '../dataService'; import { formatDisplayName, removeTrailingSellerId } from '../displayFormatters'; @@ -15,6 +16,8 @@ const Sellers = () => { const [sellers, setSellers] = useState([]); const [isLoading, setIsLoading] = useState(true); const [search, setSearch] = useState(''); + const [currentPage, setCurrentPage] = useState(1); + const [itemsPerPage, setItemsPerPage] = useState(10); useEffect(() => { let isMounted = true; @@ -39,6 +42,10 @@ const Sellers = () => { const totalOrders = sellers.reduce((sum, seller) => sum + seller.orderCount, 0); const totalCustomers = sellers.reduce((sum, seller) => sum + seller.customerCount, 0); const topSeller = sellers[0]; + const totalPages = Math.ceil(visibleSellers.length / itemsPerPage); + const safeCurrentPage = Math.min(currentPage, totalPages || 1); + const startIndex = (safeCurrentPage - 1) * itemsPerPage; + const paginatedSellers = visibleSellers.slice(startIndex, startIndex + itemsPerPage); return (
@@ -80,31 +87,46 @@ const Sellers = () => {
{isLoading && !sellers.length ? (
{[1, 2, 3, 4].map(item =>
)}
) : visibleSellers.length ? ( -
- {visibleSellers.map((seller, index) => ( - -
-
{index + 1}
-
-

{formatDisplayName(removeTrailingSellerId(seller.name))}

-

{seller.id.startsWith('name:') ? 'Sem ID Tiny' : `ID ${seller.id}`}

-
-
-

Receita

{formatCurrency(seller.revenue)}

-

Pedidos

{formatNumber(seller.orderCount)}

-

Clientes

{formatNumber(seller.customerCount)}

-

Ticket médio

{formatCurrency(seller.averageTicket)}

- - - ))} -
+ <> +
+ + + + + + + + + + + + + + + {paginatedSellers.map((seller, index) => ( + + + + + + + + + + + ))} + +
PosiçãoNome do vendedorReceitaPedidosClientesTicket médioProdutos vendidosAções
{startIndex + index + 1}

{formatDisplayName(removeTrailingSellerId(seller.name))}

{seller.id.startsWith('name:') ? 'Sem ID Tiny' : `ID ${seller.id}`}

{formatCurrency(seller.revenue)}{formatNumber(seller.orderCount)}{formatNumber(seller.customerCount)}{formatCurrency(seller.averageTicket)}{formatNumber(seller.quantitySold)} un. ({formatNumber(seller.orderCount)} {seller.orderCount === 1 ? 'pedido' : 'pedidos'})Ver detalhes
+
+ { setItemsPerPage(pageSize); setCurrentPage(1); }} /> + ) : (

Nenhum vendedor encontrado.

Ajuste a busca ou o período selecionado.

)}