diff --git a/apps/web/app/403/page.tsx b/apps/web/app/(use-page-wrapper)/403/page.tsx
similarity index 90%
rename from apps/web/app/403/page.tsx
rename to apps/web/app/(use-page-wrapper)/403/page.tsx
index 51f3b2c281..f7aed69ca6 100644
--- a/apps/web/app/403/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/403/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata, getTranslate } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import { APP_NAME, WEBAPP_URL } from "@calcom/lib/constants";
import { Button } from "@calcom/ui";
@@ -27,4 +26,4 @@ async function Error403() {
);
}
-export default WithLayout({ ServerPage: Error403 });
+export default Error403;
diff --git a/apps/web/app/500/copy-button.tsx b/apps/web/app/(use-page-wrapper)/500/copy-button.tsx
similarity index 100%
rename from apps/web/app/500/copy-button.tsx
rename to apps/web/app/(use-page-wrapper)/500/copy-button.tsx
diff --git a/apps/web/app/500/page.tsx b/apps/web/app/(use-page-wrapper)/500/page.tsx
similarity index 94%
rename from apps/web/app/500/page.tsx
rename to apps/web/app/(use-page-wrapper)/500/page.tsx
index 867b60d51c..32239cd166 100644
--- a/apps/web/app/500/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/500/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata, getTranslate } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import { APP_NAME } from "@calcom/lib/constants";
import { Button } from "@calcom/ui";
@@ -42,6 +41,4 @@ async function Error500({ searchParams }: { searchParams: { error?: string } })
);
}
-export default WithLayout({
- ServerPage: Error500,
-});
+export default Error500;
diff --git a/apps/web/app/auth/error/page.tsx b/apps/web/app/(use-page-wrapper)/auth/error/page.tsx
similarity index 93%
rename from apps/web/app/auth/error/page.tsx
rename to apps/web/app/(use-page-wrapper)/auth/error/page.tsx
index e3942ce67b..cd550ded4b 100644
--- a/apps/web/app/auth/error/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/auth/error/page.tsx
@@ -1,6 +1,5 @@
import type { PageProps } from "app/_types";
import { _generateMetadata, getTranslate } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import Link from "next/link";
import { z } from "zod";
@@ -44,4 +43,4 @@ const ServerPage = async ({ searchParams }: PageProps) => {
);
};
-export default WithLayout({ ServerPage })<"P">;
+export default ServerPage;
diff --git a/apps/web/app/bookings/[status]/page.tsx b/apps/web/app/(use-page-wrapper)/bookings/[status]/page.tsx
similarity index 100%
rename from apps/web/app/bookings/[status]/page.tsx
rename to apps/web/app/(use-page-wrapper)/bookings/[status]/page.tsx
diff --git a/apps/web/app/(use-page-wrapper)/bookings/layout.tsx b/apps/web/app/(use-page-wrapper)/bookings/layout.tsx
new file mode 100644
index 0000000000..9297d1d425
--- /dev/null
+++ b/apps/web/app/(use-page-wrapper)/bookings/layout.tsx
@@ -0,0 +1,21 @@
+import { getTranslate } from "app/_utils";
+
+import Shell from "@calcom/features/shell/Shell";
+
+async function BookingsStatusLayout({ children }: { children: React.ReactNode }) {
+ const t = await getTranslate();
+ return (
+
+ {children}
+
+ );
+}
+
+export default BookingsStatusLayout;
diff --git a/apps/web/app/connect-and-join/page.tsx b/apps/web/app/(use-page-wrapper)/connect-and-join/page.tsx
similarity index 68%
rename from apps/web/app/connect-and-join/page.tsx
rename to apps/web/app/(use-page-wrapper)/connect-and-join/page.tsx
index e0e7f58128..a271ffc7ec 100644
--- a/apps/web/app/connect-and-join/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/connect-and-join/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import LegacyPage from "~/connect-and-join/connect-and-join-view";
@@ -10,4 +9,4 @@ export const generateMetadata = async () => {
);
};
-export default WithLayout({ getLayout: null, Page: LegacyPage })<"P">;
+export default LegacyPage;
diff --git a/apps/web/app/enterprise/page.tsx b/apps/web/app/(use-page-wrapper)/enterprise/page.tsx
similarity index 71%
rename from apps/web/app/enterprise/page.tsx
rename to apps/web/app/(use-page-wrapper)/enterprise/page.tsx
index 2b3b1752f0..3be9790f06 100644
--- a/apps/web/app/enterprise/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/enterprise/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import EnterprisePage from "@components/EnterprisePage";
@@ -9,4 +8,4 @@ export const generateMetadata = async () =>
(t) => t("create_your_org_description")
);
-export default WithLayout({ Page: EnterprisePage })<"P">;
+export default EnterprisePage;
diff --git a/apps/web/app/(use-page-wrapper)/layout.tsx b/apps/web/app/(use-page-wrapper)/layout.tsx
new file mode 100644
index 0000000000..2e75568305
--- /dev/null
+++ b/apps/web/app/(use-page-wrapper)/layout.tsx
@@ -0,0 +1,20 @@
+import { cookies, headers } from "next/headers";
+
+import { buildLegacyCtx } from "@lib/buildLegacyCtx";
+
+import PageWrapper from "@components/PageWrapperAppDir";
+
+import { ssrInit } from "@server/lib/ssr";
+
+export default async function PageWrapperLayout({ children }: { children: React.ReactNode }) {
+ const h = headers();
+ const nonce = h.get("x-nonce") ?? undefined;
+ const context = buildLegacyCtx(headers(), cookies(), {}, {});
+ const ssr = await ssrInit(context);
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/apps/web/app/maintenance/page.tsx b/apps/web/app/(use-page-wrapper)/maintenance/page.tsx
similarity index 75%
rename from apps/web/app/maintenance/page.tsx
rename to apps/web/app/(use-page-wrapper)/maintenance/page.tsx
index da07ed7bdf..804f49b40d 100644
--- a/apps/web/app/maintenance/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/maintenance/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import { APP_NAME } from "@calcom/lib/constants";
@@ -12,4 +11,4 @@ export const generateMetadata = async () => {
);
};
-export default WithLayout({ getLayout: null, Page: LegacyPage })<"P">;
+export default LegacyPage;
diff --git a/apps/web/app/more/page.tsx b/apps/web/app/(use-page-wrapper)/more/page.tsx
similarity index 67%
rename from apps/web/app/more/page.tsx
rename to apps/web/app/(use-page-wrapper)/more/page.tsx
index d3325d2e50..0fbc354ec0 100644
--- a/apps/web/app/more/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/more/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import Page from "~/more/more-page-view";
@@ -10,4 +9,4 @@ export const generateMetadata = async () => {
);
};
-export default WithLayout({ getLayout: null, Page })<"P">;
+export default Page;
diff --git a/apps/web/app/upgrade/page.tsx b/apps/web/app/(use-page-wrapper)/upgrade/page.tsx
similarity index 65%
rename from apps/web/app/upgrade/page.tsx
rename to apps/web/app/(use-page-wrapper)/upgrade/page.tsx
index c8991427ce..26c5c6842a 100644
--- a/apps/web/app/upgrade/page.tsx
+++ b/apps/web/app/(use-page-wrapper)/upgrade/page.tsx
@@ -1,5 +1,4 @@
import { _generateMetadata } from "app/_utils";
-import { WithLayout } from "app/layoutHOC";
import LegacyPage from "~/upgrade/upgrade-view";
@@ -9,4 +8,4 @@ export const generateMetadata = async () =>
() => ""
);
-export default WithLayout({ getLayout: null, Page: LegacyPage })<"P">;
+export default LegacyPage;
diff --git a/apps/web/app/bookings/layout.tsx b/apps/web/app/bookings/layout.tsx
deleted file mode 100644
index 9f179fdea9..0000000000
--- a/apps/web/app/bookings/layout.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { WithLayout } from "app/layoutHOC";
-
-import { getLayout } from "~/bookings/views/bookings-listing-view";
-
-export default WithLayout({ getLayout });
diff --git a/apps/web/modules/bookings/views/bookings-listing-view.tsx b/apps/web/modules/bookings/views/bookings-listing-view.tsx
index 36e4aaba69..0442ff158f 100644
--- a/apps/web/modules/bookings/views/bookings-listing-view.tsx
+++ b/apps/web/modules/bookings/views/bookings-listing-view.tsx
@@ -7,7 +7,6 @@ import {
getSortedRowModel,
createColumnHelper,
} from "@tanstack/react-table";
-import type { ReactElement } from "react";
import { useMemo, useState } from "react";
import type { z } from "zod";
@@ -18,7 +17,6 @@ import { FiltersContainer } from "@calcom/features/bookings/components/FiltersCo
import type { filterQuerySchema } from "@calcom/features/bookings/lib/useFilterQuery";
import { useFilterQuery } from "@calcom/features/bookings/lib/useFilterQuery";
import { DataTableProvider, DataTableWrapper } from "@calcom/features/data-table";
-import Shell from "@calcom/features/shell/Shell";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
@@ -290,21 +288,3 @@ function BookingsContent({ status }: BookingsProps) {
);
}
-
-function BookingsStatusLayout({ children }: { children: React.ReactNode }) {
- const { t } = useLocale();
- return (
-
- {children}
-
- );
-}
-
-export const getLayout = (page: ReactElement) => {page};
diff --git a/apps/web/pagesAndRewritePaths.js b/apps/web/pagesAndRewritePaths.js
index 722d95417d..f34685a7ab 100644
--- a/apps/web/pagesAndRewritePaths.js
+++ b/apps/web/pagesAndRewritePaths.js
@@ -3,10 +3,10 @@ const { nextJsOrgRewriteConfig } = require("./getNextjsOrgRewriteConfig");
/** Needed to rewrite public booking page, gets all static pages but [user] */
// Pages found here are excluded from redirects in beforeFiles in next.config.js
let pages = (exports.pages = glob
- .sync("{pages,app}/**/[^_]*.{tsx,js,ts}", { cwd: __dirname })
+ .sync("{pages,app,app/(use-page-wrapper)}/**/[^_]*.{tsx,js,ts}", { cwd: __dirname })
.map((filename) =>
filename
- .replace(/^(pages|app)\//, "")
+ .replace(/^(app\/\(use-page-wrapper\)|pages|app)\//, "")
.replace(/(\.tsx|\.js|\.ts)/, "")
.replace(/\/.*/, "")
)
diff --git a/packages/features/auth/lib/hooks/useRedirectToLoginIfUnauthenticated.tsx b/packages/features/auth/lib/hooks/useRedirectToLoginIfUnauthenticated.tsx
index 84cb2afdd9..e0b7d68488 100644
--- a/packages/features/auth/lib/hooks/useRedirectToLoginIfUnauthenticated.tsx
+++ b/packages/features/auth/lib/hooks/useRedirectToLoginIfUnauthenticated.tsx
@@ -1,3 +1,5 @@
+"use client";
+
import { useSession } from "next-auth/react";
import { useRouter } from "next/navigation";
import { useEffect } from "react";
diff --git a/packages/features/auth/lib/hooks/useRedirectToOnboardingIfNeeded.tsx b/packages/features/auth/lib/hooks/useRedirectToOnboardingIfNeeded.tsx
index 51355e5be9..522fa3a3c5 100644
--- a/packages/features/auth/lib/hooks/useRedirectToOnboardingIfNeeded.tsx
+++ b/packages/features/auth/lib/hooks/useRedirectToOnboardingIfNeeded.tsx
@@ -1,3 +1,5 @@
+"use client";
+
import type { User } from "@prisma/client";
import { useRouter } from "next/navigation";
import { useEffect } from "react";
diff --git a/packages/features/shell/Shell.tsx b/packages/features/shell/Shell.tsx
index 4094e515e3..42da319075 100644
--- a/packages/features/shell/Shell.tsx
+++ b/packages/features/shell/Shell.tsx
@@ -1,3 +1,5 @@
+"use client";
+
import { useSession } from "next-auth/react";
import { usePathname, useRouter } from "next/navigation";
import type { Dispatch, ReactElement, ReactNode, SetStateAction } from "react";
diff --git a/packages/features/shell/useAppTheme.ts b/packages/features/shell/useAppTheme.ts
index c608ab8858..661d03d938 100644
--- a/packages/features/shell/useAppTheme.ts
+++ b/packages/features/shell/useAppTheme.ts
@@ -1,3 +1,5 @@
+"use client";
+
import getBrandColours from "@calcom/lib/getBrandColours";
import useTheme from "@calcom/lib/hooks/useTheme";
import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery";