import { useState, useEffect } from 'react' import { useParams, useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Milestone, MilestoneProgress, Issue } from '@/types' import dayjs from 'dayjs' export default function MilestoneDetailPage() { const { id } = useParams() const navigate = useNavigate() const [milestone, setMilestone] = useState(null) const [progress, setProgress] = useState(null) const [issues, setIssues] = useState([]) useEffect(() => { api.get(`/milestones/${id}`).then(({ data }) => setMilestone(data)) api.get(`/milestones/${id}/progress`).then(({ data }) => setProgress(data)).catch(() => {}) api.get(`/milestones/${id}/issues`).then(({ data }) => setIssues(data)).catch(() => {}) }, [id]) if (!milestone) return
Loading...
return (

🏁 {milestone.title}

{milestone.status} {milestone.due_date && Due {dayjs(milestone.due_date).format('YYYY-MM-DD')}}
{milestone.description && (

Description

{milestone.description}

)} {progress && (

Progress

{progress.progress_percent.toFixed(0)}%

{progress.completed_issues} / {progress.total_issues} issues completed

)}

Issues ({issues.length})

{issues.map((i) => ( navigate(`/issues/${i.id}`)}> ))} {issues.length === 0 && }
#TitleStatusPriority
{i.id} {i.title} {i.status} {i.priority}
No linked issues
) }