diff --git a/packages/features/ee/teams/components/CreateANewTeamForm.tsx b/packages/features/ee/teams/components/CreateANewTeamForm.tsx index c02c56fb7f..db00f90583 100644 --- a/packages/features/ee/teams/components/CreateANewTeamForm.tsx +++ b/packages/features/ee/teams/components/CreateANewTeamForm.tsx @@ -10,7 +10,7 @@ import { trpc } from "@calcom/trpc/react"; import { Avatar, Button, Form, ImageUploader, TextField } from "@calcom/ui"; import { FiArrowRight } from "@calcom/ui/components/icon"; -import { NewTeamFormValues } from "../lib/types"; +import type { NewTeamFormValues } from "../lib/types"; const querySchema = z.object({ returnTo: z.string(), @@ -140,10 +140,14 @@ export const CreateANewTeamForm = () => { {t("cancel")} diff --git a/packages/trpc/server/routers/viewer/teams.tsx b/packages/trpc/server/routers/viewer/teams.tsx index 023d455282..6e3dd72356 100644 --- a/packages/trpc/server/routers/viewer/teams.tsx +++ b/packages/trpc/server/routers/viewer/teams.tsx @@ -92,6 +92,25 @@ export const viewerTeamsRouter = router({ if (nameCollisions) throw new TRPCError({ code: "BAD_REQUEST", message: "Team name already taken." }); + // Ensure that the user is not duplicating a requested team + const duplicatedRequest = await ctx.prisma.team.findFirst({ + where: { + members: { + some: { + userId: ctx.user.id, + }, + }, + metadata: { + path: ["requestedSlug"], + equals: slug, + }, + }, + }); + + if (duplicatedRequest) { + return duplicatedRequest; + } + const createTeam = await ctx.prisma.team.create({ data: { name,