diff --git a/src/pages/Clients.tsx b/src/pages/Clients.tsx index 0e508a2..f7d2f44 100644 --- a/src/pages/Clients.tsx +++ b/src/pages/Clients.tsx @@ -1,13 +1,18 @@ import { useMemo, useState, useEffect } from 'react'; import { Link, useOutletContext } from 'react-router-dom'; import { Search, ChevronRight, Filter, ChevronLeft } from 'lucide-react'; -import type { OrderData } from '../types'; +import type { OrderData, DateRange } from '../types'; import { parseOrderDate } from '../dataService'; +import DateRangePicker from '../components/DateRangePicker'; type SortOption = 'recent' | 'spent_desc' | 'spent_asc' | 'items_desc' | 'items_asc'; const Clients = () => { - const { ordersData } = useOutletContext<{ ordersData: OrderData[] }>(); + const { dateRange, setDateRange, ordersData } = useOutletContext<{ + dateRange: DateRange, + setDateRange: (range: DateRange) => void, + ordersData: OrderData[] + }>(); const [searchTerm, setSearchTerm] = useState(''); const [sortBy, setSortBy] = useState('recent'); @@ -15,13 +20,17 @@ const Clients = () => { const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); - // Reset to first page when search or sort changes + // Reset to first page when search, sort, or date changes useEffect(() => { setCurrentPage(1); - }, [searchTerm, sortBy]); + }, [searchTerm, sortBy, dateRange]); const clientsData = useMemo(() => { - const orders = ordersData; + const orders = ordersData.filter(order => { + const orderDate = parseOrderDate(order.Data_Pedido); + return orderDate >= dateRange.start && orderDate <= dateRange.end; + }); + const clientMap: Record, lastPurchase: number }> = {}; orders.forEach(order => { @@ -65,7 +74,7 @@ const Clients = () => { default: return 0; } }); - }, [searchTerm, sortBy, ordersData]); + }, [searchTerm, sortBy, ordersData, dateRange]); // Pagination logic const totalPages = Math.ceil(clientsData.length / itemsPerPage); @@ -78,13 +87,18 @@ const Clients = () => { return (
-
+

Clientes

Métricas de engajamento e histórico de consumo dos seus clientes.

-
+
+ +
-
+
setSearchTerm(e.target.value)} - className="w-full md:w-64 bg-dark-card border border-dark-border text-dark-text rounded-xl pl-10 pr-4 py-2.5 focus:outline-none focus:border-brand-primary hover:border-brand-primary transition-colors shadow-sm" + className="w-full sm:w-64 bg-dark-card border border-dark-border text-dark-text rounded-xl pl-10 pr-4 py-2.5 focus:outline-none focus:border-brand-primary hover:border-brand-primary transition-colors shadow-sm" />