// CreateProjectModal - Modal for creating new projects function CreateProjectModal({ users, referenti, onClose, onSuccess }) { // Get today's date in YYYY-MM-DD format const today = new Date().toISOString().split('T')[0]; const [formData, setFormData] = React.useState({ name: '', slug: '', description: '', start_date: today, due_date: '', priority: 'high', notes: '', }); const [selectedUsers, setSelectedUsers] = React.useState([]); const [selectedReferenti, setSelectedReferenti] = React.useState([]); const [loading, setLoading] = React.useState(false); const [error, setError] = React.useState(''); const generateSlug = (name) => { return name .toLowerCase() .replace(/[^a-z0-9\s-]/g, '') .replace(/\s+/g, '-') .replace(/-+/g, '-') .trim(); }; const handleNameChange = (e) => { const name = e.target.value; setFormData({ ...formData, name, slug: generateSlug(name), }); }; const handleUserToggle = (userId) => { setSelectedUsers(prev => { const existing = prev.includes(userId); if (existing) { return prev.filter(id => id !== userId); } else { return [...prev, userId]; } }); }; const handleReferenteToggle = (referenteId) => { setSelectedReferenti(prev => prev.includes(referenteId) ? prev.filter(id => id !== referenteId) : [...prev, referenteId] ); }; const handleSubmit = async (e) => { e.preventDefault(); setError(''); setLoading(true); try { const data = { ...formData }; // Clean up empty optional fields if (!data.description) delete data.description; if (!data.notes) delete data.notes; if (!data.due_date) delete data.due_date; // Create project const project = await ApiUtils.createProject(data); // Assign selected users for (const userId of selectedUsers) { try { await ApiUtils.assignUserToProject(project.id, { user_id: userId, }); } catch (assignErr) { console.error('Failed to assign user:', assignErr); } } // Assign selected referenti to the project for (const referenteId of selectedReferenti) { try { // Get the referente's current project_ids and add the new project const referente = referenti.find(r => r.id === referenteId); if (referente) { const updatedProjectIds = [...(referente.project_ids || []), project.id]; await ApiUtils.updateReferente(referenteId, { project_ids: updatedProjectIds }); } } catch (assignErr) { console.error('Failed to assign referente:', assignErr); } } onSuccess(); } catch (err) { setError(err.message); } finally { setLoading(false); } }; return (