aboutsummaryrefslogtreecommitdiffstats
path: root/src/pages
diff options
context:
space:
mode:
authorNikhil M Warrier <nikhilmw.dev@gmail.com>2026-03-13 08:52:29 +0530
committerNikhil M Warrier <nikhilmw.dev@gmail.com>2026-03-13 08:52:29 +0530
commit30a3651c17bfd8a771feaaaa4cb700788b757f80 (patch)
tree1a7560a6d9e0144c59a4792bcb629ea150564301 /src/pages
parent102a717ae001564349c2f0b2992459d6d5f91d08 (diff)
feat: Add forms
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/forms/[...id].astro68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/pages/forms/[...id].astro b/src/pages/forms/[...id].astro
new file mode 100644
index 0000000..713e599
--- /dev/null
+++ b/src/pages/forms/[...id].astro
@@ -0,0 +1,68 @@
+---
+import { FORM_POST_URL } from '@/consts'
+import Layout from '@/layouts/Layout.astro'
+import { getAllForms } from '@/lib/data-utils'
+
+export async function getStaticPaths() {
+ const forms = await getAllForms()
+ return forms.map((form) => ({
+ params: { id: form.id },
+ props: form,
+ }))
+}
+
+const form = Astro.props.data
+const fields = Astro.props.data.form.fields
+---
+
+<Layout>
+ <section
+ class="border-border mx-auto flex w-full max-w-3xl flex-col items-center gap-y-6 rounded-xl border p-8"
+ >
+ <form
+ action={`${FORM_POST_URL}${form.id}`}
+ method="POST"
+ class="flex w-full flex-col items-start gap-12"
+ >
+ <h1 class="w-full text-center text-3xl">
+ {form.title}
+ </h1>
+
+ {
+ fields.map((field) => (
+ <div class="flex w-full flex-col gap-2">
+ <label for={field.id} class="text-muted-foreground pl-1">
+ {field.label}
+ </label>
+
+ {field.type === 'textarea' ? (
+ <textarea
+ id={field.id}
+ name={field.id}
+ required={field.required}
+ rows="4"
+ class="border-border rounded-xl border px-4 py-2"
+ />
+ ) : (
+ <input
+ type={field.type || 'text'}
+ id={field.id}
+ name={field.id}
+ required={field.required}
+ class="border-border rounded-xl border px-4 py-2"
+ />
+ )}
+ </div>
+ ))
+ }
+
+ <div class="flex w-full justify-end">
+ <button
+ type="submit"
+ class="bg-primary text-primary-foreground rounded-lg px-4 py-2 font-sans text-lg font-bold"
+ >{form.submit_text || 'Submit'}</button
+ >
+ </div>
+ </form>
+ </section>
+</Layout>