diff --git a/apps/web/lib/team/[slug]/getServerSideProps.tsx b/apps/web/lib/team/[slug]/getServerSideProps.tsx index ca85a763f1..4559bd31cd 100644 --- a/apps/web/lib/team/[slug]/getServerSideProps.tsx +++ b/apps/web/lib/team/[slug]/getServerSideProps.tsx @@ -90,6 +90,17 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => }, }), }, + include: { + parent: { + select: { + id: true, + slug: true, + name: true, + isPrivate: true, + isOrganization: true, + }, + }, + }, }); if (!unpublishedTeam) return { notFound: true } as const; @@ -103,19 +114,23 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => } as const; } + const isTeamOrParentOrgPrivate = team.isPrivate || (team.parent?.isOrganization && team.parent?.isPrivate); + team.eventTypes = team.eventTypes?.map((type) => ({ ...type, - users: type.users.map((user) => ({ - ...user, - avatar: `/${user.username}/avatar.png`, - })), + users: !isTeamOrParentOrgPrivate + ? type.users.map((user) => ({ + ...user, + avatar: `/${user.username}/avatar.png`, + })) + : [], descriptionAsSafeHTML: markdownToSafeHTML(type.description), })) ?? null; const safeBio = markdownToSafeHTML(team.bio) || ""; - const members = !team.isPrivate + const members = !isTeamOrParentOrgPrivate ? team.members.map((member) => { return { name: member.name, @@ -139,7 +154,13 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { props: { - team: { ...serializableTeam, safeBio, members, metadata }, + team: { + ...serializableTeam, + safeBio, + members, + metadata, + children: isTeamOrParentOrgPrivate ? [] : team.children, + }, themeBasis: serializableTeam.slug, trpcState: ssr.dehydrate(), markdownStrippedBio, diff --git a/apps/web/pages/settings/organizations/privacy.tsx b/apps/web/pages/settings/organizations/privacy.tsx new file mode 100644 index 0000000000..a6dcde04d6 --- /dev/null +++ b/apps/web/pages/settings/organizations/privacy.tsx @@ -0,0 +1,9 @@ +import PrivacyView from "@calcom/features/ee/organizations/pages/settings/privacy"; + +import type { CalPageWrapper } from "@components/PageWrapper"; +import PageWrapper from "@components/PageWrapper"; + +const Page = PrivacyView as CalPageWrapper; +Page.PageWrapper = PageWrapper; + +export default Page; diff --git a/apps/web/pages/team/[slug].tsx b/apps/web/pages/team/[slug].tsx index 2fb36c6243..f9b2449858 100644 --- a/apps/web/pages/team/[slug].tsx +++ b/apps/web/pages/team/[slug].tsx @@ -50,6 +50,8 @@ function TeamPage({ const isBioEmpty = !team.bio || !team.bio.replace("


", "").length; const metadata = teamMetadataSchema.parse(team.metadata); + const teamOrOrgIsPrivate = team.isPrivate || (team?.parent?.isOrganization && team.parent?.isPrivate); + useEffect(() => { telemetry.event( telemetryEventTypes.pageView, @@ -194,11 +196,17 @@ function TeamPage({ )} {team.isOrganization ? ( - + !teamOrOrgIsPrivate ? ( + + ) : ( +
+

{t("you_cannot_see_teams_of_org")}

+
+ ) ) : ( <> {(showMembers.isOn || !team.eventTypes?.length) && - (team.isPrivate ? ( + (teamOrOrgIsPrivate ? (

{t("you_cannot_see_team_members")} @@ -212,7 +220,7 @@ function TeamPage({ {/* Hide "Book a team member button when team is private or hideBookATeamMember is true" */} - {!team.hideBookATeamMember && !team.isPrivate && ( + {!team.hideBookATeamMember && !teamOrOrgIsPrivate && (