From 77a00b3e8ca9ee8a49e92519022ce9cba8634181 Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Fri, 7 Feb 2025 21:51:35 +0000 Subject: [PATCH] chore: migrate orgDomain instant meeting route to App Router (#19067) * Remove BookerSeo from instant-meeting-view * remove route from pages router * make eventData passed from getServerSideProps * refactor route in app router and move it outside of /future --- .../team/[slug]/[type]/page.tsx | 41 --------------- .../team/[slug]/[type]/page.tsx | 51 +++++++++++++++++++ .../team/[slug]/[type]/getServerSideProps.ts | 1 + .../[slug]/[type]/instant-meeting-view.tsx | 16 +----- .../instant-meeting/team/[slug]/[type].tsx | 10 ---- 5 files changed, 54 insertions(+), 65 deletions(-) delete mode 100644 apps/web/app/future/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx create mode 100644 apps/web/app/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx delete mode 100644 apps/web/pages/org/[orgSlug]/instant-meeting/team/[slug]/[type].tsx diff --git a/apps/web/app/future/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx b/apps/web/app/future/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx deleted file mode 100644 index d853d90be4..0000000000 --- a/apps/web/app/future/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { withAppDirSsr } from "app/WithAppDirSsr"; -import type { PageProps as _PageProps } from "app/_types"; -import { _generateMetadata } from "app/_utils"; -import { WithLayout } from "app/layoutHOC"; -import { headers, cookies } from "next/headers"; - -import { orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains"; -import { EventRepository } from "@calcom/lib/server/repository/event"; - -import { buildLegacyCtx } from "@lib/buildLegacyCtx"; -import { getServerSideProps } from "@lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps"; - -import type { PageProps } from "~/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view"; -import Page from "~/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view"; - -export const generateMetadata = async ({ params, searchParams }: _PageProps) => { - const context = buildLegacyCtx(headers(), cookies(), params, searchParams); - const { slug: eventSlug, user: username } = await getData(context); - const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req, context.params?.orgSlug); - - const org = isValidOrgDomain ? currentOrgDomain : null; - - const event = await EventRepository.getPublicEvent({ - username, - eventSlug, - isTeamEvent: true, - org, - fromRedirectOfNonOrgLink: context.query.orgRedirection === "true", - }); - - const profileName = event?.profile.name ?? ""; - const title = event?.title ?? ""; - - return await _generateMetadata( - () => `${title} | ${profileName}`, - () => `${title}` - ); -}; - -const getData = withAppDirSsr(getServerSideProps); -export default WithLayout({ getData, Page })<"P">; diff --git a/apps/web/app/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx b/apps/web/app/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx new file mode 100644 index 0000000000..df2662740d --- /dev/null +++ b/apps/web/app/org/[orgSlug]/instant-meeting/team/[slug]/[type]/page.tsx @@ -0,0 +1,51 @@ +import { withAppDirSsr } from "app/WithAppDirSsr"; +import type { PageProps as _PageProps } from "app/_types"; +import { generateMeetingMetadata } from "app/_utils"; +import { WithLayout } from "app/layoutHOC"; +import { headers, cookies } from "next/headers"; + +import { getOrgFullOrigin } from "@calcom/features/ee/organizations/lib/orgDomains"; + +import { buildLegacyCtx } from "@lib/buildLegacyCtx"; +import { getServerSideProps } from "@lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps"; + +import type { Props } from "~/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view"; +import Page from "~/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view"; + +export const generateMetadata = async ({ params, searchParams }: _PageProps) => { + const context = buildLegacyCtx(headers(), cookies(), params, searchParams); + const { isBrandingHidden, eventData } = await getData(context); + + const profileName = eventData?.profile.name ?? ""; + const profileImage = eventData?.profile.image; + const title = eventData?.title ?? ""; + + const meeting = { + title, + profile: { name: profileName, image: profileImage }, + users: [ + ...(eventData?.users || []).map((user) => ({ + name: `${user.name}`, + username: `${user.username}`, + })), + ], + }; + const metadata = await generateMeetingMetadata( + meeting, + () => `${title} | ${profileName}`, + () => `${title}`, + isBrandingHidden, + getOrgFullOrigin(eventData?.entity.orgSlug ?? null) + ); + + return { + ...metadata, + robots: { + follow: !eventData?.hidden, + index: !eventData?.hidden, + }, + }; +}; + +const getData = withAppDirSsr(getServerSideProps); +export default WithLayout({ getData, Page, isBookingPage: true })<"P">; diff --git a/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts b/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts index 6c0ec85f04..3d16f2c179 100644 --- a/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts +++ b/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts @@ -55,6 +55,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { props: { + eventData, entity: eventData.entity, eventTypeId: eventData.id, duration: getMultipleDurationValue( diff --git a/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx b/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx index 55cede897b..be6efb41f8 100644 --- a/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx +++ b/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx @@ -4,25 +4,15 @@ import type { EmbedProps } from "app/WithEmbedSSR"; import { Booker } from "@calcom/atoms/monorepo"; import { getBookerWrapperClasses } from "@calcom/features/bookings/Booker/utils/getBookerWrapperClasses"; -import { BookerSeo } from "@calcom/features/bookings/components/BookerSeo"; import type { getServerSideProps } from "@lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; -export type PageProps = inferSSRProps & EmbedProps; +export type Props = inferSSRProps & EmbedProps; -function Type({ slug, user, booking, isEmbed, isBrandingHidden, entity, eventTypeId, duration }: PageProps) { +function Type({ slug, user, booking, isEmbed, isBrandingHidden, entity, eventTypeId, duration }: Props) { return (
- ; -Page.PageWrapper = PageWrapper; - -export { getServerSideProps } from "@lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps"; -export default Page;