diff --git a/backend/src/server/routes/v1/project-membership-router.ts b/backend/src/server/routes/v1/project-membership-router.ts index ca7df196c..3c3a1ada4 100644 --- a/backend/src/server/routes/v1/project-membership-router.ts +++ b/backend/src/server/routes/v1/project-membership-router.ts @@ -39,7 +39,8 @@ export const registerProjectMembershipRouter = async (server: FastifyZodProvider email: true, firstName: true, lastName: true, - id: true + id: true, + username: true }).merge(UserEncryptionKeysSchema.pick({ publicKey: true })), roles: z.array( z.object({ @@ -98,7 +99,8 @@ export const registerProjectMembershipRouter = async (server: FastifyZodProvider email: true, firstName: true, lastName: true, - id: true + id: true, + username: true }).merge(UserEncryptionKeysSchema.pick({ publicKey: true })), roles: z.array( z.object({ diff --git a/frontend/src/views/Project/IdentityDetailsPage/IdentityDetailPage.tsx b/frontend/src/views/Project/IdentityDetailsPage/IdentityDetailPage.tsx index 29c7a7631..95aed14c5 100644 --- a/frontend/src/views/Project/IdentityDetailsPage/IdentityDetailPage.tsx +++ b/frontend/src/views/Project/IdentityDetailsPage/IdentityDetailPage.tsx @@ -3,11 +3,16 @@ 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, EmptyState, Spinner } from "@app/components/v2"; +import { Button, DeleteActionModal, EmptyState, Spinner } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { withProjectPermission } from "@app/hoc"; -import { useGetWorkspaceIdentityMembershipDetails } from "@app/hooks/api"; +import { usePopUp } from "@app/hooks"; +import { + useDeleteIdentityFromWorkspace, + useGetWorkspaceIdentityMembershipDetails +} from "@app/hooks/api"; import { IdentityProjectAdditionalPrivilegeSection } from "./components/IdentityProjectAdditionalPrivilegeSection"; import { IdentityRoleDetailsSection } from "./components/IdentityRoleDetailsSection"; @@ -23,6 +28,38 @@ export const IdentityDetailsPage = withProjectPermission( 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 (
@@ -67,6 +104,8 @@ export const IdentityDetailsPage = withProjectPermission( variant="outline_bg" size="xs" isDisabled={!isAllowed} + isLoading={isDeletingIdentity} + onClick={() => handlePopUpOpen("deleteIdentity")} > Remove Identity @@ -98,6 +137,13 @@ export const IdentityDetailsPage = withProjectPermission( + handlePopUpToggle("deleteIdentity", isOpen)} + deleteKey="remove" + onDeleteApproved={() => onRemoveIdentitySubmit()} + /> ) : ( diff --git a/frontend/src/views/Project/IdentityDetailsPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx b/frontend/src/views/Project/IdentityDetailsPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx index 9c35dcabe..f69cd1478 100644 --- a/frontend/src/views/Project/IdentityDetailsPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx +++ b/frontend/src/views/Project/IdentityDetailsPage/components/IdentityProjectAdditionalPrivilegeSection/IdentityProjectAdditionalPrivilegeModifySection.tsx @@ -274,7 +274,7 @@ export const IdentityProjectAdditionalPrivilegeModifySection = ({
- + @@ -100,8 +148,26 @@ export const MemberDetailsPage = withProjectPermission( + 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} + /> ) : ( diff --git a/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx b/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx index 0cbf47e15..828f55c44 100644 --- a/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx +++ b/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MemberProjectAdditionalPrivilegeSection.tsx @@ -137,7 +137,7 @@ export const MemberProjectAdditionalPrivilegeSection = ({ membershipDetails }: P Name - Type + Duration diff --git a/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx b/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx index 1914369e2..4bb591376 100644 --- a/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx +++ b/frontend/src/views/Project/MemberDetailsPage/components/MemberProjectAdditionalPrivilegeSection/MembershipProjectAdditionalPrivilegeModifySection.tsx @@ -272,7 +272,7 @@ export const MembershipProjectAdditionalPrivilegeModifySection = ({
- +