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:
parent
32ca1dcd2a
commit
42cb554de4
3 changed files with 23 additions and 7 deletions
|
|
@ -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 />
|
||||||
|
|
|
||||||
|
|
@ -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 />
|
||||||
|
|
|
||||||
|
|
@ -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('Щось пішло не так. Спробуйте ще раз.')
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue