diff --git a/app/dashboard/storefront/customers/page.tsx b/app/dashboard/storefront/customers/page.tsx index 21edd31..228761d 100644 --- a/app/dashboard/storefront/customers/page.tsx +++ b/app/dashboard/storefront/customers/page.tsx @@ -38,10 +38,13 @@ import { ArrowUpDown, MessageCircle, UserPlus, - MoreHorizontal + MoreHorizontal, + Search, + X } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; import { DropdownMenu, DropdownMenuTrigger, @@ -52,6 +55,8 @@ import { export default function CustomerManagementPage() { const router = useRouter(); const [customers, setCustomers] = useState([]); + const [filteredCustomers, setFilteredCustomers] = useState([]); + const [searchQuery, setSearchQuery] = useState(""); const [loading, setLoading] = useState(true); const [page, setPage] = useState(1); const [totalPages, setTotalPages] = useState(1); @@ -93,6 +98,7 @@ export default function CustomerManagementPage() { }); setCustomers(sortedCustomers); + setFilteredCustomers(sortedCustomers); setTotalPages(Math.ceil(response.total / itemsPerPage)); } catch (err) { toast.error("Failed to fetch customers"); @@ -117,6 +123,21 @@ export default function CustomerManagementPage() { } }, [router]); + // Add filter function to filter customers when search query changes + useEffect(() => { + if (!searchQuery.trim()) { + setFilteredCustomers(customers); + } else { + const query = searchQuery.toLowerCase().trim(); + const filtered = customers.filter(customer => { + const usernameMatch = customer.telegramUsername?.toLowerCase().includes(query); + const userIdMatch = customer.telegramUserId.toString().includes(query); + return usernameMatch || userIdMatch; + }); + setFilteredCustomers(filtered); + } + }, [searchQuery, customers]); + const handlePageChange = (newPage: number) => { setPage(newPage); }; @@ -133,6 +154,10 @@ export default function CustomerManagementPage() { })); }; + const clearSearch = () => { + setSearchQuery(""); + }; + // Format date with time const formatDate = (dateString: string | null | undefined) => { if (!dateString) return "N/A"; @@ -161,7 +186,7 @@ export default function CustomerManagementPage() {
-
+
Show:
@@ -178,10 +203,33 @@ export default function CustomerManagementPage() {
-
+
+
+ +
+ setSearchQuery(e.target.value)} + className="pl-10 pr-10 py-2 w-full bg-black/40 border-zinc-700 text-white" + /> + {searchQuery && ( + + )} +
+ +
{loading ? "Loading..." - : `Showing ${customers.length} of ${totalPages * itemsPerPage} customers`} + : searchQuery + ? `Found ${filteredCustomers.length} matching customers` + : `Showing ${filteredCustomers.length} of ${totalPages * itemsPerPage} customers`}
@@ -189,13 +237,22 @@ export default function CustomerManagementPage() {
- ) : customers.length === 0 ? ( + ) : filteredCustomers.length === 0 ? (
-

No customers found

+

+ {searchQuery ? "No customers matching your search" : "No customers found"} +

- Once you have customers placing orders, they will appear here. + {searchQuery + ? "Try a different search term or clear the search" + : "Once you have customers placing orders, they will appear here."}

+ {searchQuery && ( + + )}
) : (
@@ -234,7 +291,7 @@ export default function CustomerManagementPage() { - {customers.map((customer) => ( + {filteredCustomers.map((customer) => (