diff --git a/frontend/src/components/CertificateList.tsx b/frontend/src/components/CertificateList.tsx index cd35e821..8866fa2e 100644 --- a/frontend/src/components/CertificateList.tsx +++ b/frontend/src/components/CertificateList.tsx @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { Trash2, ChevronUp, ChevronDown } from 'lucide-react' -import { useState, useMemo } from 'react' +import { useState, useMemo, useEffect } from 'react' import { useTranslation } from 'react-i18next' import BulkDeleteCertificateDialog from './dialogs/BulkDeleteCertificateDialog' @@ -46,6 +46,15 @@ export default function CertificateList() { const [selectedIds, setSelectedIds] = useState>(new Set()) const [showBulkDeleteDialog, setShowBulkDeleteDialog] = useState(false) + useEffect(() => { + setSelectedIds(prev => { + const validIds = new Set(certificates.map(c => c.id).filter((id): id is number => id != null)) + const reconciled = new Set([...prev].filter(id => validIds.has(id))) + if (reconciled.size === prev.size) return prev + return reconciled + }) + }, [certificates]) + const deleteMutation = useMutation({ mutationFn: async (id: number) => { await deleteCertificate(id)