import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Project, Milestone } from '@/types' const TASK_TYPES = [ { value: 'story', label: 'Story', subtypes: ['feature', 'improvement', 'refactor'] }, { value: 'issue', label: 'Issue', subtypes: ['infrastructure', 'performance', 'regression', 'security', 'user_experience', 'defect'] }, { value: 'task', label: 'Task', subtypes: ['defect'] }, { value: 'test', label: 'Test', subtypes: ['regression', 'security', 'smoke', 'stress'] }, { value: 'maintenance', label: 'Maintenance', subtypes: ['deploy', 'release'] }, { value: 'research', label: 'Research', subtypes: [] }, { value: 'review', label: 'Review', subtypes: ['code_review', 'decision_review', 'function_review'] }, { value: 'resolution', label: 'Resolution', subtypes: [] }, ] export default function CreateTaskPage() { const navigate = useNavigate() const [projects, setProjects] = useState([]) const [milestones, setMilestones] = useState([]) const [form, setForm] = useState({ title: '', description: '', project_id: 0, milestone_id: 0, task_type: 'task', task_subtype: '', priority: 'medium', tags: '', reporter_id: 1, }) useEffect(() => { api.get('/projects').then(({ data }) => { setProjects(data) if (data.length) { setForm((f) => ({ ...f, project_id: data[0].id })) // Load milestones for the first project api.get(`/milestones?project_id=${data[0].id}`).then(({ data: ms }) => { setMilestones(ms) if (ms.length) setForm((f) => ({ ...f, milestone_id: ms[0].id })) }) } }) }, []) const handleProjectChange = (projectId: number) => { setForm(f => ({ ...f, project_id: projectId, milestone_id: 0 })) api.get(`/milestones?project_id=${projectId}`).then(({ data: ms }) => { setMilestones(ms) if (ms.length) setForm((f) => ({ ...f, milestone_id: ms[0].id })) }) } const currentType = TASK_TYPES.find(t => t.value === form.task_type) || TASK_TYPES[2] const subtypes = currentType.subtypes || [] const handleTypeChange = (newType: string) => { setForm(f => ({ ...f, task_type: newType, task_subtype: '' })) } const submit = async (e: React.FormEvent) => { e.preventDefault() if (!form.milestone_id) { alert('Please select a milestone') return } const payload: any = { ...form, tags: form.tags || null } if (!form.task_subtype) delete payload.task_subtype await api.post('/tasks', payload) navigate('/tasks') } return (

Create Task