From 42cb554de4b08ec9989bade400a51db8ca96a4b3 Mon Sep 17 00:00:00 2001
From: Vadym Samoilenko
Date: Mon, 18 May 2026 12:07:04 +0100
Subject: [PATCH] feat(forms): use FormBlock when form is set in CMS, fallback
to hardcoded
Co-Authored-By: Claude Sonnet 4.6
---
src/app/(frontend)/dni-narodzhennia/page.tsx | 12 ++++++++++--
src/app/(frontend)/grupovi-vidviduvannia/page.tsx | 12 ++++++++++--
src/components/forms/FormBlock.tsx | 6 +++---
3 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/src/app/(frontend)/dni-narodzhennia/page.tsx b/src/app/(frontend)/dni-narodzhennia/page.tsx
index 1ab4e9b..b6b4a41 100644
--- a/src/app/(frontend)/dni-narodzhennia/page.tsx
+++ b/src/app/(frontend)/dni-narodzhennia/page.tsx
@@ -3,6 +3,7 @@ import { getPayload } from 'payload'
import configPromise from '@payload-config'
import { PageHero } from '@/components/ui/PageHero'
import { BirthdayBookingForm } from '@/components/forms/BirthdayBookingForm'
+import { FormBlock, type FormData as FormBlockData } from '@/components/forms/FormBlock'
import { RefreshRouteOnSave } from '@/components/cms/RefreshRouteOnSave'
export const revalidate = 60
@@ -10,7 +11,7 @@ export const revalidate = 60
async function getBirthdayPageData() {
try {
const payload = await getPayload({ config: configPromise })
- return await payload.findGlobal({ slug: 'birthday-page', depth: 0 })
+ return await payload.findGlobal({ slug: 'birthday-page', depth: 1 })
} catch {
return null
}
@@ -126,7 +127,14 @@ export default async function BirthdayPage({
{pageData?.formSubtitle ??
"Залиште заявку і наш менеджер зв'яжеться з вами протягом 30 хвилин"}
-
+ {pageData?.form && typeof pageData.form === 'object' ? (
+
+ ) : (
+
+ )}
diff --git a/src/app/(frontend)/grupovi-vidviduvannia/page.tsx b/src/app/(frontend)/grupovi-vidviduvannia/page.tsx
index c979602..9d076cc 100644
--- a/src/app/(frontend)/grupovi-vidviduvannia/page.tsx
+++ b/src/app/(frontend)/grupovi-vidviduvannia/page.tsx
@@ -3,6 +3,7 @@ import { getPayload } from 'payload'
import configPromise from '@payload-config'
import { PageHero } from '@/components/ui/PageHero'
import { GroupRequestForm } from '@/components/forms/GroupRequestForm'
+import { FormBlock, type FormData as FormBlockData } from '@/components/forms/FormBlock'
import { RefreshRouteOnSave } from '@/components/cms/RefreshRouteOnSave'
export const revalidate = 60
@@ -18,7 +19,7 @@ interface Group {
async function getGroupVisitsData() {
try {
const payload = await getPayload({ config: configPromise })
- return await payload.findGlobal({ slug: 'group-visits-page', depth: 0 })
+ return await payload.findGlobal({ slug: 'group-visits-page', depth: 1 })
} catch {
return null
}
@@ -100,7 +101,14 @@ export default async function GroupVisitsPage() {
>
{formSubtitle}
-
+ {data?.form && typeof data.form === 'object' ? (
+
+ ) : (
+
+ )}
diff --git a/src/components/forms/FormBlock.tsx b/src/components/forms/FormBlock.tsx
index 539b657..1661437 100644
--- a/src/components/forms/FormBlock.tsx
+++ b/src/components/forms/FormBlock.tsx
@@ -25,8 +25,8 @@ interface FormField {
width?: number
}
-interface FormData {
- id: string
+export interface FormData {
+ id: string | number
title?: string
fields?: FormField[]
confirmationType?: 'message' | 'redirect'
@@ -59,7 +59,7 @@ export function FormBlock({ form, submitLabel }: FormBlockProps) {
const res = await fetch('/api/form-submissions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ form: form.id, submissionData }),
+ body: JSON.stringify({ form: String(form.id), submissionData }),
})
if (!res.ok) {
setError('Щось пішло не так. Спробуйте ще раз.')