2026-01-30 19:59:44 +00:00
|
|
|
import { notFound } from "next/navigation";
|
|
|
|
|
import { getProjectById } from "@/lib/projectsService";
|
|
|
|
|
import { ProjectDetailView } from "@/components/project-detail";
|
2026-01-28 10:44:49 +00:00
|
|
|
|
|
|
|
|
interface PageProps {
|
2026-01-30 19:59:44 +00:00
|
|
|
params: Promise<{
|
2026-01-28 10:44:49 +00:00
|
|
|
id: string;
|
2026-01-30 19:59:44 +00:00
|
|
|
}>;
|
2026-01-28 10:44:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Página de detalle de proyecto
|
|
|
|
|
* Ruta dinámica: /proyectos/[id]
|
2026-01-30 19:59:44 +00:00
|
|
|
*
|
|
|
|
|
* 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
|
2026-01-28 10:44:49 +00:00
|
|
|
*/
|
|
|
|
|
export default async function ProjectDetailPage({ params }: PageProps) {
|
2026-01-30 19:59:44 +00:00
|
|
|
// Await params en Next.js 16
|
|
|
|
|
const resolvedParams = await params;
|
|
|
|
|
const projectId = parseInt(resolvedParams.id);
|
2026-01-28 10:44:49 +00:00
|
|
|
|
|
|
|
|
if (isNaN(projectId)) {
|
|
|
|
|
notFound();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const project = await getProjectById(projectId);
|
|
|
|
|
|
|
|
|
|
if (!project) {
|
|
|
|
|
notFound();
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-30 19:59:44 +00:00
|
|
|
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" };
|
|
|
|
|
}
|
2026-01-28 10:44:49 +00:00
|
|
|
}
|