'use client'; import Link from 'next/link'; import { useState } from 'react'; import { useSuspenseQuery } from '@tanstack/react-query'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { leadByIdOptions } from '../api/queries'; import type { LeadReferenceData } from '../api/types'; import { LeadAssignmentDialog } from './lead-assignment-dialog'; import { LeadFollowupPanel } from './lead-followup-panel'; import { LeadForm } from './lead-form'; function FieldItem({ label, value }: { label: string; value: string | null | undefined }) { return (
{label}
{value || '-'}
); } export function LeadDetail({ leadId, referenceData, canUpdate, canDelete, canAssign }: { leadId: string; referenceData: LeadReferenceData; canUpdate: boolean; canDelete: boolean; canAssign: boolean; }) { const { data } = useSuspenseQuery(leadByIdOptions(leadId)); const lead = data.lead; const [editOpen, setEditOpen] = useState(false); const [assignOpen, setAssignOpen] = useState(false); return (

{lead.code}

{lead.statusLabel ?? lead.status}

Lead workspace for marketing qualification before sales opportunity handoff

{canAssign ? ( ) : null} {canUpdate ? ( ) : null}
Lead Summary Follow-ups Linked Opportunities Activity Linked Opportunities {lead.linkedOpportunities.length === 0 ? (
No linked opportunities yet.
) : ( lead.linkedOpportunities.map((opportunity) => (
{opportunity.code} {opportunity.status}
{opportunity.title}
Owner: {opportunity.assignedToName ?? '-'}
)) )}
Activity {lead.activity.length === 0 ? (
No activity yet.
) : ( lead.activity.map((activity) => (
{activity.action}
{activity.actorName ?? activity.userId} -{' '} {new Date(activity.createdAt).toLocaleString()}
)) )}
Workspace Status
); }