mirror of
https://dev.azure.com/globalhealthx/EMR/_git/helix-engage
synced 2026-04-12 02:38:15 +00:00
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:
@@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user