import { useEffect, useState } from "react"; import { faSparkles, faUser } from "@fortawesome/pro-duotone-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Badge } from "@/components/base/badges/badges"; import { useCallAssist } from "@/hooks/use-call-assist"; import { formatPhone, formatShortDate } from "@/lib/format"; import type { Lead, LeadActivity } from "@/types/entities"; import { cx } from "@/utils/cx"; import { AiChatPanel } from "./ai-chat-panel"; import { LiveTranscript } from "./live-transcript"; type ContextTab = "ai" | "lead360"; interface ContextPanelProps { selectedLead: Lead | null; activities: LeadActivity[]; callerPhone?: string; isInCall?: boolean; callUcid?: string | null; } export const ContextPanel = ({ selectedLead, activities, callerPhone, isInCall, callUcid }: ContextPanelProps) => { const [activeTab, setActiveTab] = useState("ai"); // Auto-switch to lead 360 when a lead is selected useEffect(() => { if (selectedLead) { // eslint-disable-next-line react-hooks/set-state-in-effect setActiveTab("lead360"); } }, [selectedLead?.id]); const { transcript, suggestions, connected: assistConnected, } = useCallAssist(isInCall ?? false, callUcid ?? null, selectedLead?.id ?? null, callerPhone ?? null); const callerContext = selectedLead ? { callerPhone: selectedLead.contactPhone?.[0]?.number ?? callerPhone, leadId: selectedLead.id, leadName: `${selectedLead.contactName?.firstName ?? ""} ${selectedLead.contactName?.lastName ?? ""}`.trim(), } : callerPhone ? { callerPhone } : undefined; return (
{/* Tab bar */}
{/* Tab content */}
{activeTab === "ai" && (isInCall ? ( ) : (
))} {activeTab === "lead360" && }
); }; const Lead360Tab = ({ lead, activities }: { lead: Lead | null; activities: LeadActivity[] }) => { if (!lead) { return (

Select a lead from the worklist to see their full profile.

); } const firstName = lead.contactName?.firstName ?? ""; const lastName = lead.contactName?.lastName ?? ""; const fullName = `${firstName} ${lastName}`.trim() || "Unknown"; const phone = lead.contactPhone?.[0]; const email = lead.contactEmail?.[0]?.address; const leadActivities = activities .filter((a) => a.leadId === lead.id) .sort((a, b) => new Date(b.occurredAt ?? b.createdAt ?? "").getTime() - new Date(a.occurredAt ?? a.createdAt ?? "").getTime()) .slice(0, 10); return (
{/* Profile */}

{fullName}

{phone &&

{formatPhone(phone)}

} {email &&

{email}

}
{lead.leadStatus && ( {lead.leadStatus} )} {lead.leadSource && ( {lead.leadSource} )} {lead.priority && lead.priority !== "NORMAL" && ( {lead.priority} )}
{lead.interestedService &&

Interested in: {lead.interestedService}

} {lead.leadScore !== null && lead.leadScore !== undefined &&

Lead score: {lead.leadScore}

}
{/* AI Insight */} {(lead.aiSummary || lead.aiSuggestedAction) && (
AI Insight
{lead.aiSummary &&

{lead.aiSummary}

} {lead.aiSuggestedAction &&

{lead.aiSuggestedAction}

}
)} {/* Activity timeline */} {leadActivities.length > 0 && (

Activity

{leadActivities.map((a) => (

{a.summary}

{a.activityType} {a.occurredAt ? ` ยท ${formatShortDate(a.occurredAt)}` : ""}

))}
)}
); };