'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 (
);
}
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
);
}