diff --git a/src/pages/CreateIssuePage.tsx b/src/pages/CreateIssuePage.tsx index 4f0cc0f..283be00 100644 --- a/src/pages/CreateIssuePage.tsx +++ b/src/pages/CreateIssuePage.tsx @@ -3,12 +3,25 @@ import { useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Project } from '@/types' +const ISSUE_TYPES = [ + { value: 'story', label: 'Story', subtypes: ['feature', 'improvement', 'refactor'] }, + { value: 'issue', label: 'Issue', subtypes: ['infrastructure', 'performance', 'regression', 'security', 'user_experience'] }, + { value: 'task', label: 'Task', subtypes: [] }, + { 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: 'support', label: 'Support', subtypes: ['access', 'information'] }, + { value: 'meeting', label: 'Meeting', subtypes: ['conference', 'handover', 'recap'] }, + { value: 'resolution', label: 'Resolution', subtypes: [] }, +] + export default function CreateIssuePage() { const navigate = useNavigate() const [projects, setProjects] = useState([]) const [form, setForm] = useState({ - title: '', description: '', project_id: 0, issue_type: 'task', - priority: 'medium', tags: '', reporter_id: 1, + title: '', description: '', project_id: 0, issue_type: 'issue', + issue_subtype: '', priority: 'medium', tags: '', reporter_id: 1, }) useEffect(() => { @@ -18,9 +31,17 @@ export default function CreateIssuePage() { }) }, []) + const currentType = ISSUE_TYPES.find(t => t.value === form.issue_type) || ISSUE_TYPES[1] + const subtypes = currentType.subtypes || [] + + const handleTypeChange = (newType: string) => { + setForm(f => ({ ...f, issue_type: newType, issue_subtype: '' })) + } + const submit = async (e: React.FormEvent) => { e.preventDefault() - const payload = { ...form, tags: form.tags || null } + const payload: any = { ...form, tags: form.tags || null } + if (!form.issue_subtype) delete payload.issue_subtype await api.post('/issues', payload) navigate('/issues') } @@ -37,13 +58,18 @@ export default function CreateIssuePage() { + {subtypes.length > 0 && ( + + )}