import { useEffect, useState } from 'react'; import { Button, Card, List, Typography, Space, Empty, Popconfirm, message, Spin, Tag } from 'antd'; import { FileTextOutlined, DeleteOutlined, PlusOutlined, ReloadOutlined } from '@ant-design/icons'; // Форматирование даты без date-fns (если библиотека не установлена) const formatDate = (dateStr: string) => { try { const date = new Date(dateStr); const day = date.getDate(); const month = date.toLocaleDateString('ru-RU', { month: 'long' }); const year = date.getFullYear(); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${day} ${month} ${year}, ${hours}:${minutes}`; } catch { return dateStr; } }; const { Title, Text, Paragraph } = Typography; interface Draft { id: string; claim_id: string; session_token: string; status_code: string; created_at: string; updated_at: string; problem_description?: string; wizard_plan: boolean; wizard_answers: boolean; has_documents: boolean; } interface Props { phone?: string; session_id?: string; unified_id?: string; // ✅ Добавляем unified_id onSelectDraft: (claimId: string) => void; onNewClaim: () => void; } export default function StepDraftSelection({ phone, session_id, unified_id, // ✅ Добавляем unified_id onSelectDraft, onNewClaim, }: Props) { const [drafts, setDrafts] = useState([]); const [loading, setLoading] = useState(true); const [deletingId, setDeletingId] = useState(null); const loadDrafts = async () => { try { setLoading(true); const params = new URLSearchParams(); // ✅ Приоритет: unified_id > phone > session_id if (unified_id) { params.append('unified_id', unified_id); console.log('🔍 StepDraftSelection: загружаем черновики по unified_id:', unified_id); } else if (phone) { params.append('phone', phone); console.log('🔍 StepDraftSelection: загружаем черновики по phone:', phone); } else if (session_id) { params.append('session_id', session_id); console.log('🔍 StepDraftSelection: загружаем черновики по session_id:', session_id); } const url = `/api/v1/claims/drafts/list?${params.toString()}`; console.log('🔍 StepDraftSelection: запрос:', url); const response = await fetch(url); if (!response.ok) { throw new Error('Не удалось загрузить черновики'); } const data = await response.json(); console.log('🔍 StepDraftSelection: ответ API:', data); console.log('🔍 StepDraftSelection: количество черновиков:', data.count); setDrafts(data.drafts || []); } catch (error) { console.error('Ошибка загрузки черновиков:', error); message.error('Не удалось загрузить список черновиков'); } finally { setLoading(false); } }; useEffect(() => { loadDrafts(); }, [phone, session_id, unified_id]); // ✅ Добавляем unified_id в зависимости const handleDelete = async (claimId: string) => { try { setDeletingId(claimId); const response = await fetch(`/api/v1/claims/drafts/${claimId}`, { method: 'DELETE', }); if (!response.ok) { throw new Error('Не удалось удалить черновик'); } message.success('Черновик удален'); await loadDrafts(); } catch (error) { console.error('Ошибка удаления черновика:', error); message.error('Не удалось удалить черновик'); } finally { setDeletingId(null); } }; const getProgressInfo = (draft: Draft) => { const parts: string[] = []; if (draft.problem_description) parts.push('Описание'); if (draft.wizard_plan) parts.push('План вопросов'); if (draft.wizard_answers) parts.push('Ответы'); if (draft.has_documents) parts.push('Документы'); return parts.length > 0 ? parts.join(', ') : 'Начато'; }; return (
📋 Ваши черновики заявок Выберите черновик, чтобы продолжить заполнение, или создайте новую заявку.
{loading ? (
) : drafts.length === 0 ? ( ) : ( <> ( { console.log('🔍 Выбран черновик:', draft.claim_id, 'id:', draft.id); // Используем id (UUID) если claim_id отсутствует const draftId = draft.claim_id || draft.id; console.log('🔍 Загружаем черновик с ID:', draftId); onSelectDraft(draftId); }} icon={} > Продолжить , handleDelete(draft.claim_id!)} okText="Да, удалить" cancelText="Отмена" > , ]} > } title={ Черновик Черновик } description={ Обновлен: {formatDate(draft.updated_at)} {draft.problem_description && ( {draft.problem_description} )} {draft.wizard_plan ? '✓ План' : 'План'} {draft.wizard_answers ? '✓ Ответы' : 'Ответы'} {draft.has_documents ? '✓ Документы' : 'Документы'} Прогресс: {getProgressInfo(draft)} } /> )} />
)}
); }