'use client'; import { useState } from 'react'; import { useMutation, useSuspenseQuery } from '@tanstack/react-query'; import { toast } from 'sonner'; import { AlertModal } from '@/components/modal/alert-modal'; import { Icons } from '@/components/icons'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { deleteEnquiryFollowupMutation } from '../api/mutations'; import { enquiryFollowupsOptions } from '../api/queries'; import type { EnquiryReferenceData } from '../api/types'; import { FollowupFormSheet } from './followup-form-sheet'; export function EnquiryFollowupsTab({ enquiryId, customerId, referenceData, canCreate, canUpdate, canDelete }: { enquiryId: string; customerId: string; referenceData: EnquiryReferenceData; canCreate: boolean; canUpdate: boolean; canDelete: boolean; }) { const { data } = useSuspenseQuery(enquiryFollowupsOptions(enquiryId)); const [selectedId, setSelectedId] = useState(null); const [open, setOpen] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); const selected = data.items.find((item) => item.id === selectedId); const followupTypeMap = new Map(referenceData.followupTypes.map((item) => [item.id, item.label])); const deleteMutation = useMutation({ ...deleteEnquiryFollowupMutation, onSuccess: () => { toast.success('Follow-up deleted successfully'); setDeleteOpen(false); setSelectedId(null); }, onError: (error) => toast.error(error instanceof Error ? error.message : 'Failed to delete follow-up') }); return (
Follow-ups Track the latest contact moments, outcomes, and next steps for this enquiry.
{canCreate ? ( ) : null}
{!data.items.length ? (
No follow-ups recorded yet.
) : ( data.items.map((item) => (
{followupTypeMap.get(item.followupType) ?? 'Unknown type'} {new Date(item.followupDate).toLocaleDateString()}
{item.outcome ?

{item.outcome}

: null} {item.nextAction ? (

Next action: {item.nextAction}

) : null} {item.nextFollowupDate ? (

Next follow-up: {new Date(item.nextFollowupDate).toLocaleDateString()}

) : null} {item.notes ?

{item.notes}

: null}
)) )}
setDeleteOpen(false)} onConfirm={() => { if (selectedId) { deleteMutation.mutate({ enquiryId, followupId: selectedId }); } }} loading={deleteMutation.isPending} />
); }