diff --git a/src/components/admin/ArchiveManagementTable.tsx b/src/components/admin/ArchiveManagementTable.tsx index c0eacdb..449abf8 100644 --- a/src/components/admin/ArchiveManagementTable.tsx +++ b/src/components/admin/ArchiveManagementTable.tsx @@ -25,6 +25,7 @@ interface CaCertificate { issuer_name?: string; issuer_serial?: string; family_id?: string; + last_synced_at?: string; } interface ArchiveManagementTableProps { @@ -45,16 +46,26 @@ export default function ArchiveManagementTable({ return type.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()); }; - const filteredCertificates = useMemo(() => { - return certificates.filter((cert) => { - const search = searchTerm.toLowerCase(); - return ( - cert.common_name.toLowerCase().includes(search) || - cert.ca_type.toLowerCase().includes(search) || - cert.serial_number.toLowerCase().includes(search) || - cert.uuid.toLowerCase().includes(search) - ); - }); + const filteredAndSortedCertificates = useMemo(() => { + return [...certificates] + .filter((cert) => { + const search = searchTerm.toLowerCase(); + return ( + cert.common_name.toLowerCase().includes(search) || + cert.ca_type.toLowerCase().includes(search) || + cert.serial_number.toLowerCase().includes(search) || + cert.uuid.toLowerCase().includes(search) + ); + }) + .sort((a, b) => { + // Primary Sort: Validity Period (Latest first) + const dateA = new Date(a.valid_from).getTime(); + const dateB = new Date(b.valid_from).getTime(); + if (dateB !== dateA) return dateB - dateA; + + // Secondary Sort: Family ID + return (a.family_id || "").localeCompare(b.family_id || ""); + }); }, [certificates, searchTerm]); return ( @@ -102,10 +113,23 @@ export default function ArchiveManagementTable({ - {filteredCertificates.map((cert) => ( + {filteredAndSortedCertificates.map((cert) => ( - {cert.uuid} +
+ {cert.uuid} + {cert.last_synced_at ? ( +
+ + Synced to CDN +
+ ) : ( +
+ + Local Only +
+ )} +
{cert.family_id ? ( @@ -166,7 +190,7 @@ export default function ArchiveManagementTable({
))} - {filteredCertificates.length === 0 && ( + {filteredAndSortedCertificates.length === 0 && ( No versions found. diff --git a/src/messages/en.json b/src/messages/en.json index 9f2af93..dbfbc58 100644 --- a/src/messages/en.json +++ b/src/messages/en.json @@ -674,7 +674,7 @@ "status_valid": "Valid", "status_expired": "Expired", "self_signed": "Self-Signed", - "renew_button": "Renew Now", + "renew_button": "Renew", "no_ca_search": "No CAs matched \"{term}\"", "no_ca_found": "No Root CA certificates found. Start by initializing the Certification Authority." },