feat(landing): заглушка страницы с рабочей формой
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
// Отправка заявки на POST /api/lead.
|
||||
import type { FieldErrors, LeadRequest, LeadResponse } from '@kvarta/shared/lead';
|
||||
|
||||
export type SubmitOutcome =
|
||||
| { kind: 'success' }
|
||||
| { kind: 'invalid'; fieldErrors: FieldErrors }
|
||||
| { kind: 'failed' };
|
||||
|
||||
export type SendLead = (body: LeadRequest) => Promise<SubmitOutcome>;
|
||||
|
||||
export const sendLead: SendLead = async (body) => {
|
||||
try {
|
||||
const res = await fetch('/api/lead', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
const data = (await res.json().catch(() => null)) as LeadResponse | null;
|
||||
if (res.ok && data?.ok) return { kind: 'success' };
|
||||
if (res.status === 400 && data && !data.ok && data.error === 'validation') {
|
||||
return { kind: 'invalid', fieldErrors: data.fieldErrors };
|
||||
}
|
||||
return { kind: 'failed' };
|
||||
} catch {
|
||||
return { kind: 'failed' };
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user