feat: remove member from hosts on removal (#9722)
* feat: When a member is removed we should remove it from the hosts * Add migration for fixing old records affected
This commit is contained in:
@@ -27,7 +27,7 @@ import {
|
||||
showToast,
|
||||
Tooltip,
|
||||
} from "@calcom/ui";
|
||||
import { ExternalLink, MoreHorizontal, Edit2, Lock, Trash } from "@calcom/ui/components/icon";
|
||||
import { ExternalLink, MoreHorizontal, Edit2, Lock, UserX } from "@calcom/ui/components/icon";
|
||||
|
||||
import MemberChangeRoleModal from "./MemberChangeRoleModal";
|
||||
import TeamAvailabilityModal from "./TeamAvailabilityModal";
|
||||
@@ -212,8 +212,8 @@ export default function MemberListItem(props: Props) {
|
||||
type="button"
|
||||
onClick={() => setShowDeleteModal(true)}
|
||||
color="destructive"
|
||||
StartIcon={Trash}>
|
||||
{t("delete")}
|
||||
StartIcon={UserX}>
|
||||
{t("remove")}
|
||||
</DropdownItem>
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
@@ -246,8 +246,8 @@ export default function MemberListItem(props: Props) {
|
||||
type="button"
|
||||
color="destructive"
|
||||
onClick={() => setShowDeleteModal(true)}
|
||||
StartIcon={Trash}>
|
||||
{t("delete")}
|
||||
StartIcon={UserX}>
|
||||
{t("remove")}
|
||||
</DropdownItem>
|
||||
</DropdownMenuItem>
|
||||
</>
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
|
||||
DELETE FROM "Host"
|
||||
WHERE "Host"."userId" IN (
|
||||
SELECT "Host"."userId" FROM "Host"
|
||||
LEFT JOIN "Membership" ON "Membership"."userId" = "Host"."userId"
|
||||
INNER JOIN "EventType" ON "EventType"."id" = "Host"."eventTypeId"
|
||||
WHERE "EventType"."teamId" IS NOT NULL
|
||||
AND "Membership"."userId" IS NULL
|
||||
)
|
||||
AND "Host"."eventTypeId" IN (
|
||||
SELECT "Host"."eventTypeId" FROM "Host"
|
||||
LEFT JOIN "Membership" ON "Membership"."userId" = "Host"."userId"
|
||||
INNER JOIN "EventType" ON "EventType"."id" = "Host"."eventTypeId"
|
||||
WHERE "EventType"."teamId" IS NOT NULL
|
||||
AND "Membership"."userId" IS NULL
|
||||
);
|
||||
@@ -4,7 +4,6 @@ import { updateQuantitySubscriptionFromStripe } from "@calcom/features/ee/teams/
|
||||
import { IS_TEAM_BILLING_ENABLED } from "@calcom/lib/constants";
|
||||
import { isTeamAdmin, isTeamOwner } from "@calcom/lib/server/queries/teams";
|
||||
import { closeComDeleteTeamMembership } from "@calcom/lib/sync/SyncServiceManager";
|
||||
import { prisma } from "@calcom/prisma";
|
||||
import type { TrpcSessionUser } from "@calcom/trpc/server/trpc";
|
||||
|
||||
import { TRPCError } from "@trpc/server";
|
||||
@@ -32,7 +31,7 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) =
|
||||
message: "You can not remove yourself from a team you own.",
|
||||
});
|
||||
|
||||
const membership = await prisma.membership.delete({
|
||||
const membership = await ctx.prisma.membership.delete({
|
||||
where: {
|
||||
userId_teamId: { userId: input.memberId, teamId: input.teamId },
|
||||
},
|
||||
@@ -41,9 +40,19 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) =
|
||||
},
|
||||
});
|
||||
|
||||
// remove user as host from team events associated with this membership
|
||||
await ctx.prisma.host.deleteMany({
|
||||
where: {
|
||||
userId: input.memberId,
|
||||
eventType: {
|
||||
teamId: input.teamId,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (input.isOrg) {
|
||||
// Deleting membership from all child teams
|
||||
await prisma.membership.deleteMany({
|
||||
await ctx.prisma.membership.deleteMany({
|
||||
where: {
|
||||
team: {
|
||||
parentId: input.teamId,
|
||||
@@ -52,7 +61,7 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) =
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.user.update({
|
||||
await ctx.prisma.user.update({
|
||||
where: { id: membership.userId },
|
||||
data: { organizationId: null },
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user