import { useRouter } from "next/router"; import { subject } from "@casl/ability"; import { faChevronLeft } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { format } from "date-fns"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DeleteActionModal, EmptyState, Spinner } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { withProjectPermission } from "@app/hoc"; import { usePopUp } from "@app/hooks"; import { useDeleteIdentityFromWorkspace, useGetWorkspaceIdentityMembershipDetails } from "@app/hooks/api"; import { IdentityProjectAdditionalPrivilegeSection } from "./components/IdentityProjectAdditionalPrivilegeSection"; import { IdentityRoleDetailsSection } from "./components/IdentityRoleDetailsSection"; export const IdentityDetailsPage = withProjectPermission( () => { const router = useRouter(); const { currentWorkspace } = useWorkspace(); const workspaceId = currentWorkspace?.id || ""; const identityId = router.query.identityId as string; const { data: identityMembershipDetails, isLoading: isMembershipDetailsLoading } = useGetWorkspaceIdentityMembershipDetails(workspaceId, identityId); const { mutateAsync: deleteMutateAsync, isLoading: isDeletingIdentity } = useDeleteIdentityFromWorkspace(); const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "deleteIdentity", "upgradePlan" ] as const); const onRemoveIdentitySubmit = async () => { try { await deleteMutateAsync({ identityId, workspaceId }); createNotification({ text: "Successfully removed identity from project", type: "success" }); handlePopUpClose("deleteIdentity"); router.push(`/project/${workspaceId}/members?selectedTab=identities`); } catch (err) { console.error(err); const error = err as any; const text = error?.response?.data?.message ?? "Failed to remove identity from project"; createNotification({ text, type: "error" }); } }; if (isMembershipDetailsLoading) { return (
); } return (
{identityMembershipDetails ? ( <>

Project Identity Access

{(isAllowed) => ( )}
Name {identityMembershipDetails && (

{identityMembershipDetails?.identity?.name}

)}
Joined on{" "} {identityMembershipDetails?.createdAt && format(new Date(identityMembershipDetails?.createdAt || ""), "yyyy-MM-dd")}
handlePopUpToggle("deleteIdentity", isOpen)} deleteKey="remove" onDeleteApproved={() => onRemoveIdentitySubmit()} /> ) : ( )}
); }, { action: ProjectPermissionActions.Read, subject: ProjectPermissionSub.Identity } );