import { faArrowDown, faArrowUp, faArrowUpRightFromSquare, faCertificate, faEdit, faEllipsis, faMagnifyingGlass, faPlus, faTrash, faUser } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { motion } from "framer-motion"; import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, EmptyState, IconButton, Input, Pagination, Spinner, Table, TableContainer, TableSkeleton, TBody, Td, Th, THead, Tooltip, Tr } from "@app/components/v2"; import { ProjectPermissionKmipActions, ProjectPermissionSub, useProject, useProjectPermission, useSubscription } from "@app/context"; import { getUserTablePreference, PreferenceKey, setUserTablePreference } from "@app/helpers/userTablePreferences"; import { usePagination, usePopUp, useResetPageHelper } from "@app/hooks"; import { OrderByDirection } from "@app/hooks/api/generic/types"; import { useGetKmipClientsByProjectId } from "@app/hooks/api/kmip"; import { KmipClientOrderBy, TKmipClient } from "@app/hooks/api/kmip/types"; import { CreateKmipClientCertificateModal } from "./CreateKmipClientCertificateModal"; import { DeleteKmipClientModal } from "./DeleteKmipClientModal"; import { KmipClientCertificateModal } from "./KmipClientCertificateModal"; import { KmipClientModal } from "./KmipClientModal"; export const KmipClientTable = () => { const { currentProject } = useProject(); const projectId = currentProject?.id ?? ""; const { offset, limit, orderBy, orderDirection, setOrderDirection, search, debouncedSearch, setPage, setSearch, perPage, page, setPerPage } = usePagination(KmipClientOrderBy.Name, { initPerPage: getUserTablePreference("kmipClientTable", PreferenceKey.PerPage, 20) }); const handlePerPageChange = (newPerPage: number) => { setPerPage(newPerPage); setUserTablePreference("kmipClientTable", PreferenceKey.PerPage, newPerPage); }; const { data, isPending, isFetching } = useGetKmipClientsByProjectId({ projectId, offset, limit, search: debouncedSearch, orderBy, orderDirection }); const { permission } = useProjectPermission(); const { subscription } = useSubscription(); const { kmipClients = [], totalCount = 0 } = data ?? {}; useResetPageHelper({ totalCount, offset, setPage }); const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp([ "upsertKmipClient", "deleteKmipClient", "generateKmipClientCert", "displayKmipClientCert", "upgradePlan" ] as const); const handleSort = () => { setOrderDirection((prev) => prev === OrderByDirection.ASC ? OrderByDirection.DESC : OrderByDirection.ASC ); }; const cannotEditKmipClient = permission.cannot( ProjectPermissionKmipActions.UpdateClients, ProjectPermissionSub.Kmip ); const cannotDeleteKmipClient = permission.cannot( ProjectPermissionKmipActions.DeleteClients, ProjectPermissionSub.Kmip ); const cannotGenerateKmipClientCertificate = permission.cannot( ProjectPermissionKmipActions.GenerateClientCertificates, ProjectPermissionSub.Kmip ); return (

KMIP Clients

Documentation{" "}
{(isAllowed) => ( )}
setSearch(e.target.value)} leftIcon={} placeholder="Search clients by name..." /> {isPending && } {!isPending && kmipClients.length > 0 && kmipClients.map((kmipClient) => { const { name, id, description, permissions } = kmipClient; return ( ); })}
Name
Description Permissions {isFetching ? : null}
{name} {description} {[permissions.join(", ")]}
handlePopUpOpen("generateKmipClientCert", kmipClient) } icon={} iconPos="left" isDisabled={cannotGenerateKmipClientCertificate} > Generate Certificate
handlePopUpOpen("upsertKmipClient", kmipClient)} icon={} iconPos="left" isDisabled={cannotEditKmipClient} > Edit KMIP Client
handlePopUpOpen("deleteKmipClient", kmipClient)} icon={} iconPos="left" isDisabled={cannotDeleteKmipClient} > Delete KMIP Client
{!isPending && totalCount > 0 && ( setPage(newPage)} onChangePerPage={handlePerPageChange} /> )} {!isPending && kmipClients.length === 0 && ( 0 ? "No KMIP clients match search filter" : "No KMIP clients have been added to this project" } icon={faUser} /> )}
handlePopUpToggle("deleteKmipClient", isOpen)} kmipClient={popUp.deleteKmipClient.data as TKmipClient} /> handlePopUpToggle("upsertKmipClient", isOpen)} kmipClient={popUp.upsertKmipClient.data as TKmipClient | null} /> handlePopUpToggle("generateKmipClientCert", isOpen)} kmipClient={popUp.generateKmipClientCert.data as TKmipClient | null} displayNewClientCertificate={(certificate) => handlePopUpOpen("displayKmipClientCert", certificate) } /> handlePopUpToggle("displayKmipClientCert", isOpen)} certificate={popUp.displayKmipClientCert.data} /> handlePopUpToggle("upgradePlan", isOpen)} text="KMIP requires an enterprise plan." />
); };