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 = ({
-
+