Skip to content

Commit 1c3ad9d

Browse files
authored
refactor: make routing forms code more maintainable (calcom#21478)
* create layout for routing/forms * refactor * refators * fix * clean up
1 parent d43afe7 commit 1c3ad9d

9 files changed

Lines changed: 58 additions & 67 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { ReactNode } from "react";
2+
3+
import FormProvider from "./FormProvider";
4+
5+
export default async function Layout({ children }: { children: ReactNode }) {
6+
return <FormProvider>{children}</FormProvider>;
7+
}

apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/page.tsx

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,23 @@ import { cookies, headers } from "next/headers";
55

66
import { routingFormsComponents } from "@calcom/app-store/routing-forms/pages/app-routing.client-config";
77
import type { routingServerSidePropsConfig } from "@calcom/app-store/routing-forms/pages/app-routing.server-config";
8-
import Shell from "@calcom/features/shell/Shell";
98

109
import { getServerSideProps } from "@lib/apps/routing-forms/[...pages]/getServerSideProps";
1110
import { buildLegacyCtx } from "@lib/buildLegacyCtx";
1211

13-
import FormProvider from "./FormProvider";
14-
1512
const normalizePages = (pages: string[] | string | undefined) => {
1613
const normalizedPages = Array.isArray(pages) ? pages : pages?.split("/") ?? [];
17-
return {
18-
mainPage: normalizedPages[0] ?? "forms",
19-
subPages: normalizedPages.slice(1),
20-
};
14+
return normalizedPages[0];
2115
};
2216

2317
export const generateMetadata = async ({ params }: { params: Promise<{ pages: string[] }> }) => {
24-
const { mainPage } = normalizePages((await params).pages);
18+
const mainPage = normalizePages((await params).pages);
2519
return await _generateMetadata(
2620
(t) => (mainPage === "routing-link" ? `Form | Cal.com Forms` : `${t("routing_forms")} | Cal.com Forms`),
2721
() => "",
2822
undefined,
2923
undefined,
30-
`/apps/routing-forms/${(await params).pages.join("/")}`
24+
`/routing/${(await params).pages.join("/")}`
3125
);
3226
};
3327

@@ -38,25 +32,11 @@ const getData = withAppDirSsr<GetServerSidePropsResult>(getServerSideProps);
3832
const ServerPage = async ({ params, searchParams }: ServerPageProps) => {
3933
const context = buildLegacyCtx(await headers(), await cookies(), await params, await searchParams);
4034
const props = await getData(context);
41-
const { mainPage } = normalizePages((await params).pages);
35+
const mainPage = normalizePages((await params).pages);
4236

4337
const Component = await routingFormsComponents[mainPage as keyof typeof routingFormsComponents]();
44-
const FinalComponent = () => (
45-
<FormProvider>
46-
<Component {...(props as any)} />
47-
</FormProvider>
48-
);
49-
50-
// TODO: we should really be using layout for this.
51-
if (mainPage === "forms") {
52-
return (
53-
<Shell withoutMain>
54-
<FinalComponent />
55-
</Shell>
56-
);
57-
}
5838

59-
return <FinalComponent />;
39+
return <Component {...(props as any)} />;
6040
};
6141

6242
export default ServerPage;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { _generateMetadata } from "app/_utils";
2+
3+
import Forms from "@calcom/app-store/routing-forms/pages/forms/[...appPages]";
4+
5+
export const generateMetadata = async ({ params }: { params: Promise<{ pages: string[] }> }) => {
6+
const pages = (await params).pages;
7+
8+
return await _generateMetadata(
9+
(t) => `${t("routing_forms")} | Cal.com Forms`,
10+
() => "",
11+
undefined,
12+
undefined,
13+
`/routing/forms/${pages?.length > 0 ? pages.join("/") : ""}`
14+
);
15+
};
16+
17+
const ServerPage = async () => {
18+
return <Forms appUrl="/routing" />;
19+
};
20+
21+
export default ServerPage;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { cookies, headers } from "next/headers";
2+
import { redirect } from "next/navigation";
3+
import type { ReactNode } from "react";
4+
5+
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
6+
import Shell from "@calcom/features/shell/Shell";
7+
8+
import { buildLegacyRequest } from "@lib/buildLegacyCtx";
9+
10+
import FormProvider from "../[...pages]/FormProvider";
11+
12+
export default async function Layout({ children }: { children: ReactNode }) {
13+
const session = await getServerSession({ req: buildLegacyRequest(await headers(), await cookies()) });
14+
15+
if (!session?.user?.id) {
16+
redirect("/auth/login");
17+
}
18+
return (
19+
<Shell withoutMain={true}>
20+
<FormProvider>{children}</FormProvider>
21+
</Shell>
22+
);
23+
}

apps/web/lib/apps/routing-forms/[...pages]/getServerSideProps.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type { GetServerSidePropsResult, GetServerSidePropsContext } from "next";
22
import { z } from "zod";
33

4-
import { getAppWithMetadata } from "@calcom/app-store/_appRegistry";
54
import { routingServerSidePropsConfig } from "@calcom/app-store/routing-forms/pages/app-routing.server-config";
65
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
76
import prisma from "@calcom/prisma";
@@ -33,13 +32,6 @@ export async function getServerSideProps(
3332

3433
const session = await getServerSession({ req });
3534
const user = session?.user;
36-
const app = await getAppWithMetadata({ slug: "routing-forms" });
37-
38-
if (!app) {
39-
return {
40-
notFound: true,
41-
};
42-
}
4335

4436
const result = await getServerSideProps(context as AppGetServerSidePropsContext, prisma, user);
4537

@@ -53,7 +45,7 @@ export async function getServerSideProps(
5345

5446
return {
5547
props: {
56-
appUrl: app.simplePath || `/apps/routing-forms`,
48+
appUrl: "/routing",
5749
...result.props,
5850
},
5951
};

packages/app-store/routing-forms/pages/app-routing.client-config.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
export const routingFormsComponents = {
22
"form-edit": () => import("./form-edit/[...appPages]").then((mod) => mod.default),
33
"route-builder": () => import("./route-builder/[...appPages]").then((mod) => mod.default),
4-
forms: () => import("./forms/[...appPages]").then((mod) => mod.default),
54
"routing-link": () => import("./routing-link/[...appPages]").then((mod) => mod.default),
65
reporting: () => import("./reporting/[...appPages]").then((mod) => mod.default),
76
"incomplete-booking": () => import("./incomplete-booking/[...appPages]").then((mod) => mod.default),

packages/app-store/routing-forms/pages/app-routing.server-config.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ import "server-only";
33
import type { AppGetServerSideProps } from "@calcom/types/AppGetServerSideProps";
44

55
import { getServerSidePropsForSingleFormView as getServerSidePropsSingleForm } from "../components/getServerSidePropsSingleForm";
6-
import { getServerSideProps as getServerSidePropsForms } from "./forms/getServerSideProps";
76
import { getServerSideProps as getServerSidePropsRoutingLink } from "./routing-link/getServerSideProps";
87

98
export const routingServerSidePropsConfig: Record<string, AppGetServerSideProps> = {
10-
forms: getServerSidePropsForms,
119
"form-edit": getServerSidePropsSingleForm,
1210
"route-builder": getServerSidePropsSingleForm,
1311
"routing-link": getServerSidePropsRoutingLink,

packages/app-store/routing-forms/pages/forms/[...appPages].tsx

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,10 @@ import { Icon } from "@calcom/ui/components/icon";
2626
import { List, ListLinkItem } from "@calcom/ui/components/list";
2727
import { Tooltip } from "@calcom/ui/components/tooltip";
2828

29-
import type { inferSSRProps } from "@lib/types/inferSSRProps";
30-
3129
import type { SetNewFormDialogState, NewFormDialogState } from "../../components/FormActions";
3230
import { FormAction, FormActionsDropdown, FormActionsProvider } from "../../components/FormActions";
3331
import { isFallbackRoute } from "../../lib/isFallbackRoute";
3432
import type { RoutingFormWithResponseCount } from "../../types/types";
35-
import { getServerSideProps } from "./getServerSideProps";
3633

3734
function NewFormButton({ setNewFormDialogState }: { setNewFormDialogState: SetNewFormDialogState }) {
3835
const { t } = useLocale();
@@ -47,11 +44,7 @@ function NewFormButton({ setNewFormDialogState }: { setNewFormDialogState: SetNe
4744
);
4845
}
4946

50-
export default function RoutingForms({
51-
appUrl,
52-
}: inferSSRProps<typeof getServerSideProps> & {
53-
appUrl: string;
54-
}) {
47+
export default function RoutingForms({ appUrl }: { appUrl: string }) {
5548
const { t } = useLocale();
5649
const { hasPaidPlan } = useHasPaidPlan();
5750
const routerQuery = useRouterQuery();
@@ -332,5 +325,3 @@ export default function RoutingForms({
332325
</LicenseRequired>
333326
);
334327
}
335-
336-
export { getServerSideProps };

packages/app-store/routing-forms/pages/forms/getServerSideProps.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)