import React, { useState } from 'react'; import { X } from 'lucide-react'; import { backendApi } from '../../services/apiClient'; interface Props { isOpen: boolean; onClose: () => void; onSuccess: () => void; ossId: string; ossAddress: string; agendaItems?: string[]; } export const AddBallotModal: React.FC = ({ isOpen, onClose, onSuccess, ossId, ossAddress, agendaItems = [] }) => { const [formData, setFormData] = useState({ apartment: '', ownerName: '', area: 0, voteResult: '' as '' | 'for' | 'against' | 'abstain', notes: '', votesByItem: {} as Record, }); const [loading, setLoading] = useState(false); const hasAgendaItems = Array.isArray(agendaItems) && agendaItems.length > 0; if (!isOpen) return null; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.apartment || !formData.area) { alert('Заполните обязательные поля: номер помещения и площадь'); return; } try { setLoading(true); const votesByItem: Record = {}; if (hasAgendaItems && formData.votesByItem) { Object.entries(formData.votesByItem).forEach(([idx, v]: [string, string]) => { if (v && ['for', 'against', 'abstain'].includes(v)) votesByItem[idx] = v; }); } await backendApi.submitOSSBallot(ossId, { apartment: formData.apartment, owner_name: formData.ownerName || undefined, area: formData.area, vote_result: hasAgendaItems ? undefined : (formData.voteResult || undefined), notes: formData.notes || undefined, votes_by_item: Object.keys(votesByItem).length > 0 ? votesByItem : undefined, }); window.dispatchEvent(new CustomEvent('mkd-oss-changed')); onSuccess(); onClose(); setFormData({ apartment: '', ownerName: '', area: 0, voteResult: '', notes: '', votesByItem: {}, }); } catch (error: any) { console.error('Error submitting ballot:', error); const errorMessage = error?.message || error?.error || 'Ошибка при внесении бюллетеня'; alert(errorMessage); } finally { setLoading(false); } }; return (
e.stopPropagation()} >

Внести бюллетень

{ossAddress}

setFormData({ ...formData, apartment: e.target.value })} placeholder="15, 25А, 101" 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, ownerName: e.target.value })} placeholder="Иванов Иван Иванович" 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, area: parseFloat(e.target.value) || 0 })} className="w-full p-2.5 rounded-xl border border-slate-200 text-sm focus:ring-2 focus:ring-primary-500 outline-none" />
{hasAgendaItems ? (
{agendaItems.map((text, idx) => (
{idx + 1}. {text || 'Пункт ' + (idx + 1)}
))}
) : (
)}