import React, { useState } from 'react'; import { X, Send, Calendar } from 'lucide-react'; import { DomaApplicationStatus } from '../../types'; interface Props { isOpen: boolean; onClose: () => void; application: { id: number; number: string; address: string; currentStatus: DomaApplicationStatus; }; newStatus: DomaApplicationStatus; onConfirm: (comment: string, deferredUntil?: string) => Promise; } export const StatusChangeModal: React.FC = ({ isOpen, onClose, application, newStatus, onConfirm, }) => { const [comment, setComment] = useState(''); const [deferredUntil, setDeferredUntil] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); if (!isOpen) return null; const statusLabels: Record = { new: 'Новая', in_progress: 'В работу', deferred: 'Отложить', done: 'Завершить', canceled: 'Отменить', }; const statusMessages: Record = { new: 'Укажите причину возврата заявки в статус "Новая"', in_progress: 'Укажите комментарий для жителя о начале работы', deferred: 'Укажите причину отложения и новую дату переноса заявки', done: 'Укажите комментарий для жителя о выполнении работы', canceled: 'Укажите причину отмены заявки', }; const isReasonOnly = newStatus === 'canceled' || newStatus === 'deferred'; const commentLabel = isReasonOnly ? (newStatus === 'canceled' ? 'Причина отмены' : 'Причина отложения') : 'Комментарий для жителя'; const requiresDate = newStatus === 'deferred'; const requiresComment = true; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); if (requiresComment && !comment.trim()) { setError('Комментарий обязателен для заполнения'); return; } if (requiresDate && !deferredUntil) { setError('Укажите дату отложения заявки'); return; } setLoading(true); try { await onConfirm(comment.trim(), deferredUntil || undefined); // Сброс формы после успешного подтверждения setComment(''); setDeferredUntil(''); onClose(); } catch (err: any) { setError(err.message || 'Ошибка при обновлении статуса заявки'); } finally { setLoading(false); } }; const handleClose = () => { if (!loading) { setComment(''); setDeferredUntil(''); setError(null); onClose(); } }; // Минимальная дата - сегодня const minDate = new Date().toISOString().split('T')[0]; return (
{/* Header */}

{statusLabels[newStatus]} заявку

№ {application.number} • {application.address}

{/* Content */}
{statusMessages[newStatus]}
{/* Причина / Комментарий */}