import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; import { useNavigate, useParams } from "@tanstack/react-router"; import { formatRelative } from "date-fns"; import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { Button, DeleteActionModal, EmptyState, PageHeader, Spinner } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useOrganization, useWorkspace } from "@app/context"; import { usePopUp } from "@app/hooks"; import { useDeleteUserFromWorkspace, useGetWorkspaceUserDetails } from "@app/hooks/api"; import { MemberProjectAdditionalPrivilegeSection } from "./components/MemberProjectAdditionalPrivilegeSection"; import { MemberRoleDetailsSection } from "./components/MemberRoleDetailsSection"; export const Page = () => { const navigate = useNavigate(); const membershipId = useParams({ strict: false, select: (el) => el.membershipId as string }); const { currentOrg } = useOrganization(); const { currentWorkspace } = useWorkspace(); const workspaceId = currentWorkspace?.id || ""; const { data: membershipDetails, isPending: isMembershipDetailsLoading } = useGetWorkspaceUserDetails(workspaceId, membershipId); const { mutateAsync: removeUserFromWorkspace, isPending: isRemovingUserFromWorkspace } = useDeleteUserFromWorkspace(); const { handlePopUpToggle, popUp, handlePopUpOpen, handlePopUpClose } = usePopUp([ "removeMember", "upgradePlan" ] as const); const handleRemoveUser = async () => { if (!currentOrg?.id || !currentWorkspace?.id || !membershipDetails?.user?.username) return; try { await removeUserFromWorkspace({ workspaceId: currentWorkspace.id, usernames: [membershipDetails?.user?.username], orgId: currentOrg.id }); createNotification({ text: "Successfully removed user from project", type: "success" }); navigate({ to: `/${currentWorkspace.type}/$projectId/access-management` as const, params: { projectId: currentWorkspace.id } }); } catch (error) { console.error(error); createNotification({ text: "Failed to remove user from the project", type: "error" }); } handlePopUpClose("removeMember"); }; if (isMembershipDetailsLoading) { return (
); } return (
{membershipDetails ? ( <> {(isAllowed) => ( )} handlePopUpOpen("upgradePlan", { description: "You can assign custom roles to members if you upgrade your Infisical plan." }) } /> handlePopUpToggle("removeMember", isOpen)} onDeleteApproved={handleRemoveUser} /> handlePopUpToggle("upgradePlan", isOpen)} text={(popUp.upgradePlan?.data as { description: string })?.description} /> ) : ( )}
); }; export const MemberDetailsByIDPage = () => { const { t } = useTranslation(); return ( <> {t("common.head-title", { title: t("settings.members.title") })} ); };