- 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.
45 lines
1.3 KiB
TypeScript
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>
|
|
);
|
|
}
|
|
}
|