import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { getTargets, deleteTarget } from '../api/client'; import PageHeader from '../components/PageHeader'; import DataTable from '../components/DataTable'; import type { Column } from '../components/DataTable'; import StatusBadge from '../components/StatusBadge'; import ErrorState from '../components/ErrorState'; import { formatDateTime } from '../api/utils'; import type { Target } from '../api/types'; const typeLabels: Record = { nginx: 'NGINX', f5_bigip: 'F5 BIG-IP', iis: 'IIS', apache: 'Apache', haproxy: 'HAProxy', }; export default function TargetsPage() { const queryClient = useQueryClient(); const { data, isLoading, error, refetch } = useQuery({ queryKey: ['targets'], queryFn: () => getTargets(), }); const deleteMutation = useMutation({ mutationFn: deleteTarget, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['targets'] }), }); const columns: Column[] = [ { key: 'name', label: 'Target', render: (t) => (
{t.name}
{t.id}
), }, { key: 'type', label: 'Type', render: (t) => ( {typeLabels[t.type] || t.type} ), }, { key: 'hostname', label: 'Hostname', render: (t) => {t.hostname || '\u2014'}, }, { key: 'agent', label: 'Agent', render: (t) => {t.agent_id || '\u2014'}, }, { key: 'status', label: 'Status', render: (t) => , }, { key: 'created', label: 'Created', render: (t) => {formatDateTime(t.created_at)}, }, { key: 'actions', label: '', render: (t) => ( ), }, ]; return ( <>
{error ? ( refetch()} /> ) : ( )}
); }