diff --git a/app/dashboard/storefront/customers/page.tsx b/app/dashboard/storefront/customers/page.tsx index 71341db..286ba93 100644 --- a/app/dashboard/storefront/customers/page.tsx +++ b/app/dashboard/storefront/customers/page.tsx @@ -35,10 +35,18 @@ import { Loader2, Users, ArrowUpDown, - MessageCircle + MessageCircle, + UserPlus, + MoreHorizontal } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, +} from "@/components/ui/dropdown-menu"; export default function CustomerManagementPage() { const router = useRouter(); @@ -70,6 +78,12 @@ export default function CustomerManagementPage() { ? a.totalSpent - b.totalSpent : b.totalSpent - a.totalSpent; } else if (sortConfig.column === "lastOrderDate") { + // Handle null lastOrderDate values + if (!a.lastOrderDate && !b.lastOrderDate) return 0; + if (!a.lastOrderDate) return sortConfig.direction === "asc" ? -1 : 1; + if (!b.lastOrderDate) return sortConfig.direction === "asc" ? 1 : -1; + + // Both have valid dates return sortConfig.direction === "asc" ? new Date(a.lastOrderDate).getTime() - new Date(b.lastOrderDate).getTime() : new Date(b.lastOrderDate).getTime() - new Date(a.lastOrderDate).getTime(); @@ -119,13 +133,18 @@ export default function CustomerManagementPage() { }; // Format date without time - const formatDate = (dateString: string) => { - const date = new Date(dateString); - return new Intl.DateTimeFormat('en-GB', { - day: '2-digit', - month: 'short', - year: 'numeric' - }).format(date); + const formatDate = (dateString: string | null | undefined) => { + if (!dateString) return "N/A"; + try { + const date = new Date(dateString); + return new Intl.DateTimeFormat('en-GB', { + day: '2-digit', + month: 'short', + year: 'numeric' + }).format(date); + } catch (error) { + return "N/A"; + } }; return ( @@ -206,11 +225,19 @@ export default function CustomerManagementPage() { {customers.map((customer) => ( setSelectedCustomer(customer)} > -
@{customer.telegramUsername || "Unknown"}
+
+ @{customer.telegramUsername || "Unknown"} + {!customer.hasOrders && ( + + + New + + )} +
ID: {customer.telegramUserId}
@@ -220,17 +247,23 @@ export default function CustomerManagementPage() { {formatCurrency(customer.totalSpent)} -
- - {customer.ordersByStatus.paid} Paid + {customer.hasOrders ? ( +
+ + {customer.ordersByStatus.paid} Paid + + + {customer.ordersByStatus.completed} Completed + + + {customer.ordersByStatus.shipped} Shipped + +
+ ) : ( + + No orders yet - - {customer.ordersByStatus.completed} Completed - - - {customer.ordersByStatus.shipped} Shipped - -
+ )}
))} @@ -253,6 +286,29 @@ export default function CustomerManagementPage() { Previous + + {totalPages > 2 && ( + + + + + + {Array.from({ length: totalPages }, (_, i) => i + 1).map((pageNum) => ( + handlePageChange(pageNum)} + className={`cursor-pointer ${pageNum === page ? 'bg-zinc-800 text-white' : 'text-gray-300'}`} + > + Page {pageNum} + + ))} + + + )} + - - - - - - - Order Statistics - - -
-
Total Orders:
+ + + + {selectedCustomer?.hasOrders ? "Order Statistics" : "Customer Information"} + + + + {selectedCustomer?.hasOrders ? ( + <> +
+
Total Orders
{selectedCustomer.totalOrders}
-
-
Total Spent:
+
+
Total Spent
{formatCurrency(selectedCustomer.totalSpent)}
-
-
First Order:
+
+
First Order
{formatDate(selectedCustomer.firstOrderDate)}
-
-
Last Order:
+
+
Last Order
{formatDate(selectedCustomer.lastOrderDate)}
- - -
+ + ) : ( + <> +
+
Status
+ + + New User + +
+
+
Registered
+
{formatDate(selectedCustomer?.firstOrderDate)}
+
+
+

+ This user hasn't placed any orders yet. +

+
+ + )} + + - - - Order Status Breakdown - - -
-
-

Paid

-

{selectedCustomer.ordersByStatus.paid}

-
-
-

Acknowledged

-

{selectedCustomer.ordersByStatus.acknowledged}

-
-
-

Shipped

-

{selectedCustomer.ordersByStatus.shipped}

-
-
-

Completed

-

{selectedCustomer.ordersByStatus.completed}

-
-
-
-
+
+ +
- )} +