}) {
- const { apps } = await getPageProps({ params });
- return (
-
-
-
- );
-}
-
+// @ts-expect-error getData arg
+export default WithLayout({ getData: getPageProps, Page: CategoryPage });
export const dynamic = "force-static";
diff --git a/apps/web/app/future/(individual-page-wrapper)/apps/categories/page.tsx b/apps/web/app/future/apps/categories/page.tsx
similarity index 78%
rename from apps/web/app/future/(individual-page-wrapper)/apps/categories/page.tsx
rename to apps/web/app/future/apps/categories/page.tsx
index c0d6c3d15e..c878d37732 100644
--- a/apps/web/app/future/(individual-page-wrapper)/apps/categories/page.tsx
+++ b/apps/web/app/future/apps/categories/page.tsx
@@ -1,14 +1,13 @@
import LegacyPage from "@pages/apps/categories/index";
import { ssrInit } from "app/_trpc/ssrInit";
import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
import { cookies, headers } from "next/headers";
import { getAppRegistry, getAppRegistryWithCredentials } from "@calcom/app-store/_appRegistry";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { APP_NAME } from "@calcom/lib/constants";
-import PageWrapper from "@components/PageWrapperAppDir";
-
export const generateMetadata = async () => {
return await _generateMetadata(
() => `Categories | ${APP_NAME}`,
@@ -43,14 +42,4 @@ async function getPageProps() {
};
}
-export default async function Page() {
- const props = await getPageProps();
- const h = headers();
- const nonce = h.get("x-nonce") ?? undefined;
-
- return (
-
-
-
- );
-}
+export default WithLayout({ getData: getPageProps, Page: LegacyPage, getLayout: null })<"P">;
diff --git a/apps/web/app/future/apps/installed/[category]/layout.tsx b/apps/web/app/future/apps/installed/[category]/layout.tsx
new file mode 100644
index 0000000000..dc2fb3468f
--- /dev/null
+++ b/apps/web/app/future/apps/installed/[category]/layout.tsx
@@ -0,0 +1,3 @@
+import { WithLayout } from "app/layoutHOC";
+
+export default WithLayout({ getLayout: null })<"L">;
diff --git a/apps/web/app/future/(individual-page-wrapper)/apps/installed/[category]/page.tsx b/apps/web/app/future/apps/installed/[category]/page.tsx
similarity index 94%
rename from apps/web/app/future/(individual-page-wrapper)/apps/installed/[category]/page.tsx
rename to apps/web/app/future/apps/installed/[category]/page.tsx
index 203ad830b5..44b511f0f8 100644
--- a/apps/web/app/future/(individual-page-wrapper)/apps/installed/[category]/page.tsx
+++ b/apps/web/app/future/apps/installed/[category]/page.tsx
@@ -30,7 +30,7 @@ const getPageProps = async ({ params }: { params: Record }) {
- const { category } = await getPageProps({ params });
+ await getPageProps({ params });
return ;
}
diff --git a/apps/web/app/future/apps/page.tsx b/apps/web/app/future/apps/page.tsx
new file mode 100644
index 0000000000..80c04c5491
--- /dev/null
+++ b/apps/web/app/future/apps/page.tsx
@@ -0,0 +1,81 @@
+import AppsPage from "@pages/apps";
+import { ssrInit } from "app/_trpc/ssrInit";
+import { _generateMetadata } from "app/_utils";
+import { cookies, headers } from "next/headers";
+
+import { getAppRegistry, getAppRegistryWithCredentials } from "@calcom/app-store/_appRegistry";
+import { getLayout } from "@calcom/features/MainLayoutAppDir";
+import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
+import type { UserAdminTeams } from "@calcom/features/ee/teams/lib/getUserAdminTeams";
+import getUserAdminTeams from "@calcom/features/ee/teams/lib/getUserAdminTeams";
+import { APP_NAME } from "@calcom/lib/constants";
+import type { AppCategories } from "@calcom/prisma/enums";
+
+import PageWrapper from "@components/PageWrapperAppDir";
+
+export const generateMetadata = async () => {
+ return await _generateMetadata(
+ () => `Apps | ${APP_NAME}`,
+ () => ""
+ );
+};
+
+const getPageProps = async () => {
+ const ssr = await ssrInit();
+ const req = { headers: headers(), cookies: cookies() };
+
+ // @ts-expect-error Type '{ headers: ReadonlyHeaders; cookies: ReadonlyRequestCookies; }' is not assignable to type 'NextApiRequest
+ const session = await getServerSession({ req });
+
+ let appStore, userAdminTeams: UserAdminTeams;
+ if (session?.user?.id) {
+ userAdminTeams = await getUserAdminTeams({ userId: session.user.id, getUserInfo: true });
+ appStore = await getAppRegistryWithCredentials(session.user.id, userAdminTeams);
+ } else {
+ appStore = await getAppRegistry();
+ userAdminTeams = [];
+ }
+
+ const categoryQuery = appStore.map(({ categories }) => ({
+ categories: categories || [],
+ }));
+
+ const categories = categoryQuery.reduce((c, app) => {
+ for (const category of app.categories) {
+ c[category] = c[category] ? c[category] + 1 : 1;
+ }
+ return c;
+ }, {} as Record);
+
+ return {
+ categories: Object.entries(categories)
+ .map(([name, count]): { name: AppCategories; count: number } => ({
+ name: name as AppCategories,
+ count,
+ }))
+ .sort(function (a, b) {
+ return b.count - a.count;
+ }),
+ appStore,
+ userAdminTeams,
+ dehydratedState: await ssr.dehydrate(),
+ };
+};
+
+export default async function AppPageAppDir() {
+ const { categories, appStore, userAdminTeams, dehydratedState } = await getPageProps();
+
+ const h = headers();
+ const nonce = h.get("x-nonce") ?? undefined;
+
+ return (
+
+
+
+ );
+}
diff --git a/apps/web/app/future/(individual-page-wrapper)/bookings/[status]/layout.tsx b/apps/web/app/future/bookings/[status]/layout.tsx
similarity index 77%
rename from apps/web/app/future/(individual-page-wrapper)/bookings/[status]/layout.tsx
rename to apps/web/app/future/bookings/[status]/layout.tsx
index ad00ceeb78..7391f9996f 100644
--- a/apps/web/app/future/(individual-page-wrapper)/bookings/[status]/layout.tsx
+++ b/apps/web/app/future/bookings/[status]/layout.tsx
@@ -1,6 +1,7 @@
import { ssgInit } from "app/_trpc/ssgInit";
import type { Params } from "app/_types";
import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
import { notFound } from "next/navigation";
import type { ReactElement } from "react";
import { z } from "zod";
@@ -8,8 +9,6 @@ import { z } from "zod";
import { getLayout } from "@calcom/features/MainLayoutAppDir";
import { APP_NAME } from "@calcom/lib/constants";
-import PageWrapper from "@components/PageWrapperAppDir";
-
const validStatuses = ["upcoming", "recurring", "past", "cancelled", "unconfirmed"] as const;
const querySchema = z.object({
@@ -43,14 +42,6 @@ const getData = async ({ params }: { params: Params }) => {
};
};
-export default async function BookingPageLayout({ params, children }: Props) {
- const props = await getData({ params });
-
- return (
-
- {children}
-
- );
-}
+export default WithLayout({ getLayout, getData })<"L">;
export const dynamic = "force-static";
diff --git a/apps/web/app/future/(individual-page-wrapper)/bookings/[status]/page.tsx b/apps/web/app/future/bookings/[status]/page.tsx
similarity index 100%
rename from apps/web/app/future/(individual-page-wrapper)/bookings/[status]/page.tsx
rename to apps/web/app/future/bookings/[status]/page.tsx
diff --git a/apps/web/app/future/event-types/layout.tsx b/apps/web/app/future/event-types/layout.tsx
new file mode 100644
index 0000000000..9bf51a70f5
--- /dev/null
+++ b/apps/web/app/future/event-types/layout.tsx
@@ -0,0 +1,5 @@
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@calcom/features/MainLayoutAppDir";
+
+export default WithLayout({ getLayout })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(layout)/event-types/page.tsx b/apps/web/app/future/event-types/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(layout)/event-types/page.tsx
rename to apps/web/app/future/event-types/page.tsx
diff --git a/apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/apps/[category]/page.tsx b/apps/web/app/future/settings/admin/apps/[category]/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/apps/[category]/page.tsx
rename to apps/web/app/future/settings/admin/apps/[category]/page.tsx
diff --git a/apps/web/app/future/settings/admin/apps/layout.tsx b/apps/web/app/future/settings/admin/apps/layout.tsx
new file mode 100644
index 0000000000..f415bae764
--- /dev/null
+++ b/apps/web/app/future/settings/admin/apps/layout.tsx
@@ -0,0 +1,5 @@
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@components/auth/layouts/AdminLayoutAppDir";
+
+export default WithLayout({ getLayout })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/apps/page.tsx b/apps/web/app/future/settings/admin/apps/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/apps/page.tsx
rename to apps/web/app/future/settings/admin/apps/page.tsx
diff --git a/apps/web/app/future/settings/admin/flags/layout.tsx b/apps/web/app/future/settings/admin/flags/layout.tsx
new file mode 100644
index 0000000000..f415bae764
--- /dev/null
+++ b/apps/web/app/future/settings/admin/flags/layout.tsx
@@ -0,0 +1,5 @@
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@components/auth/layouts/AdminLayoutAppDir";
+
+export default WithLayout({ getLayout })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/flags/page.tsx b/apps/web/app/future/settings/admin/flags/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/flags/page.tsx
rename to apps/web/app/future/settings/admin/flags/page.tsx
diff --git a/apps/web/app/future/settings/admin/impersonation/layout.tsx b/apps/web/app/future/settings/admin/impersonation/layout.tsx
new file mode 100644
index 0000000000..f415bae764
--- /dev/null
+++ b/apps/web/app/future/settings/admin/impersonation/layout.tsx
@@ -0,0 +1,5 @@
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@components/auth/layouts/AdminLayoutAppDir";
+
+export default WithLayout({ getLayout })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/impersonation/page.tsx b/apps/web/app/future/settings/admin/impersonation/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(admin-layout)/settings/admin/impersonation/page.tsx
rename to apps/web/app/future/settings/admin/impersonation/page.tsx
diff --git a/apps/web/app/future/settings/admin/oAuth/oAuthView/layout.tsx b/apps/web/app/future/settings/admin/oAuth/oAuthView/layout.tsx
new file mode 100644
index 0000000000..dc2fb3468f
--- /dev/null
+++ b/apps/web/app/future/settings/admin/oAuth/oAuthView/layout.tsx
@@ -0,0 +1,3 @@
+import { WithLayout } from "app/layoutHOC";
+
+export default WithLayout({ getLayout: null })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(no-layout)/settings/admin/oAuth/oAuthView/page.tsx b/apps/web/app/future/settings/admin/oAuth/oAuthView/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(no-layout)/settings/admin/oAuth/oAuthView/page.tsx
rename to apps/web/app/future/settings/admin/oAuth/oAuthView/page.tsx
diff --git a/apps/web/app/future/settings/admin/oAuth/page.tsx b/apps/web/app/future/settings/admin/oAuth/page.tsx
new file mode 100644
index 0000000000..58a8a41dd6
--- /dev/null
+++ b/apps/web/app/future/settings/admin/oAuth/page.tsx
@@ -0,0 +1,13 @@
+import LegacyPage from "@pages/settings/admin/oAuth/index";
+import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@components/auth/layouts/AdminLayoutAppDir";
+
+export const generateMetadata = async () =>
+ await _generateMetadata(
+ () => "OAuth",
+ () => "Add new OAuth Clients"
+ );
+
+export default WithLayout({ getLayout, Page: LegacyPage })<"P">;
diff --git a/apps/web/app/future/settings/admin/organizations/layout.tsx b/apps/web/app/future/settings/admin/organizations/layout.tsx
new file mode 100644
index 0000000000..1359b26601
--- /dev/null
+++ b/apps/web/app/future/settings/admin/organizations/layout.tsx
@@ -0,0 +1,5 @@
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@calcom/features/settings/layouts/SettingsLayoutAppDir";
+
+export default WithLayout({ getLayout })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/organizations/page.tsx b/apps/web/app/future/settings/admin/organizations/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/organizations/page.tsx
rename to apps/web/app/future/settings/admin/organizations/page.tsx
diff --git a/apps/web/app/future/settings/admin/page.tsx b/apps/web/app/future/settings/admin/page.tsx
new file mode 100644
index 0000000000..cfc6e0aeec
--- /dev/null
+++ b/apps/web/app/future/settings/admin/page.tsx
@@ -0,0 +1,13 @@
+import LegacyPage from "@pages/settings/admin/index";
+import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@components/auth/layouts/AdminLayoutAppDir";
+
+export const generateMetadata = async () =>
+ await _generateMetadata(
+ () => "Admin",
+ () => "admin_description"
+ );
+
+export default WithLayout({ getLayout, Page: LegacyPage })<"P">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/users/[id]/edit/page.tsx b/apps/web/app/future/settings/admin/users/[id]/edit/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/users/[id]/edit/page.tsx
rename to apps/web/app/future/settings/admin/users/[id]/edit/page.tsx
diff --git a/apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/users/add/page.tsx b/apps/web/app/future/settings/admin/users/add/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/users/add/page.tsx
rename to apps/web/app/future/settings/admin/users/add/page.tsx
diff --git a/apps/web/app/future/settings/admin/users/layout.tsx b/apps/web/app/future/settings/admin/users/layout.tsx
new file mode 100644
index 0000000000..1359b26601
--- /dev/null
+++ b/apps/web/app/future/settings/admin/users/layout.tsx
@@ -0,0 +1,5 @@
+import { WithLayout } from "app/layoutHOC";
+
+import { getLayout } from "@calcom/features/settings/layouts/SettingsLayoutAppDir";
+
+export default WithLayout({ getLayout })<"L">;
diff --git a/apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/users/page.tsx b/apps/web/app/future/settings/admin/users/page.tsx
similarity index 100%
rename from apps/web/app/future/(shared-page-wrapper)/(settings-layout)/settings/admin/users/page.tsx
rename to apps/web/app/future/settings/admin/users/page.tsx
diff --git a/apps/web/app/future/(individual-page-wrapper)/teams/page.tsx b/apps/web/app/future/teams/page.tsx
similarity index 56%
rename from apps/web/app/future/(individual-page-wrapper)/teams/page.tsx
rename to apps/web/app/future/teams/page.tsx
index 18059f5b99..0f19dd1523 100644
--- a/apps/web/app/future/(individual-page-wrapper)/teams/page.tsx
+++ b/apps/web/app/future/teams/page.tsx
@@ -1,28 +1,19 @@
import OldPage from "@pages/teams/index";
import { ssrInit } from "app/_trpc/ssrInit";
-import { type Params } from "app/_types";
import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
import { type GetServerSidePropsContext } from "next";
-import { headers, cookies } from "next/headers";
import { redirect } from "next/navigation";
import { getLayout } from "@calcom/features/MainLayoutAppDir";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
-import { buildLegacyCtx } from "@lib/buildLegacyCtx";
-
-import PageWrapper from "@components/PageWrapperAppDir";
-
export const generateMetadata = async () =>
await _generateMetadata(
(t) => t("teams"),
(t) => t("create_manage_teams_collaborative")
);
-type PageProps = {
- params: Params;
-};
-
async function getData(context: Omit) {
const ssr = await ssrInit();
await ssr.viewer.me.prefetch();
@@ -41,24 +32,5 @@ async function getData(context: Omit {
- const h = headers();
- const nonce = h.get("x-nonce") ?? undefined;
-
- const legacyCtx = buildLegacyCtx(h, cookies(), params);
- // @ts-expect-error `req` of type '{ headers: ReadonlyHeaders; cookies: ReadonlyRequestCookies; }' is not assignable to `req` in `GetServerSidePropsContext`
- const props = await getData(legacyCtx);
-
- return (
-
-
-
- );
-};
-
-export default Page;
+// @ts-expect-error getData arg
+export default WithLayout({ getData, getLayout, Page: OldPage })<"P">;
diff --git a/apps/web/app/future/(individual-page-wrapper)/video/[uid]/page.tsx b/apps/web/app/future/video/[uid]/page.tsx
similarity index 75%
rename from apps/web/app/future/(individual-page-wrapper)/video/[uid]/page.tsx
rename to apps/web/app/future/video/[uid]/page.tsx
index e1e473ceec..b781376423 100644
--- a/apps/web/app/future/(individual-page-wrapper)/video/[uid]/page.tsx
+++ b/apps/web/app/future/video/[uid]/page.tsx
@@ -1,30 +1,21 @@
import OldPage from "@pages/video/[uid]";
import { ssrInit } from "app/_trpc/ssrInit";
-import { type Params } from "app/_types";
import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
import MarkdownIt from "markdown-it";
import { type GetServerSidePropsContext } from "next";
-import { headers, cookies } from "next/headers";
import { redirect } from "next/navigation";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { APP_NAME } from "@calcom/lib/constants";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
-import { buildLegacyCtx } from "@lib/buildLegacyCtx";
-
-import PageWrapper from "@components/PageWrapperAppDir";
-
export const generateMetadata = async () =>
await _generateMetadata(
() => `${APP_NAME} Video`,
(t) => t("quick_video_meeting")
);
-type PageProps = Readonly<{
- params: Params;
-}>;
-
const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true });
async function getData(context: Omit) {
@@ -107,24 +98,5 @@ async function getData(context: Omit {
- const h = headers();
- const nonce = h.get("x-nonce") ?? undefined;
-
- const legacyCtx = buildLegacyCtx(headers(), cookies(), params);
- // @ts-expect-error `req` of type '{ headers: ReadonlyHeaders; cookies: ReadonlyRequestCookies; }' is not assignable to `req` in `GetServerSidePropsContext`
- const { dehydratedState, ...restProps } = await getData(legacyCtx);
-
- return (
-
-
-
- );
-};
-
-export default Page;
+// @ts-expect-error getData arg
+export default WithLayout({ getData, Page: OldPage, getLayout: null })<"P">;
diff --git a/apps/web/app/future/(individual-page-wrapper)/video/meeting-ended/[uid]/page.tsx b/apps/web/app/future/video/meeting-ended/[uid]/page.tsx
similarity index 59%
rename from apps/web/app/future/(individual-page-wrapper)/video/meeting-ended/[uid]/page.tsx
rename to apps/web/app/future/video/meeting-ended/[uid]/page.tsx
index d0456d3047..0674d39566 100644
--- a/apps/web/app/future/(individual-page-wrapper)/video/meeting-ended/[uid]/page.tsx
+++ b/apps/web/app/future/video/meeting-ended/[uid]/page.tsx
@@ -1,26 +1,17 @@
import OldPage from "@pages/video/meeting-ended/[uid]";
-import { type Params } from "app/_types";
import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
import { type GetServerSidePropsContext } from "next";
-import { headers, cookies } from "next/headers";
import { redirect } from "next/navigation";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
-import { buildLegacyCtx } from "@lib/buildLegacyCtx";
-
-import PageWrapper from "@components/PageWrapperAppDir";
-
export const generateMetadata = async () =>
await _generateMetadata(
() => "Meeting Unavailable",
() => "Meeting Unavailable"
);
-type PageProps = Readonly<{
- params: Params;
-}>;
-
async function getData(context: Omit) {
const booking = await prisma.booking.findUnique({
where: {
@@ -58,19 +49,5 @@ async function getData(context: Omit {
- const h = headers();
- const nonce = h.get("x-nonce") ?? undefined;
-
- const legacyCtx = buildLegacyCtx(headers(), cookies(), params);
- // @ts-expect-error `req` of type '{ headers: ReadonlyHeaders; cookies: ReadonlyRequestCookies; }' is not assignable to `req` in `GetServerSidePropsContext`
- const props = await getData(legacyCtx);
-
- return (
-
-
-
- );
-};
-
-export default Page;
+// @ts-expect-error getData arg
+export default WithLayout({ getData, Page: OldPage, getLayout: null })<"P">;
diff --git a/apps/web/app/future/(individual-page-wrapper)/video/meeting-not-started/[uid]/page.tsx b/apps/web/app/future/video/meeting-not-started/[uid]/page.tsx
similarity index 63%
rename from apps/web/app/future/(individual-page-wrapper)/video/meeting-not-started/[uid]/page.tsx
rename to apps/web/app/future/video/meeting-not-started/[uid]/page.tsx
index b15f16452e..bde0c18328 100644
--- a/apps/web/app/future/(individual-page-wrapper)/video/meeting-not-started/[uid]/page.tsx
+++ b/apps/web/app/future/video/meeting-not-started/[uid]/page.tsx
@@ -1,16 +1,12 @@
import OldPage from "@pages/video/meeting-not-started/[uid]";
import { type Params } from "app/_types";
import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
import { type GetServerSidePropsContext } from "next";
-import { headers, cookies } from "next/headers";
import { redirect } from "next/navigation";
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
-import { buildLegacyCtx } from "@lib/buildLegacyCtx";
-
-import PageWrapper from "@components/PageWrapperAppDir";
-
type PageProps = Readonly<{
params: Params;
}>;
@@ -51,19 +47,5 @@ async function getData(context: Omit {
- const h = headers();
- const nonce = h.get("x-nonce") ?? undefined;
-
- const legacyCtx = buildLegacyCtx(headers(), cookies(), params);
- // @ts-expect-error `req` of type '{ headers: ReadonlyHeaders; cookies: ReadonlyRequestCookies; }' is not assignable to `req` in `GetServerSidePropsContext`
- const props = await getData(legacyCtx);
-
- return (
-
-
-
- );
-};
-
-export default Page;
+// @ts-expect-error getData arg
+export default WithLayout({ getData, Page: OldPage, getLayout: null })<"P">;
diff --git a/apps/web/app/future/video/no-meeting-found/page.tsx b/apps/web/app/future/video/no-meeting-found/page.tsx
new file mode 100644
index 0000000000..31a15a2ad6
--- /dev/null
+++ b/apps/web/app/future/video/no-meeting-found/page.tsx
@@ -0,0 +1,20 @@
+import LegacyPage from "@pages/video/no-meeting-found";
+import { ssrInit } from "app/_trpc/ssrInit";
+import { _generateMetadata } from "app/_utils";
+import { WithLayout } from "app/layoutHOC";
+
+export const generateMetadata = async () =>
+ await _generateMetadata(
+ (t) => t("no_meeting_found"),
+ (t) => t("no_meeting_found")
+ );
+
+const getData = async () => {
+ const ssr = await ssrInit();
+
+ return {
+ dehydratedState: await ssr.dehydrate(),
+ };
+};
+
+export default WithLayout({ getData, Page: LegacyPage, getLayout: null })<"P">;
diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx
index 579ba8b770..ecdfb2cd8d 100644
--- a/apps/web/app/layout.tsx
+++ b/apps/web/app/layout.tsx
@@ -84,7 +84,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
`}
> = {
+ getLayout: ((page: React.ReactElement) => React.ReactNode) | null;
+ Page?: (props: T) => React.ReactElement;
+ getData?: (arg: ReturnType) => Promise;
+};
+
+export function WithLayout>({ getLayout, getData, Page }: WithLayoutParams) {
+ return async (p: P extends "P" ? PageProps : LayoutProps) => {
+ const h = headers();
+ const nonce = h.get("x-nonce") ?? undefined;
+ const props = getData ? await getData(buildLegacyCtx(h, cookies(), p.params)) : ({} as T);
+
+ const children = "children" in p ? p.children : null;
+
+ return (
+
+ {Page ? : children}
+
+ );
+ };
+}
diff --git a/apps/web/components/PageWrapperAppDir.tsx b/apps/web/components/PageWrapperAppDir.tsx
index 08d7b9cad3..ae36417c97 100644
--- a/apps/web/components/PageWrapperAppDir.tsx
+++ b/apps/web/components/PageWrapperAppDir.tsx
@@ -20,7 +20,7 @@ export interface CalPageWrapper {
export type PageWrapperProps = Readonly<{
getLayout: ((page: React.ReactElement) => ReactNode) | null;
- children: React.ReactElement;
+ children: React.ReactNode;
requiresLicense: boolean;
nonce: string | undefined;
themeBasis: string | null;
@@ -62,7 +62,7 @@ function PageWrapper(props: PageWrapperProps) {
dangerouslySetInnerHTML={{ __html: `window.CalComPageStatus = '${pageStatus}'` }}
/>
{getLayout(
- props.requiresLicense ? {props.children} : props.children
+ props.requiresLicense ? {props.children} : <>{props.children}>
)}
>
diff --git a/apps/web/components/auth/layouts/AdminLayout.tsx b/apps/web/components/auth/layouts/AdminLayout.tsx
index 7289c08f0c..5c51ef47ce 100644
--- a/apps/web/components/auth/layouts/AdminLayout.tsx
+++ b/apps/web/components/auth/layouts/AdminLayout.tsx
@@ -26,7 +26,7 @@ export default function AdminLayout({
const isAppsPage = pathname?.startsWith("/settings/admin/apps");
return (
-
+
*]:flex-1"}>
{children}
diff --git a/apps/web/components/booking/BookingListItem.tsx b/apps/web/components/booking/BookingListItem.tsx
index 1b35959898..5abfb821cc 100644
--- a/apps/web/components/booking/BookingListItem.tsx
+++ b/apps/web/components/booking/BookingListItem.tsx
@@ -384,7 +384,7 @@ function BookingListItem(booking: BookingItemProps) {
target="_blank"
title={locationToDisplay}
rel="noreferrer"
- className="text-sm leading-6 text-blue-600 hover:underline">
+ className="text-sm leading-6 text-blue-600 hover:underline dark:text-blue-400">
{provider?.iconUrl && (
![]()
{
return (