import { subject } from "@casl/ability"; import { faCheck, faChevronDown, faCopy, faEdit, faKey, 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 { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DeleteActionModal, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, IconButton, Modal, ModalContent, Tag, Tooltip } from "@app/components/v2"; import { ProjectPermissionIdentityActions, ProjectPermissionSub, useProject } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { usePopUp, useTimedReset } from "@app/hooks"; import { identityAuthToNameMap, TProjectIdentity, useDeleteProjectIdentity } from "@app/hooks/api"; import { IdentityProjectMembershipV1 } from "@app/hooks/api/identities/types"; import { ProjectIdentityModal } from "@app/pages/project/AccessControlPage/components/IdentityTab/components/ProjectIdentityModal"; type Props = { identity: TProjectIdentity; isOrgIdentity?: boolean; membership: IdentityProjectMembershipV1; }; export const ProjectIdentityDetailsSection = ({ identity, isOrgIdentity, membership }: Props) => { const [copyTextId, isCopyingId, setCopyTextId] = useTimedReset({ initialState: "Copy ID to clipboard" }); const { currentProject } = useProject(); const { mutateAsync: deleteIdentity } = useDeleteProjectIdentity(); const navigate = useNavigate(); const { popUp, handlePopUpToggle, handlePopUpOpen } = usePopUp([ "editIdentity", "deleteIdentity" ] as const); const handleDeleteIdentity = async () => { try { await deleteIdentity({ identityId: identity.id, projectId: identity.projectId! }); navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management`, search: { selectedTab: "identities" } }); } catch { createNotification({ type: "error", text: "Failed to delete project machine identity" }); } }; return (

Details

{!isOrgIdentity && ( )} {(isAllowed) => ( } onClick={async () => { handlePopUpOpen("editIdentity"); }} disabled={!isAllowed} > Edit Machine Identity )} {(isAllowed) => ( { handlePopUpOpen("deleteIdentity"); }} icon={} disabled={!isAllowed} > Delete Machine Identity )}

Machine Identity ID

{identity.id}

{ navigator.clipboard.writeText(identity.id); setCopyTextId("Copied"); }} >

Managed By

{identity.projectId ? "Project" : "Organization"}

{!isOrgIdentity && ( <>

Last Login Auth Method

{membership.lastLoginAuthMethod ? identityAuthToNameMap[membership.lastLoginAuthMethod] : "-"}

Last Login Time

{membership.lastLoginTime ? format(membership.lastLoginTime, "PPpp") : "-"}

Delete Protection

{identity.hasDeleteProtection ? "On" : "Off"}

)}

Metadata

{identity?.metadata?.length ? (
{identity.metadata?.map((el) => (
{el.key}
{el.value}
))}
) : (

-

)}
handlePopUpToggle("editIdentity", open)} > handlePopUpToggle("editIdentity", false)} /> handlePopUpToggle("deleteIdentity", isOpen)} deleteKey="confirm" onDeleteApproved={handleDeleteIdentity} />
); };