({ project })
| 4 | import AddProjectMember from "./AddProjectMember"; |
| 5 | |
| 6 | export default function ProjectSettings({ project }) { |
| 7 | |
| 8 | const [formData, setFormData] = useState({ |
| 9 | name: "New Website Launch", |
| 10 | description: "Initial launch for new web platform.", |
| 11 | status: "PLANNING", |
| 12 | priority: "MEDIUM", |
| 13 | start_date: "2025-09-10", |
| 14 | end_date: "2025-10-15", |
| 15 | progress: 30, |
| 16 | }); |
| 17 | |
| 18 | const [isDialogOpen, setIsDialogOpen] = useState(false); |
| 19 | const [isSubmitting, setIsSubmitting] = useState(false); |
| 20 | |
| 21 | const handleSubmit = async (e) => { |
| 22 | e.preventDefault(); |
| 23 | |
| 24 | }; |
| 25 | |
| 26 | useEffect(() => { |
| 27 | if (project) setFormData(project); |
| 28 | }, [project]); |
| 29 | |
| 30 | const inputClasses = "w-full px-3 py-2 rounded mt-2 border text-sm dark:bg-zinc-900 border-zinc-300 dark:border-zinc-700 text-zinc-900 dark:text-zinc-300"; |
| 31 | |
| 32 | const cardClasses = "rounded-lg border p-6 not-dark:bg-white dark:bg-gradient-to-br dark:from-zinc-800/70 dark:to-zinc-900/50 border-zinc-300 dark:border-zinc-800"; |
| 33 | |
| 34 | const labelClasses = "text-sm text-zinc-600 dark:text-zinc-400"; |
| 35 | |
| 36 | return ( |
| 37 | <div className="grid lg:grid-cols-2 gap-8"> |
| 38 | {/* Project Details */} |
| 39 | <div className={cardClasses}> |
| 40 | <h2 className="text-lg font-medium text-zinc-900 dark:text-zinc-300 mb-4">Project Details</h2> |
| 41 | <form onSubmit={handleSubmit} className="space-y-4"> |
| 42 | {/* Name */} |
| 43 | <div className="space-y-2"> |
| 44 | <label className={labelClasses}>Project Name</label> |
| 45 | <input value={formData.name} onChange={(e) => setFormData({ ...formData, name: e.target.value })} className={inputClasses} required /> |
| 46 | </div> |
| 47 | |
| 48 | {/* Description */} |
| 49 | <div className="space-y-2"> |
| 50 | <label className={labelClasses}>Description</label> |
| 51 | <textarea value={formData.description} onChange={(e) => setFormData({ ...formData, description: e.target.value })} className={inputClasses + " h-24"} /> |
| 52 | </div> |
| 53 | |
| 54 | {/* Status & Priority */} |
| 55 | <div className="grid grid-cols-2 gap-4"> |
| 56 | <div className="space-y-2"> |
| 57 | <label className={labelClasses}>Status</label> |
| 58 | <select value={formData.status} onChange={(e) => setFormData({ ...formData, status: e.target.value })} className={inputClasses} > |
| 59 | <option value="PLANNING">Planning</option> |
| 60 | <option value="ACTIVE">Active</option> |
| 61 | <option value="ON_HOLD">On Hold</option> |
| 62 | <option value="COMPLETED">Completed</option> |
| 63 | <option value="CANCELLED">Cancelled</option> |
nothing calls this directly
no outgoing calls
no test coverage detected