+
diff --git a/public/static/locales/en/common.json b/public/static/locales/en/common.json
index cb4d418f..7b010501 100644
--- a/public/static/locales/en/common.json
+++ b/public/static/locales/en/common.json
@@ -445,6 +445,7 @@
"hidden": "Hidden",
"readonly": "Readonly",
"plan_upgrade": "You need to upgrade your plan to have more than one active event type.",
+ "plan_upgrade_teams": "You need to upgrade your plan to create a team.",
"plan_upgrade_instructions": "To upgrade, go to
https://cal.com/upgrade",
"event_types_page_title": "Event Types",
"event_types_page_subtitle": "Create events to share for people to book on your calendar.",
diff --git a/server/createContext.ts b/server/createContext.ts
index 1e68e9ff..316fbb88 100644
--- a/server/createContext.ts
+++ b/server/createContext.ts
@@ -44,6 +44,7 @@ async function getUserFromSession({
avatar: true,
twoFactorEnabled: true,
brandColor: true,
+ plan: true,
credentials: {
select: {
id: true,
diff --git a/server/routers/viewer.tsx b/server/routers/viewer.tsx
index 6c28e237..4a249a3f 100644
--- a/server/routers/viewer.tsx
+++ b/server/routers/viewer.tsx
@@ -1,4 +1,4 @@
-import { BookingStatus, Prisma } from "@prisma/client";
+import { BookingStatus, MembershipRole, Prisma } from "@prisma/client";
import _ from "lodash";
import { z } from "zod";
@@ -57,6 +57,7 @@ const loggedInViewerRouter = createProtectedRouter()
completedOnboarding,
twoFactorEnabled,
brandColor,
+ plan,
} = ctx.user;
const me = {
id,
@@ -72,6 +73,7 @@ const loggedInViewerRouter = createProtectedRouter()
completedOnboarding,
twoFactorEnabled,
brandColor,
+ plan,
};
return me;
},
@@ -231,7 +233,7 @@ const loggedInViewerRouter = createProtectedRouter()
},
metadata: {
membershipCount: membership.team.members.length,
- readOnly: membership.role !== "OWNER",
+ readOnly: membership.role === MembershipRole.MEMBER,
},
eventTypes: membership.team.eventTypes,
}))
diff --git a/server/routers/viewer/teams.tsx b/server/routers/viewer/teams.tsx
index 9db707dd..20dfe05e 100644
--- a/server/routers/viewer/teams.tsx
+++ b/server/routers/viewer/teams.tsx
@@ -58,6 +58,10 @@ export const viewerTeamsRouter = createProtectedRouter()
name: z.string(),
}),
async resolve({ ctx, input }) {
+ if (ctx.user.plan === "FREE") {
+ throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not a pro user." });
+ }
+
const slug = slugify(input.name);
const nameCollisions = await ctx.prisma.team.count({