"use client" import type React from "react" import { useState } from "react" import { Topbar } from "@/components/topbar" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { Plus, Search, Filter, MoreHorizontal, Eye, Edit, Trash2, Mail, Phone, Building } from "lucide-react" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { useTranslation } from "@/lib/i18n" type Contact = { id: string name: string email: string phone: string company: string position: string status: "Active" | "Inactive" | "Lead" | "Customer" avatar: string lastContact: string createdAt: string notes: string } const initialContacts: Contact[] = [ { id: "CONTACT-001", name: "Sarah Wilson", email: "sarah.wilson@techcorp.com", phone: "+1 (555) 123-4567", company: "TechCorp Inc.", position: "CTO", status: "Customer", avatar: "https://images.unsplash.com/photo-1494790108755-2616b612b786?w=150&h=150&fit=crop&crop=face", lastContact: "2024-01-15", createdAt: "2023-12-01", notes: "Key decision maker for enterprise software purchases", }, { id: "CONTACT-002", name: "Michael Chen", email: "m.chen@startupxyz.com", phone: "+1 (555) 234-5678", company: "StartupXYZ", position: "CEO", status: "Lead", avatar: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=150&h=150&fit=crop&crop=face", lastContact: "2024-01-14", createdAt: "2023-12-15", notes: "Interested in marketing automation solutions", }, { id: "CONTACT-003", name: "Emily Rodriguez", email: "emily.r@globalsolutions.com", phone: "+1 (555) 345-6789", company: "Global Solutions", position: "IT Director", status: "Active", avatar: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=150&h=150&fit=crop&crop=face", lastContact: "2024-01-12", createdAt: "2023-11-20", notes: "Evaluating cloud migration options", }, { id: "CONTACT-004", name: "David Park", email: "david.park@retailchain.com", phone: "+1 (555) 456-7890", company: "Retail Chain Co.", position: "Operations Manager", status: "Customer", avatar: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=150&h=150&fit=crop&crop=face", lastContact: "2024-01-08", createdAt: "2023-10-15", notes: "Recently implemented CRM system", }, ] const getStatusColor = (status: Contact["status"]) => { const colors = { Active: "bg-blue-100 text-blue-800", Inactive: "bg-gray-100 text-gray-800", Lead: "bg-yellow-100 text-yellow-800", Customer: "bg-green-100 text-green-800", } return colors[status] } export default function ContactsPage() { const { t } = useTranslation() const [contacts, setContacts] = useState(initialContacts) const [searchTerm, setSearchTerm] = useState("") const [statusFilter, setStatusFilter] = useState("all") const [isDialogOpen, setIsDialogOpen] = useState(false) const [editingContact, setEditingContact] = useState(null) const filteredContacts = contacts.filter((contact) => { const matchesSearch = contact.name.toLowerCase().includes(searchTerm.toLowerCase()) || contact.email.toLowerCase().includes(searchTerm.toLowerCase()) || contact.company.toLowerCase().includes(searchTerm.toLowerCase()) const matchesStatus = statusFilter === "all" || contact.status === statusFilter return matchesSearch && matchesStatus }) const handleAddContact = (contactData: Partial) => { const newContact: Contact = { id: `CONTACT-${String(contacts.length + 1).padStart(3, "0")}`, name: contactData.name || "", email: contactData.email || "", phone: contactData.phone || "", company: contactData.company || "", position: contactData.position || "", status: contactData.status || "Lead", avatar: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=150&h=150&fit=crop&crop=face", lastContact: new Date().toISOString().split("T")[0], createdAt: new Date().toISOString().split("T")[0], notes: contactData.notes || "", } setContacts([...contacts, newContact]) setIsDialogOpen(false) } const handleEditContact = (contactData: Partial) => { if (editingContact) { setContacts( contacts.map((contact) => (contact.id === editingContact.id ? { ...contact, ...contactData } : contact)), ) setEditingContact(null) setIsDialogOpen(false) } } const handleDeleteContact = (contactId: string) => { setContacts(contacts.filter((contact) => contact.id !== contactId)) } return (

{t("contacts.title")}

{t("contacts.description")}

{ setIsDialogOpen(false) setEditingContact(null) }} />
setSearchTerm(e.target.value)} />
{t("contacts.gridView")} {t("contacts.listView")}
{filteredContacts.map((contact) => (
{contact.name.split(" ").map((n) => n[0]).join("")}
{contact.name} {contact.position}
{t("contacts.actions")} {t("contacts.viewDetails")} { setEditingContact(contact) setIsDialogOpen(true) }} > {t("contacts.editContact")} handleDeleteContact(contact.id)}> {t("contacts.deleteContact")}
{contact.status} {new Date(contact.lastContact).toLocaleDateString()}
{contact.company}
{contact.email}
{contact.phone}
))}
{filteredContacts.map((contact) => (
{contact.name.split(" ").map((n) => n[0]).join("")}

{contact.name}

{contact.position} at {contact.company}

{contact.email} {contact.phone}
{contact.status}
{new Date(contact.lastContact).toLocaleDateString()}
{t("contacts.actions")} {t("contacts.viewDetails")} { setEditingContact(contact) setIsDialogOpen(true) }} > {t("contacts.editContact")} handleDeleteContact(contact.id)}> {t("contacts.deleteContact")}
))}
) } function ContactDialog({ contact, onSave, onCancel, }: { contact: Contact | null onSave: (data: Partial) => void onCancel: () => void }) { const { t } = useTranslation() const [formData, setFormData] = useState({ name: contact?.name || "", email: contact?.email || "", phone: contact?.phone || "", company: contact?.company || "", position: contact?.position || "", status: contact?.status || "Lead", notes: contact?.notes || "", }) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() onSave(formData) } return ( {contact ? t("contacts.editTitle") : t("contacts.addTitle")} {contact ? t("contacts.editDesc") : t("contacts.addDesc")}
setFormData({ ...formData, name: e.target.value })} required />
setFormData({ ...formData, email: e.target.value })} required />
setFormData({ ...formData, phone: e.target.value })} />
setFormData({ ...formData, company: e.target.value })} required />
setFormData({ ...formData, position: e.target.value })} />
) }