diff --git a/apps/web/components/ImageUploader.tsx b/apps/web/components/ImageUploader.tsx
index c8ded6c160..525224de95 100644
--- a/apps/web/components/ImageUploader.tsx
+++ b/apps/web/components/ImageUploader.tsx
@@ -63,6 +63,7 @@ function CropContainer({
);
}
+/** @deprecated Use `packages/ui/v2/core/ImageUploader.tsx` */
export default function ImageUploader({
target,
id,
diff --git a/apps/web/components/getting-started/steps-views/UserProfile.tsx b/apps/web/components/getting-started/steps-views/UserProfile.tsx
index a05de87381..018df639b7 100644
--- a/apps/web/components/getting-started/steps-views/UserProfile.tsx
+++ b/apps/web/components/getting-started/steps-views/UserProfile.tsx
@@ -7,9 +7,9 @@ import { useLocale } from "@calcom/lib/hooks/useLocale";
import { User } from "@calcom/prisma/client";
import { trpc } from "@calcom/trpc/react";
import { Button, showToast, TextArea } from "@calcom/ui/v2";
+import ImageUploader from "@calcom/ui/v2/core/ImageUploader";
import { AvatarSSR } from "@components/ui/AvatarSSR";
-import ImageUploader from "@components/v2/settings/ImageUploader";
interface IUserProfile {
user?: User;
diff --git a/apps/web/components/team/DisableTeamImpersonation.tsx b/apps/web/components/team/DisableTeamImpersonation.tsx
index c88cf569bf..e2569d7cb6 100644
--- a/apps/web/components/team/DisableTeamImpersonation.tsx
+++ b/apps/web/components/team/DisableTeamImpersonation.tsx
@@ -4,6 +4,7 @@ import { trpc } from "@calcom/trpc/react";
import Badge from "@calcom/ui/Badge";
import Button from "@calcom/ui/Button";
+/** @deprecated Use `packages/features/ee/teams/components/DisableTeamImpersonation.tsx` */
const DisableTeamImpersonation = ({ teamId, memberId }: { teamId: number; memberId: number }) => {
const { t } = useLocale();
diff --git a/apps/web/components/team/MemberChangeRoleModal.tsx b/apps/web/components/team/MemberChangeRoleModal.tsx
index c9d16b682b..fe7dda2776 100644
--- a/apps/web/components/team/MemberChangeRoleModal.tsx
+++ b/apps/web/components/team/MemberChangeRoleModal.tsx
@@ -13,6 +13,7 @@ type MembershipRoleOption = {
value: MembershipRole;
};
+/** @deprecated Use `packages/features/ee/teams/components/MemberChangeRoleModal.tsx` */
export default function MemberChangeRoleModal(props: {
isOpen: boolean;
currentMember: MembershipRole;
diff --git a/apps/web/components/team/MemberInvitationModal.tsx b/apps/web/components/team/MemberInvitationModal.tsx
index 651527bbda..0836c84fda 100644
--- a/apps/web/components/team/MemberInvitationModal.tsx
+++ b/apps/web/components/team/MemberInvitationModal.tsx
@@ -26,6 +26,7 @@ type MembershipRoleOption = {
const _options: MembershipRoleOption[] = [{ value: "MEMBER" }, { value: "ADMIN" }, { value: "OWNER" }];
+/** @deprecated Use `packages/features/ee/teams/components/MemberInvitationModal.tsx` */
export default function MemberInvitationModal(props: MemberInvitationModalProps) {
const [errorMessage, setErrorMessage] = useState("");
const { t, i18n } = useLocale();
diff --git a/apps/web/components/team/MemberListItem.tsx b/apps/web/components/team/MemberListItem.tsx
index 6e374d4777..b5e38cdeaa 100644
--- a/apps/web/components/team/MemberListItem.tsx
+++ b/apps/web/components/team/MemberListItem.tsx
@@ -33,6 +33,7 @@ interface Props {
member: inferQueryOutput<"viewer.teams.get">["members"][number];
}
+/** @deprecated Use `packages/features/ee/teams/components/MemberListItem.tsx` */
export default function MemberListItem(props: Props) {
const { t } = useLocale();
diff --git a/apps/web/components/team/TeamPill.tsx b/apps/web/components/team/TeamPill.tsx
index 1ceb05575f..b7abb99077 100644
--- a/apps/web/components/team/TeamPill.tsx
+++ b/apps/web/components/team/TeamPill.tsx
@@ -10,6 +10,7 @@ interface Props {
color?: PillColor;
}
+/** @deprecated Use `packages/features/ee/teams/components/TeamPill.tsx` */
export default function TeamPill(props: Props) {
return (
(null);
diff --git a/apps/web/middleware.ts b/apps/web/middleware.ts
index b00d073d89..7b836e3121 100644
--- a/apps/web/middleware.ts
+++ b/apps/web/middleware.ts
@@ -11,6 +11,7 @@ const V2_WHITELIST = [
"/settings/developer/api-keys",
"/settings/my-account",
"/settings/security",
+ "/settings/teams",
"/availability",
"/bookings",
"/event-types",
diff --git a/apps/web/pages/v2/settings/my-account/profile.tsx b/apps/web/pages/v2/settings/my-account/profile.tsx
index 61c5099961..799fc0869d 100644
--- a/apps/web/pages/v2/settings/my-account/profile.tsx
+++ b/apps/web/pages/v2/settings/my-account/profile.tsx
@@ -15,6 +15,7 @@ import { Alert } from "@calcom/ui/Alert";
import Avatar from "@calcom/ui/v2/core/Avatar";
import { Button } from "@calcom/ui/v2/core/Button";
import { Dialog, DialogContent, DialogTrigger } from "@calcom/ui/v2/core/Dialog";
+import ImageUploader from "@calcom/ui/v2/core/ImageUploader";
import Meta from "@calcom/ui/v2/core/Meta";
import { Form, Label, TextField, PasswordField } from "@calcom/ui/v2/core/form/fields";
import { getLayout } from "@calcom/ui/v2/core/layouts/SettingsLayout";
@@ -23,7 +24,6 @@ import showToast from "@calcom/ui/v2/core/notifications";
import { inferSSRProps } from "@lib/types/inferSSRProps";
import TwoFactor from "@components/auth/TwoFactor";
-import ImageUploader from "@components/v2/settings/ImageUploader";
interface DeleteAccountValues {
totpCode: string;
diff --git a/apps/web/pages/v2/settings/teams/[id]/appearance.tsx b/apps/web/pages/v2/settings/teams/[id]/appearance.tsx
new file mode 100644
index 0000000000..a5514889ac
--- /dev/null
+++ b/apps/web/pages/v2/settings/teams/[id]/appearance.tsx
@@ -0,0 +1 @@
+export { default } from "@calcom/features/ee/teams/pages/team-appearance-view";
diff --git a/apps/web/pages/v2/settings/teams/[id]/members.tsx b/apps/web/pages/v2/settings/teams/[id]/members.tsx
new file mode 100644
index 0000000000..cce1f79bd4
--- /dev/null
+++ b/apps/web/pages/v2/settings/teams/[id]/members.tsx
@@ -0,0 +1 @@
+export { default } from "@calcom/features/ee/teams/pages/team-members-view";
diff --git a/apps/web/pages/v2/settings/teams/[id]/profile.tsx b/apps/web/pages/v2/settings/teams/[id]/profile.tsx
new file mode 100644
index 0000000000..5318cc8478
--- /dev/null
+++ b/apps/web/pages/v2/settings/teams/[id]/profile.tsx
@@ -0,0 +1 @@
+export { default } from "@calcom/features/ee/teams/pages/team-profile-view";
diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json
index 498ed65e2d..43b0576752 100644
--- a/apps/web/public/static/locales/en/common.json
+++ b/apps/web/public/static/locales/en/common.json
@@ -481,12 +481,12 @@
"leave": "Leave",
"profile": "Profile",
"my_team_url": "My team URL",
- "team_name": "Team name",
+ "team_name": "Team Name",
"your_team_name": "Your team name",
"team_updated_successfully": "Team updated successfully",
"your_team_updated_successfully": "Your team has been updated successfully.",
"about": "About",
- "team_description": "A few sentences about your team. This will appear on your team's URL page.",
+ "team_description": "A few sentences about your team. This will appear on your team's url page.",
"members": "Members",
"member": "Member",
"owner": "Owner",
@@ -498,9 +498,9 @@
"invite_new_member": "Invite a new member",
"invite_new_team_member": "Invite someone to your team.",
"change_member_role": "Change team member role",
- "disable_cal_branding": "Disable Cal.com branding",
+ "disable_cal_branding": "Disable Cal branding",
"disable_cal_branding_description": "Hide all Cal.com branding from your public pages.",
- "danger_zone": "Danger Zone",
+ "danger_zone": "Danger zone",
"back": "Back",
"cancel": "Cancel",
"cancel_all_remaining": "Cancel all remaining",
@@ -877,7 +877,7 @@
"impersonate": "Impersonate",
"user_impersonation_heading": "User Impersonation",
"user_impersonation_description": "Allows our support team to temporarily sign in as you to help us quickly resolve any issues you report to us.",
- "team_impersonation_description": "Allows your team admins to temporarily sign in as you.",
+ "team_impersonation_description": "Allows your team members to temporarily sign in as you.",
"impersonate_user_tip": "All uses of this feature is audited.",
"impersonating_user_warning": "Impersonating username \"{{user}}\".",
"impersonating_stop_instructions": "<0>Click Here to stop0>.",
@@ -1171,6 +1171,11 @@
"for_a_maximum_of": "For a maximum of",
"event_one": "event",
"event_other": "events",
+ "profile_team_description": "Manage settings for your team profile",
+ "members_team_description": "Users that are in the group. Apes together strong!",
+ "team_url": "Team URL",
+ "delete_team": "Delete Team",
+ "team_members": "Team members",
"more": "More",
"more_page_footer": "We view the mobile application as an extension of the web application. If you are performing any complication actions, please refer back to the web application.",
"workflow_example_1": "Send email reminder 24 hours before event starts to host",
@@ -1184,6 +1189,13 @@
"connect_calendar_later": "I'll connect my calendar later",
"set_my_availability_later": "I'll set my availability later",
"problem_saving_user_profile": "There was a problem saving your data. Please try again or reach out to customer support.",
+ "purchase_missing_seats": "Purchase missing seats",
+ "slot_length": "Slot length",
+ "booking_appearance": "Booking Appearance",
+ "appearance_team_description": "Manage settings for your team's booking appearance",
+ "only_owner_change": "Only the owner of this team can make changes to the team's booking ",
+ "team_disable_cal_branding_description": "Removes any Cal related brandings, i.e. 'Powered by Cal'",
+ "invited_by_team": "{{teamName}} has invited you to join their team as a {{role}}",
"token_invalid_expired": "Token is either invalid or expired.",
"routing_forms_description": "You can see all forms and routes you have created here.",
"add_new_form": "Add new form",
diff --git a/packages/features/ee/teams/components/DisableTeamImpersonation.tsx b/packages/features/ee/teams/components/DisableTeamImpersonation.tsx
new file mode 100644
index 0000000000..6be33590a7
--- /dev/null
+++ b/packages/features/ee/teams/components/DisableTeamImpersonation.tsx
@@ -0,0 +1,63 @@
+import { classNames } from "@calcom/lib";
+import { useLocale } from "@calcom/lib/hooks/useLocale";
+import { trpc } from "@calcom/trpc/react";
+import { showToast, Switch } from "@calcom/ui/v2/core";
+
+const DisableTeamImpersonation = ({
+ teamId,
+ memberId,
+ disabled,
+}: {
+ teamId: number;
+ memberId: number;
+ disabled: boolean;
+}) => {
+ const { t } = useLocale();
+
+ const utils = trpc.useContext();
+
+ const query = trpc.useQuery(["viewer.teams.getMembershipbyUser", { teamId, memberId }]);
+
+ const mutation = trpc.useMutation("viewer.teams.updateMembership", {
+ onSuccess: async () => {
+ showToast(t("your_user_profile_updated_successfully"), "success");
+ await utils.invalidateQueries(["viewer.teams.getMembershipbyUser"]);
+ },
+ async onSettled() {
+ await utils.invalidateQueries(["viewer.public.i18n"]);
+ },
+ });
+ if (query.isLoading) return <>>;
+
+ return (
+ <>
+