fix: wire all modals and lead activity slideout into Lead Workspace and All Leads pages

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-16 16:20:27 +05:30
parent d98da9a1ea
commit a119fb1b67
3 changed files with 165 additions and 15 deletions

View File

@@ -8,33 +8,50 @@ 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 type { LeadSource } from '@/types/entities';
import { useData } from '@/providers/data-provider';
import type { Lead, LeadSource } from '@/types/entities';
export const LeadWorkspacePage = () => {
const [sourceFilter, setSourceFilter] = useState<LeadSource | null>(null);
const { leads, total } = useLeads({ source: sourceFilter ?? undefined, status: 'NEW' });
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);
const handleAssign = () => {
// placeholder
// 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<Lead | null>(null);
const handleAssign = (lead: Lead) => {
setTargetLead(lead);
setIsAssignOpen(true);
};
const handleMessage = () => {
// placeholder
const handleMessage = (lead: Lead) => {
setTargetLead(lead);
setIsWhatsAppOpen(true);
};
const handleMarkSpam = () => {
// placeholder
const handleMarkSpam = (lead: Lead) => {
setTargetLead(lead);
setIsSpamOpen(true);
};
const handleMerge = () => {
// placeholder
const handleMerge = (lead: Lead) => {
setTargetLead(lead);
setIsMergeOpen(true);
};
const handleLogCall = () => {
@@ -97,6 +114,49 @@ export const LeadWorkspacePage = () => {
<AlertsWidget leads={allLeads} />
</aside>
</div>
{/* Modals */}
{targetLead && (
<>
<AssignModal
isOpen={isAssignOpen}
onOpenChange={setIsAssignOpen}
selectedLeads={[targetLead]}
agents={agents}
onAssign={(agentId) => {
updateLead(targetLead.id, {
assignedAgent: agents.find((a) => a.id === agentId)?.name ?? null,
leadStatus: 'CONTACTED',
});
setIsAssignOpen(false);
}}
/>
<WhatsAppSendModal
isOpen={isWhatsAppOpen}
onOpenChange={setIsWhatsAppOpen}
selectedLeads={[targetLead]}
templates={templates.filter((t) => t.approvalStatus === 'APPROVED')}
onSend={() => setIsWhatsAppOpen(false)}
/>
<MarkSpamModal
isOpen={isSpamOpen}
onOpenChange={setIsSpamOpen}
lead={targetLead}
onConfirm={() => {
updateLead(targetLead.id, { isSpam: true, leadStatus: 'LOST' });
setIsSpamOpen(false);
}}
/>
<MergeModal
isOpen={isMergeOpen}
onOpenChange={setIsMergeOpen}
primaryLead={targetLead}
duplicateLead={allLeads.find((l) => l.id === targetLead.duplicateOfLeadId) ?? targetLead}
onMerge={() => setIsMergeOpen(false)}
onKeepSeparate={() => setIsMergeOpen(false)}
/>
</>
)}
</div>
);
};