import React, { useState } from 'react'; import { Users, Search, Filter, Plus, Eye, Edit, Mail, MoreHorizontal, Download, Send, UserCheck, UserX, Building, Phone, Mail as MailIcon, Calendar, DollarSign, Server } from 'lucide-react'; import { mockCustomers } from '../../data/mockData'; import DualCurrencyDisplay from '../../components/DualCurrencyDisplay'; import { formatDate, formatNumber } from '../../utils/format'; import { cn } from '../../utils/cn'; import Modal from '../../components/Modal'; import DetailView from '../../components/DetailView'; import AddCustomerForm from '../../components/forms/AddCustomerForm'; import EditCustomerForm from '../../components/forms/EditCustomerForm'; import MailComposeForm from '../../components/forms/MailComposeForm'; import MoreOptionsDropdown from '../../components/MoreOptionsDropdown'; const Customers: React.FC = () => { const [searchTerm, setSearchTerm] = useState(''); const [selectedStatus, setSelectedStatus] = useState('all'); const [isAddModalOpen, setIsAddModalOpen] = useState(false); const [isDetailModalOpen, setIsDetailModalOpen] = useState(false); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [isMailModalOpen, setIsMailModalOpen] = useState(false); const [showMoreOptions, setShowMoreOptions] = useState(null); const [selectedCustomer, setSelectedCustomer] = useState(null); const filteredCustomers = mockCustomers.filter(customer => { const matchesSearch = customer.name.toLowerCase().includes(searchTerm.toLowerCase()) || customer.email.toLowerCase().includes(searchTerm.toLowerCase()); const matchesStatus = selectedStatus === 'all' || customer.status === selectedStatus; return matchesSearch && matchesStatus; }); const stats = { total: mockCustomers.length, active: mockCustomers.filter(c => c.status === 'active').length, pending: mockCustomers.filter(c => c.status === 'pending').length, totalRevenue: mockCustomers.reduce((sum, c) => sum + c.totalSpent, 0) }; const handleAddCustomer = (data: any) => { console.log('Adding customer:', data); setIsAddModalOpen(false); }; const handleViewCustomer = (customer: any) => { setSelectedCustomer(customer); setIsDetailModalOpen(true); }; const handleEditCustomer = (customer: any) => { setSelectedCustomer(customer); setIsEditModalOpen(true); }; const handleMailCustomer = (customer: any) => { setSelectedCustomer(customer); setIsMailModalOpen(true); }; const handleMoreOptions = (customerId: string) => { setShowMoreOptions(showMoreOptions === customerId ? null : customerId); }; const getStatusBadge = (status: string) => { switch (status) { case 'active': return Active; case 'pending': return Pending; case 'inactive': return Inactive; default: return {status}; } }; const getTierBadge = (tier: string) => { switch (tier) { case 'platinum': return Platinum; case 'gold': return Gold; case 'silver': return Silver; default: return {tier}; } }; return (
{/* Header */}

Customers

Manage your customer relationships and accounts

{/* Stats Cards */}

Total Customers

{stats.total}

Active Customers

{stats.active}

Pending

{stats.pending}

Total Revenue

{/* Filters and Search */}
setSearchTerm(e.target.value)} className="input pl-10 w-full" />
{/* Customers Table */}
{filteredCustomers.map((customer) => ( ))}
Customer Contact Status Tier Total Spent Instances Last Active Actions

{customer.name}

{customer.email}

{customer.phone}

{getStatusBadge(customer.status)} {getTierBadge(customer.tier)}
{customer.instances}
{formatDate(customer.lastActive)}
{showMoreOptions === customer.id && ( handleViewCustomer(customer)} onDownloadReport={() => console.log('Download report')} onSendNotification={() => console.log('Send notification')} onChangeTier={() => console.log('Change tier')} onDeactivate={() => console.log('Deactivate customer')} onDelete={() => console.log('Delete customer')} onSendMail={() => handleMailCustomer(customer)} onClose={() => setShowMoreOptions(null)} /> )}
{/* Modals */} setIsAddModalOpen(false)} title="Add New Customer"> setIsAddModalOpen(false)} /> setIsDetailModalOpen(false)} title="Customer Details"> {selectedCustomer && } setIsEditModalOpen(false)} title="Edit Customer"> {selectedCustomer && setIsEditModalOpen(false)} />} setIsMailModalOpen(false)} title="Send Email"> {selectedCustomer && setIsMailModalOpen(false)} onCancel={() => setIsMailModalOpen(false)} />}
); }; export default Customers;