'use client'; import { use, useState, useEffect } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { ArrowLeft, Loader2, KanbanSquare, Pencil, Archive } from 'lucide-react'; import { useQueryClient } from '@tanstack/react-query'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { useProject } from '@/lib/hooks/use-projects'; import { useProjectHub } from '@/lib/hooks/useProjectHub'; import { EditProjectDialog } from '@/components/features/projects/EditProjectDialog'; import { ArchiveProjectDialog } from '@/components/features/projects/ArchiveProjectDialog'; import type { Project } from '@/types/project'; import { toast } from 'sonner'; interface ProjectDetailPageProps { params: Promise<{ id: string }>; } export default function ProjectDetailPage({ params }: ProjectDetailPageProps) { const { id } = use(params); const router = useRouter(); const queryClient = useQueryClient(); const { data: project, isLoading, error } = useProject(id); const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const [isArchiveDialogOpen, setIsArchiveDialogOpen] = useState(false); // SignalR real-time updates const { connectionState } = useProjectHub(id, { onProjectUpdated: (updatedProject) => { if (updatedProject.id === id) { console.log('[ProjectDetail] Project updated via SignalR:', updatedProject); queryClient.setQueryData(['projects', id], updatedProject); toast.info('Project updated'); } }, onProjectArchived: (data) => { if (data.ProjectId === id) { console.log('[ProjectDetail] Project archived via SignalR:', data); toast.info('Project has been archived'); router.push('/projects'); } }, }); if (isLoading) { return (
Project not found or failed to load.
Key: {project.key}
{project.description || 'No description provided'}