import { IconHelp, IconSearch } from "@tabler/icons-react"; import { useState } from "react"; import Alert from "react-bootstrap/Alert"; import { deleteCertificate, downloadCertificate } from "src/api/backend"; import { Button, HasPermission, LoadingPage } from "src/components"; import { useCertificates } from "src/hooks"; import { T } from "src/locale"; import { showCustomCertificateModal, showDeleteConfirmModal, showDNSCertificateModal, showHelpModal, showHTTPCertificateModal, showRenewCertificateModal, } from "src/modals"; import { CERTIFICATES, MANAGE } from "src/modules/Permissions"; import { showError, showObjectSuccess } from "src/notifications"; import Table from "./Table"; export default function TableWrapper() { const [search, setSearch] = useState(""); const { isFetching, isLoading, isError, error, data } = useCertificates([ "owner", "dead_hosts", "proxy_hosts", "redirection_hosts", "streams", ]); if (isLoading) { return ; } if (isError) { return {error?.message || "Unknown error"}; } const handleDelete = async (id: number) => { await deleteCertificate(id); showObjectSuccess("certificate", "deleted"); }; const handleDownload = async (id: number) => { try { await downloadCertificate(id); } catch (err: any) { showError(err.message); } }; let filtered = null; if (search && data) { filtered = data?.filter( (item) => item.domainNames.some((domain: string) => domain.toLowerCase().includes(search)) || item.niceName.toLowerCase().includes(search), ); } else if (search !== "") { // this can happen if someone deletes the last item while searching setSearch(""); } return (

{data?.length ? (
setSearch(e.target.value.toLowerCase().trim())} />
) : null} {data?.length ? (
showDeleteConfirmModal({ title: , onConfirm: () => handleDelete(id), invalidations: [["certificates"], ["certificate", id]], children: , }) } /> ); }