'use client'; import { useState, useEffect } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Ticket, AlertCircle, Filter } from 'lucide-react'; import { Switch } from '@/components/ui/switch'; import { Label } from '@/components/ui/label'; import { format } from 'date-fns'; interface RelatedTicketsModalProps { configItemId: number; open: boolean; onOpenChange: (open: boolean) => void; } export function RelatedTicketsModal({ configItemId, open, onOpenChange, }: RelatedTicketsModalProps) { const [tickets, setTickets] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [hideRmmAlerts, setHideRmmAlerts] = useState(true); useEffect(() => { if (open && configItemId) { fetchRelatedTickets(); } }, [open, configItemId]); const fetchRelatedTickets = async () => { setLoading(true); setError(null); try { const response = await fetch(`/api/config-items/${configItemId}/tickets`); if (!response.ok) { throw new Error('Failed to fetch related tickets'); } const result = await response.json(); setTickets(result.tickets || []); } catch (err) { console.error('Error fetching related tickets:', err); setError(err instanceof Error ? err.message : 'An error occurred'); } finally { setLoading(false); } }; return (
Related Tickets Tickets associated with this configuration item
{!loading && !error && tickets.length > 0 && (

Total Tickets

{tickets.length}

Open

{tickets.filter((t: any) => t.status !== 'Complete' && t.status !== 'Closed').length}

)}
{loading && (
)} {error && (

Error: {error}

)} {!loading && !error && (
{/* Filter Toggle */}
{tickets.filter((ticket: any) => !hideRmmAlerts || ticket.source !== 'RMM Alert').length > 0 ? (
Ticket # Title Status Priority Assigned To Created {tickets .filter((ticket: any) => !hideRmmAlerts || ticket.source !== 'RMM Alert') .map((ticket: any) => ( {ticket.ticketNumber}
{ticket.title || '-'}
{ticket.status || '-'} {ticket.priority || '-'} {ticket.assignedResourceName || '-'} {ticket.createDate ? format(new Date(ticket.createDate), 'MMM d, yyyy') : '-'}
))}
) : (

{hideRmmAlerts && tickets.length > 0 ? 'All tickets are RMM Alerts (filtered out)' : 'No related tickets found' }

{hideRmmAlerts && tickets.length > 0 ? 'Toggle the filter above to show RMM Alert tickets' : 'This configuration item has no associated tickets' }

)}
)}
); }