From b29dd587b81f6e258b2ea3179abe28b436fba81e Mon Sep 17 00:00:00 2001 From: Peter Meier Date: Fri, 12 Jun 2026 11:59:31 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Mitmachen-Formular=20nativ=20(l=C3=B6st?= =?UTF-8?q?=20OpnForm=20ab)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MitmachenFormComponent: Name der BI*, Anliegen*, Ansprechpartner, Telefon, E-Mail, Datei-Upload (max 5×5MB, JPG/PNG/WebP/GIF/PDF), Consent — Honeypots + Client-Age + Turnstile wie Kontaktformular - /api/mitmachen: Multipart-Validierung (shared Modul), Forwarding an CMS /api/forms/mitmachen/submit-multipart - internal_component: form-mitmachen registriert - ~35 neue mitmachen_*-Translation-Keys Prod braucht BODY_SIZE_LIMIT=30M (adapter-node default 512K) — via secrets .env.prod deployt. Co-Authored-By: Claude Fable 5 --- src/lib/block-types.ts | 2 +- .../blocks/InternalComponentBlock.svelte | 3 + .../internal/MitmachenFormComponent.svelte | 389 ++++++++++++++++++ .../internal/mitmachen-form-validation.ts | 141 +++++++ src/lib/translations.ts | 36 ++ src/routes/api/mitmachen/+server.ts | 157 +++++++ 6 files changed, 727 insertions(+), 1 deletion(-) create mode 100644 src/lib/components/internal/MitmachenFormComponent.svelte create mode 100644 src/lib/components/internal/mitmachen-form-validation.ts create mode 100644 src/routes/api/mitmachen/+server.ts diff --git a/src/lib/block-types.ts b/src/lib/block-types.ts index c0ace94..0dbc5e9 100644 --- a/src/lib/block-types.ts +++ b/src/lib/block-types.ts @@ -469,7 +469,7 @@ export type CalendarBlockData = Omit< }; /** Internal component block (_type: "internal_component"). */ -export type InternalComponentId = "form-contact"; +export type InternalComponentId = "form-contact" | "form-mitmachen"; export interface InternalComponentBlockData { _type?: "internal_component"; diff --git a/src/lib/components/blocks/InternalComponentBlock.svelte b/src/lib/components/blocks/InternalComponentBlock.svelte index c9fe302..8bf76c5 100644 --- a/src/lib/components/blocks/InternalComponentBlock.svelte +++ b/src/lib/components/blocks/InternalComponentBlock.svelte @@ -2,6 +2,7 @@ import { getBlockLayoutClasses } from "$lib/block-layout"; import type { InternalComponentBlockData } from "$lib/block-types"; import ContactFormComponent from "$lib/components/internal/ContactFormComponent.svelte"; + import MitmachenFormComponent from "$lib/components/internal/MitmachenFormComponent.svelte"; let { block }: { block: InternalComponentBlockData } = $props(); @@ -12,6 +13,8 @@
{#if component === "form-contact"} + {:else if component === "form-mitmachen"} + {:else}

Unbekannte interne Komponente: {component}

{/if} diff --git a/src/lib/components/internal/MitmachenFormComponent.svelte b/src/lib/components/internal/MitmachenFormComponent.svelte new file mode 100644 index 0000000..54110dd --- /dev/null +++ b/src/lib/components/internal/MitmachenFormComponent.svelte @@ -0,0 +1,389 @@ + + +{#if formState === "success"} +
+

{t(T.mitmachen_success_title)}

+

{t(T.mitmachen_success_body)}

+
+{:else} +
+ + + +
+ +
+ +
+