import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Milestone, Project } from '@/types' import dayjs from 'dayjs' export default function MilestonesPage() { const [milestones, setMilestones] = useState([]) const [projects, setProjects] = useState([]) const [projectFilter, setProjectFilter] = useState('') const [showCreate, setShowCreate] = useState(false) const [form, setForm] = useState({ title: '', description: '', project_id: 0, due_date: '', planned_release_date: '', status: 'open', depend_on_milestones: [] as string[], depend_on_tasks: [] as number[] }) const navigate = useNavigate() const fetchMilestones = () => { const params = projectFilter ? `?project_id=${projectFilter}` : '' api.get(`/milestones${params}`).then(({ data }) => setMilestones(data)) } useEffect(() => { api.get('/projects').then(({ data }) => { setProjects(data) if (data.length) setForm((f) => ({ ...f, project_id: data[0].id })) }) }, []) useEffect(() => { fetchMilestones() }, [projectFilter]) const createMilestone = async (e: React.FormEvent) => { e.preventDefault() const payload: Record = { title: form.title, description: form.description, project_id: form.project_id, status: form.status, due_date: form.due_date || null, planned_release_date: form.planned_release_date || null, depend_on_milestones: form.depend_on_milestones, depend_on_tasks: form.depend_on_tasks } await api.post('/milestones', payload) setShowCreate(false) fetchMilestones() } return (

🏁 Milestones ({milestones.length})

{showCreate && (
setForm({ ...form, title: e.target.value })} /> setForm({ ...form, description: e.target.value })} /> setForm({ ...form, due_date: e.target.value })} /> setForm({ ...form, planned_release_date: e.target.value })} />
)}
{milestones.map((ms) => (
navigate(`/milestones/${ms.id}`)}>
{ms.status}

{ms.title}

{ms.description || 'No description'}

{ms.planned_release_date && Release: {dayjs(ms.planned_release_date).format('YYYY-MM-DD')}} {ms.due_date && Due: {dayjs(ms.due_date).format('YYYY-MM-DD')}} Created {dayjs(ms.created_at).format('YYYY-MM-DD')}
))} {milestones.length === 0 &&

No milestones

}
) }