'use client'; import { use, useState } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { ArrowLeft, Edit, Trash2, FolderKanban, Calendar, Loader2, ListTodo, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import { useProject, useDeleteProject } from '@/lib/hooks/use-projects'; import { useEpics } from '@/lib/hooks/use-epics'; import { ProjectForm } from '@/components/projects/project-form'; import { formatDistanceToNow, format } from 'date-fns'; import { toast } from 'sonner'; interface ProjectDetailPageProps { params: Promise<{ id: string }>; } export default function ProjectDetailPage({ params }: ProjectDetailPageProps) { const { id } = use(params); const router = useRouter(); const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const { data: project, isLoading, error } = useProject(id); const { data: epics, isLoading: epicsLoading } = useEpics(id); const deleteProject = useDeleteProject(); const handleDelete = async () => { try { await deleteProject.mutateAsync(id); toast.success('Project deleted successfully'); router.push('/projects'); } catch (error) { const message = error instanceof Error ? error.message : 'Failed to delete project'; toast.error(message); } }; if (isLoading) { return (
{project.description}
) : (No description provided
)}{format(new Date(project.createdAt), 'PPP')}
{format(new Date(project.updatedAt), 'PPP')}
{epic.name}
And {epics.length - 5} more...
)}No epics yet