'use client'; import { use } from 'react'; import Link from 'next/link'; import { useTask, useUpdateTask, useAssignTask, useUnassignTask } from '@/hooks/useTasks'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { useSession } from 'next-auth/react'; const VALID_TRANSITIONS: Record = { Open: ['Assigned'], Assigned: ['InProgress'], InProgress: ['Review'], Review: ['Done', 'InProgress'], }; const statusColors: Record = { Open: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', Assigned: 'bg-primary text-primary-foreground hover:bg-primary/80', InProgress: 'bg-yellow-500 text-black hover:bg-yellow-500/80', Review: 'bg-destructive text-destructive-foreground hover:bg-destructive/80', Done: 'bg-green-500 text-white hover:bg-green-500/80', }; export default function TaskDetailPage({ params }: { params: Promise<{ id: string }> }) { const resolvedParams = use(params); const { data: task, isLoading, error } = useTask(resolvedParams.id); const { mutate: updateTask, isPending: isUpdating } = useUpdateTask(); const { mutate: assignTask, isPending: isAssigning } = useAssignTask(); const { mutate: unassignTask, isPending: isUnassigning } = useUnassignTask(); const { data: session } = useSession(); const isPending = isUpdating || isAssigning || isUnassigning; if (isLoading) return
Loading task...
; if (error || !task) return
Failed to load task.
; const validTransitions = VALID_TRANSITIONS[task.status] || []; const handleTransition = (newStatus: string) => { updateTask({ id: task.id, data: { status: newStatus } }); }; const handleAssignToMe = () => { assignTask(task.id); }; const handleUnassign = () => { unassignTask(task.id); }; const getTransitionLabel = (status: string, newStatus: string) => { if (status === 'Review' && newStatus === 'InProgress') return 'Back to InProgress'; if (newStatus === 'Done') return 'Mark as Done'; return `Move to ${newStatus}`; }; return (

Task Details

{task.title} {task.description || 'No description provided.'}
{task.status}

Assignee

{task.assigneeId || 'Unassigned'}

Created By

{task.createdById}

Created At

{new Date(task.createdAt).toLocaleString()}

{task.dueDate && (

Due Date

{new Date(task.dueDate).toLocaleDateString()}

)}
{validTransitions.length > 0 && (

Actions

{!task.assigneeId && session?.user && ( )} {task.isAssignedToMe && ( )} {validTransitions.map((nextStatus) => ( ))}
)}
); }