diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/[id]/page.tsx similarity index 59% rename from apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx rename to apps/nextjs/src/app/[locale]/manage/integrations/new/[id]/page.tsx index dba8e5c1f..4622faa1e 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/[id]/page.tsx @@ -3,49 +3,55 @@ import { Container, Group, Stack, Title } from "@mantine/core"; import { z } from "zod"; import { auth } from "@homarr/auth/next"; -import type { IntegrationKind } from "@homarr/definitions"; import { getIntegrationName, integrationKinds } from "@homarr/definitions"; import { getScopedI18n } from "@homarr/translation/server"; import { IntegrationAvatar } from "@homarr/ui"; import type { validation } from "@homarr/validation"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; -import { NewIntegrationForm } from "./_integration-new-form"; +import { NewIntegrationForm } from "../_integration-new-form"; -interface NewIntegrationPageProps { - searchParams: Promise< - Partial> & { - kind: IntegrationKind; - } - >; +interface NewIntegrationByIdPageProps { + params: { + id: string; + }; + searchParams: Partial>; } -export default async function IntegrationsNewPage(props: NewIntegrationPageProps) { - const searchParams = await props.searchParams; +export function generateStaticParams() { + return integrationKinds.map((kind) => ({ + id: kind, + })); +} + +export default async function IntegrationNewByIdPage(props: NewIntegrationByIdPageProps) { + const { id } = props.params; const session = await auth(); + if (!session?.user.permissions.includes("integration-create")) { notFound(); } - const result = z.enum(integrationKinds).safeParse(searchParams.kind); + const result = z.enum(integrationKinds).safeParse(id); if (!result.success) { notFound(); } const tCreate = await getScopedI18n("integration.page.create"); - const currentKind = result.data; + const dynamicMappings = new Map([[id, getIntegrationName(currentKind)]]); + return ( <> - + {tCreate("title", { name: getIntegrationName(currentKind) })} - + diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx index a697b9270..af94f6642 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/_integration-new-dropdown.tsx @@ -39,7 +39,7 @@ export const IntegrationCreateDropdownContent = () => { {filteredKinds.length > 0 ? ( {filteredKinds.map((kind) => ( - + {getIntegrationName(kind)}