import React, { useState, useEffect } from 'react'; import { X, Plus, Trash2 } from 'lucide-react'; import { DevOSSSession } from '../../types'; import { backendApi } from '../../services/apiClient'; interface Props { isOpen: boolean; onClose: () => void; onSuccess: () => void; session: DevOSSSession | null; } export const EditOSSModal: React.FC = ({ isOpen, onClose, onSuccess, session }) => { const [formData, setFormData] = useState({ address: '', startDate: '', endDate: '', status: 'planned' as 'active' | 'planned' | 'completed', type: 'extraordinary' as 'annual' | 'extraordinary', description: '', agendaItems: [] as string[], }); const [loading, setLoading] = useState(false); useEffect(() => { if (isOpen && session) { setFormData({ address: session.address || '', startDate: session.startDate ? session.startDate.slice(0, 10) : '', endDate: session.endDate ? session.endDate.slice(0, 10) : '', status: session.status || 'planned', type: session.type || 'extraordinary', description: (session.description ?? '') || '', agendaItems: Array.isArray(session.agendaItems) && session.agendaItems.length > 0 ? [...session.agendaItems] : [''], }); } }, [isOpen, session]); if (!isOpen || !session) return null; const defaultEndDate = formData.startDate ? new Date(new Date(formData.startDate).getTime() + 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0] : ''; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const address = formData.address?.trim(); const startDate = formData.startDate?.trim(); const endDate = formData.endDate?.trim() || defaultEndDate; if (!address || !startDate || !endDate) { alert('Заполните обязательные поля: адрес, дата начала, дата окончания'); return; } if (new Date(endDate) <= new Date(startDate)) { alert('Дата окончания должна быть позже даты начала'); return; } try { setLoading(true); const agenda = formData.agendaItems.filter((t) => t.trim()).length > 0 ? formData.agendaItems.filter((t) => t.trim()) : undefined; await backendApi.updateDevelopmentOSS(session.id, { address, startDate, endDate, status: formData.status, type: formData.type, description: formData.description?.trim() || null, agendaItems: agenda, }); window.dispatchEvent(new CustomEvent('mkd-oss-changed')); window.dispatchEvent(new CustomEvent('mkd-dev-summary-changed')); onClose(); onSuccess(); } catch (error: any) { console.error('Error updating OSS:', error); const errorMessage = error?.response?.data?.error || error?.message || error?.error || 'Ошибка при сохранении ОСС'; alert(errorMessage); } finally { setLoading(false); } }; return (
e.stopPropagation()} >

Редактировать ОСС

setFormData({ ...formData, address: e.target.value })} placeholder="ул. Примерная, д. 1" className="w-full p-2.5 rounded-xl border border-slate-200 text-sm focus:ring-2 focus:ring-primary-500 outline-none" />
setFormData({ ...formData, startDate: e.target.value })} className="w-full p-2.5 rounded-xl border border-slate-200 text-sm focus:ring-2 focus:ring-primary-500 outline-none" />
setFormData({ ...formData, endDate: e.target.value })} min={formData.startDate || undefined} className="w-full p-2.5 rounded-xl border border-slate-200 text-sm focus:ring-2 focus:ring-primary-500 outline-none" />
{(formData.agendaItems.length === 0 ? [''] : formData.agendaItems).map((text, idx) => (
{idx + 1}. { const next = [...(formData.agendaItems.length ? formData.agendaItems : [''])]; next[idx] = e.target.value; setFormData({ ...formData, agendaItems: next }); }} placeholder="Формулировка пункта" className="flex-1 p-2 rounded-xl border border-slate-200 text-sm" />
))}