From dd3463822fe969ba15b51b78b511ea00666478d3 Mon Sep 17 00:00:00 2001 From: Kritik Jiyaviya Date: Fri, 16 Feb 2024 22:26:42 +0530 Subject: [PATCH 1/2] feat: Ability to revoke an invite to an org --- apps/webapp/app/models/member.server.ts | 33 ++++++++++++++++ .../route.tsx | 29 ++++++++++++-- apps/webapp/app/routes/invite-revoke.tsx | 39 +++++++++++++++++++ apps/webapp/app/utils/pathBuilder.ts | 4 ++ 4 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 apps/webapp/app/routes/invite-revoke.tsx diff --git a/apps/webapp/app/models/member.server.ts b/apps/webapp/app/models/member.server.ts index 716590898e4..bfb51bdf778 100644 --- a/apps/webapp/app/models/member.server.ts +++ b/apps/webapp/app/models/member.server.ts @@ -225,3 +225,36 @@ export async function resendInvite({ inviteId }: { inviteId: string }) { }, }); } + +export async function revokeInvite({ + userId, + slug, + inviteId, +}: { + userId: string; + slug: string; + inviteId: string; +}) { + const org = await prisma.organization.findFirst({ + where: { slug, members: { some: { userId } } }, + }); + + if (!org) { + throw new Error("User does not have access to this organization"); + } + const invite = await prisma.orgMemberInvite.delete({ + where: { + id: inviteId, + }, + select: { + email: true, + organization: true, + }, + }); + + if (!invite) { + throw new Error("Invite not found"); + } + + return { email: invite.email, organization: invite.organization }; +} diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx index 0fd9c10a3be..f437222d290 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx @@ -29,7 +29,12 @@ import { useUser } from "~/hooks/useUser"; import { getTeamMembersAndInvites, removeTeamMember } from "~/models/member.server"; import { redirectWithSuccessMessage } from "~/models/message.server"; import { requireUserId } from "~/services/session.server"; -import { inviteTeamMemberPath, organizationTeamPath, resendInvitePath } from "~/utils/pathBuilder"; +import { + inviteTeamMemberPath, + organizationTeamPath, + resendInvitePath, + revokeInvitePath, +} from "~/utils/pathBuilder"; import { DateTime } from "~/components/primitives/DateTime"; import { PageHeader, PageTitleRow, PageTitle } from "~/components/primitives/PageHeader"; import { BreadcrumbLink } from "~/components/navigation/Breadcrumb"; @@ -155,8 +160,9 @@ export default function Page() { Invite sent {} -
+
+
))} @@ -280,7 +286,7 @@ function LeaveTeamModal({ function ResendButton({ invite }: { invite: Invite }) { return ( -
+