feat(landing): заглушка страницы с рабочей формой

This commit is contained in:
2026-10-17 15:47:24 +03:00
parent c2786f5894
commit 02da483747
9 changed files with 527 additions and 1 deletions
+27
View File
@@ -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' };
}
};