import { Form, Input, Button, Typography, message, Checkbox } from 'antd'; import { useEffect, useState } from 'react'; import wizardPlanSample from '../../mocks/wizardPlanSample'; const { TextArea } = Input; const { Paragraph } = Typography; interface Props { formData: any; updateFormData: (data: any) => void; onPrev: () => void; onNext: () => void; } export default function StepDescription({ formData, updateFormData, onPrev, onNext, }: Props) { const [form] = Form.useForm(); const [submitting, setSubmitting] = useState(false); const [useMockWizard, setUseMockWizard] = useState(true); const buildPrefillMap = (prefill?: Array<{ name: string; value: any }>) => { if (!prefill) { return {}; } return prefill.reduce>((acc, item) => { if (item?.name) { acc[item.name] = item.value; } return acc; }, {}); }; useEffect(() => { form.setFieldsValue({ problemDescription: formData.problemDescription ?? '', }); }, [form, formData.problemDescription]); const handleContinue = async () => { try { let problemDescription = form.getFieldValue('problemDescription'); if (!useMockWizard) { const values = await form.validateFields(); problemDescription = values.problemDescription; } const safeDescription = problemDescription || ''; if (!formData.session_id) { message.error('Не найден session_id. Попробуйте обновить страницу.'); return; } if (!formData.claim_id) { message.error('Не удалось определить номер обращения. Вернитесь на шаг с телефоном.'); return; } setSubmitting(true); if (useMockWizard && wizardPlanSample?.wizard_plan) { const mockPrefill = buildPrefillMap(wizardPlanSample.answers_prefill); const mockClaimId = wizardPlanSample.claim_id || formData.claim_id; updateFormData({ problemDescription: safeDescription, claim_id: mockClaimId, wizardPlan: wizardPlanSample.wizard_plan, wizardPlanStatus: 'ready', wizardPrefill: mockPrefill, wizardPrefillArray: wizardPlanSample.answers_prefill, wizardCoverageReport: wizardPlanSample.coverage_report, wizardAnswers: undefined, }); message.success('Загружены сохранённые рекомендации (DEV).'); onNext(); return; } const response = await fetch('/api/v1/claims/description', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ session_id: formData.session_id, claim_id: formData.claim_id, phone: formData.phone, email: formData.email, problem_description: safeDescription, }), }); if (!response.ok) { throw new Error(`Ошибка API: ${response.status}`); } message.success('Описание отправлено, подбираем рекомендации...'); updateFormData({ problemDescription: safeDescription, wizardPlan: undefined, wizardPlanStatus: 'pending', wizardAnswers: undefined, wizardPrefill: undefined, wizardPrefillArray: undefined, }); onNext(); } catch (error) { console.error(error); message.error('Не получилось сохранить описание. Попробуйте ещё раз.'); } finally { setSubmitting(false); } }; return (
📄 Опишите проблему Расскажите, что произошло, в свободной форме. Чем больше деталей — тем быстрее команда сможет разобраться, какие документы нужны и куда направить заявку.
{ if (useMockWizard) { return Promise.resolve(); } if (!value) { return Promise.reject(new Error('Поле обязательно')); } if (value.length < 20) { return Promise.reject( new Error('Опишите, пожалуйста, минимум в пару предложений') ); } return Promise.resolve(); }, }, ]} >