import React, { useState, useEffect, useRef } from 'react'; import { Area } from '../../entities/Area'; import { Project } from '../../entities/Project'; interface ProjectModalProps { isOpen: boolean; onClose: () => void; onSave: (project: Project) => void; onDelete?: () => void; project?: Project; areas: Area[]; } const ProjectModal: React.FC = ({ isOpen, onClose, onSave, onDelete, project, areas }) => { const [formData, setFormData] = useState( project || { name: '', description: '', area_id: null, active: true, pin_to_sidebar: false, } ); const modalRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (modalRef.current && !modalRef.current.contains(event.target as Node)) { onClose(); } }; if (isOpen) { document.addEventListener('mousedown', handleClickOutside); } return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [isOpen, onClose]); useEffect(() => { if (project) { setFormData(project); } }, [project]); const handleChange = ( e: React.ChangeEvent ) => { const { name, value, type, checked } = e.target; setFormData((prev) => ({ ...prev, [name]: type === 'checkbox' ? checked : value, })); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSave(formData); onClose(); }; if (!isOpen) return null; return (
{/* Project Name */}
{/* Description */}
{/* Area */}
{/* Custom Active Checkbox */}
{/* Custom Pin to Sidebar Checkbox */} {/*
*/}
{/* Modal Actions */}
{project && ( )}
); }; export default ProjectModal;