import { useState } from 'react'; import { AnimatePresence, motion } from 'motion/react'; import { Button } from '@/components/base/buttons/button'; import { TopBar } from '@/components/layout/top-bar'; import { KpiCards } from '@/components/leads/kpi-cards'; import { SourceGrid } from '@/components/leads/source-grid'; import { LeadCard } from '@/components/leads/lead-card'; import { AgingWidget } from '@/components/leads/aging-widget'; import { FollowupWidget } from '@/components/leads/followup-widget'; import { AlertsWidget } from '@/components/leads/alerts-widget'; import { AssignModal } from '@/components/modals/assign-modal'; import { WhatsAppSendModal } from '@/components/modals/whatsapp-send-modal'; import { MarkSpamModal } from '@/components/modals/mark-spam-modal'; import { MergeModal } from '@/components/modals/merge-modal'; import { useLeads } from '@/hooks/use-leads'; import { useFollowUps } from '@/hooks/use-follow-ups'; import { useData } from '@/providers/data-provider'; import type { Lead, LeadSource } from '@/types/entities'; export const LeadWorkspacePage = () => { const [sourceFilter, setSourceFilter] = useState(null); const { leads, total, updateLead } = useLeads({ source: sourceFilter ?? undefined, status: 'NEW' }); const { leads: allLeads } = useLeads(); const { overdue, upcoming } = useFollowUps(); const { agents, templates } = useData(); const displayLeads = leads.slice(0, 10); // Modal state const [isAssignOpen, setIsAssignOpen] = useState(false); const [isWhatsAppOpen, setIsWhatsAppOpen] = useState(false); const [isSpamOpen, setIsSpamOpen] = useState(false); const [isMergeOpen, setIsMergeOpen] = useState(false); const [targetLead, setTargetLead] = useState(null); const handleAssign = (lead: Lead) => { setTargetLead(lead); setIsAssignOpen(true); }; const handleMessage = (lead: Lead) => { setTargetLead(lead); setIsWhatsAppOpen(true); }; const handleMarkSpam = (lead: Lead) => { setTargetLead(lead); setIsSpamOpen(true); }; const handleMerge = (lead: Lead) => { setTargetLead(lead); setIsMergeOpen(true); }; const handleLogCall = () => { // placeholder }; const handleUpdateStatus = () => { // placeholder }; return (
{/* Main content */}

Lead Sources

Click to filter

New Leads

{displayLeads.map((lead) => ( ))} {displayLeads.length === 0 && (

No leads match the current filters.

)}
{/* Right sidebar */}
{/* Modals */} {targetLead && ( <> { updateLead(targetLead.id, { assignedAgent: agents.find((a) => a.id === agentId)?.name ?? null, leadStatus: 'CONTACTED', }); setIsAssignOpen(false); }} /> t.approvalStatus === 'APPROVED')} onSend={() => setIsWhatsAppOpen(false)} /> { updateLead(targetLead.id, { isSpam: true, leadStatus: 'LOST' }); setIsSpamOpen(false); }} /> l.id === targetLead.duplicateOfLeadId) ?? targetLead} onMerge={() => setIsMergeOpen(false)} onKeepSeparate={() => setIsMergeOpen(false)} /> )}
); };