feat(forms): use FormBlock when form is set in CMS, fallback to hardcoded

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vadym Samoilenko 2026-05-18 12:07:04 +01:00
parent 32ca1dcd2a
commit 42cb554de4
3 changed files with 23 additions and 7 deletions

View file

@ -3,6 +3,7 @@ import { getPayload } from 'payload'
import configPromise from '@payload-config' import configPromise from '@payload-config'
import { PageHero } from '@/components/ui/PageHero' import { PageHero } from '@/components/ui/PageHero'
import { BirthdayBookingForm } from '@/components/forms/BirthdayBookingForm' import { BirthdayBookingForm } from '@/components/forms/BirthdayBookingForm'
import { FormBlock, type FormData as FormBlockData } from '@/components/forms/FormBlock'
import { RefreshRouteOnSave } from '@/components/cms/RefreshRouteOnSave' import { RefreshRouteOnSave } from '@/components/cms/RefreshRouteOnSave'
export const revalidate = 60 export const revalidate = 60
@ -10,7 +11,7 @@ export const revalidate = 60
async function getBirthdayPageData() { async function getBirthdayPageData() {
try { try {
const payload = await getPayload({ config: configPromise }) 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 { } catch {
return null return null
} }
@ -126,7 +127,14 @@ export default async function BirthdayPage({
{pageData?.formSubtitle ?? {pageData?.formSubtitle ??
"Залиште заявку і наш менеджер зв'яжеться з вами протягом 30 хвилин"} "Залиште заявку і наш менеджер зв'яжеться з вами протягом 30 хвилин"}
</p> </p>
<BirthdayBookingForm defaultPackage={defaultPackage} /> {pageData?.form && typeof pageData.form === 'object' ? (
<FormBlock
form={pageData.form as unknown as FormBlockData}
submitLabel="Замовити святкування"
/>
) : (
<BirthdayBookingForm defaultPackage={defaultPackage} />
)}
</div> </div>
</div> </div>
<RefreshRouteOnSave /> <RefreshRouteOnSave />

View file

@ -3,6 +3,7 @@ import { getPayload } from 'payload'
import configPromise from '@payload-config' import configPromise from '@payload-config'
import { PageHero } from '@/components/ui/PageHero' import { PageHero } from '@/components/ui/PageHero'
import { GroupRequestForm } from '@/components/forms/GroupRequestForm' import { GroupRequestForm } from '@/components/forms/GroupRequestForm'
import { FormBlock, type FormData as FormBlockData } from '@/components/forms/FormBlock'
import { RefreshRouteOnSave } from '@/components/cms/RefreshRouteOnSave' import { RefreshRouteOnSave } from '@/components/cms/RefreshRouteOnSave'
export const revalidate = 60 export const revalidate = 60
@ -18,7 +19,7 @@ interface Group {
async function getGroupVisitsData() { async function getGroupVisitsData() {
try { try {
const payload = await getPayload({ config: configPromise }) 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 { } catch {
return null return null
} }
@ -100,7 +101,14 @@ export default async function GroupVisitsPage() {
> >
{formSubtitle} {formSubtitle}
</p> </p>
<GroupRequestForm /> {data?.form && typeof data.form === 'object' ? (
<FormBlock
form={data.form as unknown as FormBlockData}
submitLabel="Надіслати заявку"
/>
) : (
<GroupRequestForm />
)}
</div> </div>
</div> </div>
<RefreshRouteOnSave /> <RefreshRouteOnSave />

View file

@ -25,8 +25,8 @@ interface FormField {
width?: number width?: number
} }
interface FormData { export interface FormData {
id: string id: string | number
title?: string title?: string
fields?: FormField[] fields?: FormField[]
confirmationType?: 'message' | 'redirect' confirmationType?: 'message' | 'redirect'
@ -59,7 +59,7 @@ export function FormBlock({ form, submitLabel }: FormBlockProps) {
const res = await fetch('/api/form-submissions', { const res = await fetch('/api/form-submissions', {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ form: form.id, submissionData }), body: JSON.stringify({ form: String(form.id), submissionData }),
}) })
if (!res.ok) { if (!res.ok) {
setError('Щось пішло не так. Спробуйте ще раз.') setError('Щось пішло не так. Спробуйте ще раз.')