diff --git a/apps/web/app/environments/[environmentId]/settings/members/EditMemberships.tsx b/apps/web/app/environments/[environmentId]/settings/members/EditMemberships.tsx index c25166a1b7..1a8405c4e2 100644 --- a/apps/web/app/environments/[environmentId]/settings/members/EditMemberships.tsx +++ b/apps/web/app/environments/[environmentId]/settings/members/EditMemberships.tsx @@ -152,10 +152,16 @@ export function EditMemberships({ environmentId }: EditMembershipsProps) { } const handleDeleteMember = async () => { + let result = false; if (activeMember.accepted) { - await removeMember(team.teamId, activeMember.userId); + result = await removeMember(team.teamId, activeMember.userId); } else { - await deleteInvite(team.teamId, activeMember.inviteId); + result = await deleteInvite(team.teamId, activeMember.inviteId); + } + if (result) { + toast.success("Member removed successfully"); + } else { + toast.error("Something went wrong"); } setDeleteMemberModalOpen(false); mutateTeam(); @@ -173,7 +179,12 @@ export function EditMemberships({ environmentId }: EditMembershipsProps) { const handleAddMember = async (data) => { // TODO: handle http 409 user is already part of the team - await addMember(team.teamId, data); + const add = await addMember(team.teamId, data); + if (add) { + toast.success("Member invited successfully"); + } else { + toast.error("Something went wrong"); + } mutateTeam(); }; diff --git a/apps/web/lib/members.ts b/apps/web/lib/members.ts index d0c44a7f97..414dd1f901 100644 --- a/apps/web/lib/members.ts +++ b/apps/web/lib/members.ts @@ -78,7 +78,7 @@ export const addMember = async (teamId: string, data: { name: string; email: str headers: { "Content-Type": "application/json" }, body: JSON.stringify(data), }); - return result.status === 200; + return result.status === 201; } catch (error) { console.error(error); return false; diff --git a/apps/web/pages/api/v1/teams/[teamId]/invite/index.ts b/apps/web/pages/api/v1/teams/[teamId]/invite/index.ts index d2284cc0db..185ff45037 100644 --- a/apps/web/pages/api/v1/teams/[teamId]/invite/index.ts +++ b/apps/web/pages/api/v1/teams/[teamId]/invite/index.ts @@ -35,6 +35,11 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) let { email, name, role } = req.body; email = email.toLowerCase(); + const existingInvite = await prisma.invite.findFirst({ where: { email, teamId } }); + if (existingInvite) { + return res.status(409).json({ message: "Invite already exists" }); + } + const user = await prisma.user.findUnique({ where: { email } }); if (user) {