import { useState, useEffect } from 'react' import { useParams, useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Task, Comment } from '@/types' import dayjs from 'dayjs' export default function TaskDetailPage() { const { id } = useParams() const navigate = useNavigate() const [task, setTask] = useState(null) const [comments, setComments] = useState([]) const [newComment, setNewComment] = useState('') useEffect(() => { api.get(`/issues/${id}`).then(({ data }) => setTask(data)) api.get(`/issues/${id}/comments`).then(({ data }) => setComments(data)) }, [id]) const addComment = async () => { if (!newComment.trim() || !task) return await api.post('/comments', { content: newComment, issue_id: task.id, author_id: 1 }) setNewComment('') const { data } = await api.get(`/issues/${id}/comments`) setComments(data) } const transition = async (newStatus: string) => { await api.post(`/issues/${id}/transition?new_status=${newStatus}`) const { data } = await api.get(`/issues/${id}`) setTask(data) } if (!task) return
Loading...
const statusActions: Record = { open: ['in_progress', 'blocked'], in_progress: ['resolved', 'blocked'], blocked: ['open', 'in_progress'], resolved: ['closed', 'open'], closed: ['open'], } return (

#{task.id} {task.title}

{task.status} {task.priority} {task.issue_type}{task.issue_subtype && {task.issue_subtype}} {task.tags && {task.tags}}

Description

{task.description || 'No description'}

Details

Created
{dayjs(task.created_at).format('YYYY-MM-DD HH:mm')}
{task.due_date && <>
Due date
{dayjs(task.due_date).format('YYYY-MM-DD')}
} {task.updated_at && <>
Updated
{dayjs(task.updated_at).format('YYYY-MM-DD HH:mm')}
}

Status changes

{(statusActions[task.status] || []).map((s) => ( ))}

Comments ({comments.length})

{comments.map((c) => (
User #{c.author_id} · {dayjs(c.created_at).format('MM-DD HH:mm')}

{c.content}

))}