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 { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, EmptyState, Table, TableContainer, TableSkeleton, TBody, Td, Th, THead, Tooltip, Tr } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context"; import { CaStatus, CaType, useListCasByTypeAndProjectId } from "@app/hooks/api"; import { caStatusToNameMap, caTypeToNameMap, getCaStatusBadgeVariant } from "@app/hooks/api/ca/constants"; import { TInternalCertificateAuthority } from "@app/hooks/api/ca/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; type Props = { handlePopUpOpen: ( popUpName: keyof UsePopUpState<["installCaCert", "caCert", "ca", "deleteCa", "caStatus"]>, data?: { caId?: string; caName?: string; dn?: string; status?: CaStatus; } ) => void; }; export const CaTable = ({ handlePopUpOpen }: Props) => { const navigate = useNavigate(); const { currentProject } = useProject(); const { data, isPending } = useListCasByTypeAndProjectId(CaType.INTERNAL, currentProject.id); const cas = data as TInternalCertificateAuthority[]; return (
{isPending && } {!isPending && cas && cas.length > 0 && cas.map((ca) => { return ( navigate({ to: "/projects/cert-management/$projectId/ca/$caName", params: { projectId: currentProject.id, caName: ca.name } }) } > ); })}
Name Status Type Valid Until
{ca.name} {caStatusToNameMap[ca.status]} {caTypeToNameMap[ca.configuration.type]}

{ca.configuration.notAfter ? format(new Date(ca.configuration.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", { caName: ca.name, status: ca.status === CaStatus.ACTIVE ? CaStatus.DISABLED : CaStatus.ACTIVE }); }} disabled={!isAllowed} icon={} > {`${ca.status === CaStatus.ACTIVE ? "Disable" : "Enable"} CA`} )} )} {(isAllowed) => ( { e.stopPropagation(); handlePopUpOpen("deleteCa", { caName: ca.name }); }} disabled={!isAllowed} icon={} > Delete CA )}
{!isPending && data?.length === 0 && ( )}
); };