Files
peakskills/app/admin/team/[teamId]/page.tsx
Julien Froidefond 2faa998cbe feat: update TeamDetailPage and modularize components
- Changed params in TeamDetailPage to be a Promise, ensuring proper async handling.
- Updated data fetching logic to use awaited teamId for better clarity.
- Modularized TeamDetailClientWrapper by extracting TeamDetailHeader, TeamMetricsCards, TeamDetailTabs, and TeamMemberModal for improved organization and readability.
- Removed unused imports and streamlined the component structure, enhancing maintainability.
2025-08-21 14:42:38 +02:00

45 lines
1.3 KiB
TypeScript

import { redirect } from "next/navigation";
import { isUserAuthenticated } from "@/lib/server-auth";
import { AdminService, TeamStats } from "@/services/admin-service";
import { TeamDetailClientWrapper } from "@/components/admin";
interface TeamDetailPageProps {
params: Promise<{
teamId: string;
}>;
}
export default async function TeamDetailPage({ params }: TeamDetailPageProps) {
// Await params before using
const { teamId } = await params;
// Vérifier l'authentification
const isAuthenticated = await isUserAuthenticated();
// Si pas de cookie d'authentification, rediriger vers login
if (!isAuthenticated) {
redirect("/login");
}
try {
// Charger les données côté serveur
const allTeamsStats = await AdminService.getTeamsStats();
const foundTeamStats = allTeamsStats.find((t) => t.teamId === teamId);
if (!foundTeamStats) {
redirect("/admin");
}
return <TeamDetailClientWrapper team={foundTeamStats} teamId={teamId} />;
} catch (error) {
console.error("Failed to load team data:", error);
return (
<div className="min-h-screen bg-gradient-to-br from-slate-950 via-slate-900 to-slate-950 flex items-center justify-center">
<div className="text-white text-xl text-red-500">
Erreur lors du chargement des détails de l'équipe
</div>
</div>
);
}
}