import { Dialog, Modal, ModalOverlay } from "@/components/application/modals/modal"; import { Button } from "@/components/base/buttons/button"; import { formatPhone, formatShortDate } from "@/lib/format"; import type { Lead } from "@/types/entities"; import { cx } from "@/utils/cx"; type MergeModalProps = { isOpen: boolean; onOpenChange: (open: boolean) => void; primaryLead: Lead; duplicateLead: Lead; onMerge: () => void; onKeepSeparate: () => void; }; type FieldRow = { label: string; primary: string; duplicate: string; }; const getLeadName = (lead: Lead) => { if (lead.contactName) { return `${lead.contactName.firstName} ${lead.contactName.lastName}`.trim(); } return "—"; }; const getLeadPhone = (lead: Lead) => { if (lead.contactPhone && lead.contactPhone.length > 0) { return formatPhone(lead.contactPhone[0]); } return "—"; }; const getLeadEmail = (lead: Lead) => lead.contactEmail?.[0]?.address ?? "—"; const buildFieldRows = (primary: Lead, duplicate: Lead): FieldRow[] => [ { label: "Name", primary: getLeadName(primary), duplicate: getLeadName(duplicate), }, { label: "Phone", primary: getLeadPhone(primary), duplicate: getLeadPhone(duplicate), }, { label: "Email", primary: getLeadEmail(primary), duplicate: getLeadEmail(duplicate), }, { label: "Source", primary: primary.leadSource ?? "—", duplicate: duplicate.leadSource ?? "—", }, { label: "Campaign", primary: primary.campaignId ?? "—", duplicate: duplicate.campaignId ?? "—", }, { label: "Created", primary: primary.createdAt ? formatShortDate(primary.createdAt) : "—", duplicate: duplicate.createdAt ? formatShortDate(duplicate.createdAt) : "—", }, { label: "Status", primary: primary.leadStatus ?? "—", duplicate: duplicate.leadStatus ?? "—", }, ]; const LeadCard = ({ label, isPrimary, fieldRows }: { label: string; isPrimary: boolean; fieldRows: FieldRow[] }) => (
{label}