import { useState } from 'react'; import { Link, useNavigate, useParams } from 'react-router-dom'; import { useForm } from 'react-hook-form'; import { ArrowLeft, Briefcase, Mail, MapPin, Phone, Trash2 } from 'lucide-react'; import { PageHeader } from '@/components/app/AppLayout'; import { Card, CardBody, CardHeader, EmptyState } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Input, Textarea } from '@/components/ui/Input'; import { Badge } from '@/components/ui/Badge'; import { useClient, useDeleteClient, useUpdateClient, type ClientInput, } from '@/hooks/useClients'; import { useCases } from '@/hooks/useCases'; import { formatDate } from '@/lib/format'; export default function ClientDetailPage() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const client = useClient(id); const cases = useCases(id ? { clientId: id } : undefined); const update = useUpdateClient(id ?? ''); const del = useDeleteClient(); const [editing, setEditing] = useState(false); const { register, handleSubmit, reset, formState: { errors, isDirty }, } = useForm({ values: client.data ? { name: client.data.name, email: client.data.email, phone: client.data.phone, address: client.data.address, notes: client.data.notes, } : undefined, }); if (client.isLoading) { return
Loading…
; } if (!client.data) { return (

Client not found.

← Back to clients
); } async function onSave(values: ClientInput) { await update.mutateAsync({ name: values.name?.trim(), email: values.email?.toString().trim() || null, phone: values.phone?.toString().trim() || null, address: values.address?.toString().trim() || null, notes: values.notes?.toString().trim() || null, }); setEditing(false); } async function onDelete() { if (!id) return; if (!confirm(`Delete ${client.data?.name}? This cannot be undone.`)) return; await del.mutateAsync(id); navigate('/app/clients', { replace: true }); } return (
Back to clients ) : ( <> ) } />
{editing ? (