'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 (
); } if (error || !project) { return (

Project not found or failed to load.

); } return (

{project.name}

{project.status}

Key: {project.key}

{project.status === 'Active' && ( <> )}
Description

{project.description || 'No description provided'}

Details
Created {new Date(project.createdAt).toLocaleDateString()}
{project.updatedAt && (
Updated {new Date(project.updatedAt).toLocaleDateString()}
)}
Status {project.status}
{/* SignalR Connection Status */}
{connectionState === 'connected' ? 'Real-time updates enabled' : 'Connecting...'}
{/* Dialogs */} {project && ( <> )}
); }