trello_fake/app/proyectos/[id]/page.tsx

63 lines
1.5 KiB
TypeScript

import { notFound } from "next/navigation";
import { getProjectById } from "@/lib/projectsService";
import { ProjectDetailView } from "@/components/project-detail";
interface PageProps {
params: Promise<{
id: string;
}>;
}
/**
* Página de detalle de proyecto
* Ruta dinámica: /proyectos/[id]
*
* Muestra información completa del proyecto incluyendo:
* - Header con información principal
* - Estadísticas (progreso, presupuesto, fechas, tareas)
* - Tabs con resumen, tareas y detalles
* - Tabla de tareas con filtros y ordenación
*/
export default async function ProjectDetailPage({ params }: PageProps) {
// Await params en Next.js 16
const resolvedParams = await params;
const projectId = parseInt(resolvedParams.id);
if (isNaN(projectId)) {
notFound();
}
const project = await getProjectById(projectId);
if (!project) {
notFound();
}
return <ProjectDetailView project={project} />;
}
// Metadata dinámica para SEO
export async function generateMetadata({ params }: PageProps) {
const resolvedParams = await params;
const projectId = parseInt(resolvedParams.id);
if (isNaN(projectId)) {
return { title: "Proyecto no encontrado" };
}
try {
const project = await getProjectById(projectId);
if (!project) {
return { title: "Proyecto no encontrado" };
}
return {
title: `${project.name} - Proyecto`,
description: project.description || `Detalles del proyecto ${project.ref}`,
};
} catch {
return { title: "Proyecto" };
}
}