import { faBan, faCertificate, faEllipsis, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; import { format } from "date-fns"; import { twMerge } from "tailwind-merge"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Badge, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, EmptyState, Table, TableContainer, TableSkeleton, TBody, Td, Th, THead, Tooltip, Tr } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { CaStatus, useListWorkspaceCas } from "@app/hooks/api"; import { caStatusToNameMap, caTypeToNameMap, getCaStatusBadgeVariant } from "@app/hooks/api/ca/constants"; import { ProjectType } from "@app/hooks/api/workspace/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; type Props = { handlePopUpOpen: ( popUpName: keyof UsePopUpState< ["installCaCert", "caCert", "ca", "deleteCa", "caStatus", "upgradePlan"] >, data?: { caId?: string; dn?: string; status?: CaStatus; description?: string; } ) => void; }; export const CaTable = ({ handlePopUpOpen }: Props) => { const navigate = useNavigate(); const { currentWorkspace } = useWorkspace(); const { data, isPending } = useListWorkspaceCas({ projectSlug: currentWorkspace?.slug ?? "" }); return (
{isPending && } {!isPending && data && data.length > 0 && data.map((ca) => { return ( navigate({ to: `/${ProjectType.CertificateManager}/$projectId/ca/$caId` as const, params: { projectId: currentWorkspace.id, caId: ca.id } }) } > ); })}
Friendly Name Status Type Valid Until
{ca.friendlyName} {caStatusToNameMap[ca.status]} {caTypeToNameMap[ca.type]}

{ca.notAfter ? format(new Date(ca.notAfter), "yyyy-MM-dd") : "-"}

{ca.status === CaStatus.PENDING_CERTIFICATE && ( {(isAllowed) => ( { e.stopPropagation(); handlePopUpOpen("installCaCert", { caId: ca.id }); }} disabled={!isAllowed} icon={} > Install CA Certificate )} )} {ca.status !== CaStatus.PENDING_CERTIFICATE && ( {(isAllowed) => ( { e.stopPropagation(); handlePopUpOpen("caCert", { caId: ca.id }); }} disabled={!isAllowed} icon={} > View Certificate )} )} {(ca.status === CaStatus.ACTIVE || ca.status === CaStatus.DISABLED) && ( {(isAllowed) => ( { e.stopPropagation(); handlePopUpOpen("caStatus", { caId: ca.id, status: ca.status === CaStatus.ACTIVE ? CaStatus.DISABLED : CaStatus.ACTIVE }); }} disabled={!isAllowed} icon={} > {`${ca.status === CaStatus.ACTIVE ? "Disable" : "Enable"} CA`} )} )} {(isAllowed) => ( { e.stopPropagation(); handlePopUpOpen("deleteCa", { caId: ca.id, dn: ca.dn }); }} disabled={!isAllowed} icon={} > Delete CA )}
{!isPending && data?.length === 0 && ( )}
); };