reafctor: pages for management and split components

This commit is contained in:
Julien Froidefond
2025-08-23 08:16:09 +02:00
parent 97d274190d
commit 2e195ca5cf
29 changed files with 1968 additions and 1607 deletions

View File

@@ -0,0 +1,28 @@
import { AdminHeader } from "@/components/admin/utils/admin-header";
import { ManageNavigation } from "@/components/admin/layout/manage-navigation";
export default function ManageLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<div className="min-h-screen bg-gradient-to-br from-slate-950 via-slate-900 to-slate-950 relative overflow-hidden">
{/* Background Effects */}
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top,_var(--tw-gradient-stops))] from-blue-900/20 via-slate-900 to-slate-950" />
<div className="absolute inset-0 bg-grid-white/5 bg-[size:50px_50px]" />
<div className="absolute inset-0 bg-gradient-to-t from-slate-950 via-transparent to-transparent" />
<div className="relative z-10 container mx-auto px-6 py-6 max-w-7xl space-y-6">
{/* Header */}
<AdminHeader />
{/* Navigation */}
<ManageNavigation />
{/* Main Content */}
{children}
</div>
</div>
);
}

View File

@@ -1,7 +1,5 @@
import { redirect } from "next/navigation";
import { isUserAuthenticated } from "@/lib/server-auth";
import { AdminService } from "@/services/admin-service";
import { ManageAdminClientWrapper } from "@/components/admin";
export default async function ManageAdminPage() {
// Vérifier l'authentification
@@ -12,28 +10,6 @@ export default async function ManageAdminPage() {
redirect("/login");
}
// Charger les données côté serveur
try {
const adminData = await AdminService.getAdminData();
return (
<ManageAdminClientWrapper
teams={adminData.teams}
skillCategories={adminData.skillCategories}
teamStats={adminData.teamStats}
directionStats={adminData.directionStats}
/>
);
} catch (error) {
console.error("Failed to load admin data:", error);
return (
<div className="container mx-auto p-6">
<div className="flex items-center justify-center h-64">
<div className="text-lg text-red-500">
Erreur lors du chargement des données d'administration
</div>
</div>
</div>
);
}
// Rediriger vers la page skills par défaut
redirect("/admin/manage/skills");
}

View File

@@ -0,0 +1,37 @@
import { redirect } from "next/navigation";
import { isUserAuthenticated } from "@/lib/server-auth";
import { AdminService } from "@/services/admin-service";
import { SkillsManagementPage } from "@/components/admin/skills";
export default async function SkillsPage() {
// Vérifier l'authentification
const isAuthenticated = await isUserAuthenticated();
// Si pas de cookie d'authentification, rediriger vers login
if (!isAuthenticated) {
redirect("/login");
}
// Charger les données côté serveur
try {
const adminData = await AdminService.getAdminData();
return (
<SkillsManagementPage
skillCategories={adminData.skillCategories}
teams={adminData.teams}
/>
);
} catch (error) {
console.error("Failed to load admin data:", error);
return (
<div className="container mx-auto p-6">
<div className="flex items-center justify-center h-64">
<div className="text-lg text-red-500">
Erreur lors du chargement des données d'administration
</div>
</div>
</div>
);
}
}

View File

@@ -0,0 +1,38 @@
import { redirect } from "next/navigation";
import { isUserAuthenticated } from "@/lib/server-auth";
import { AdminService } from "@/services/admin-service";
import { TeamsManagementPage } from "@/components/admin/teams";
export default async function TeamsPage() {
// Vérifier l'authentification
const isAuthenticated = await isUserAuthenticated();
// Si pas de cookie d'authentification, rediriger vers login
if (!isAuthenticated) {
redirect("/login");
}
// Charger les données côté serveur
try {
const adminData = await AdminService.getAdminData();
return (
<TeamsManagementPage
teams={adminData.teams}
teamStats={adminData.teamStats}
skillCategories={adminData.skillCategories}
/>
);
} catch (error) {
console.error("Failed to load admin data:", error);
return (
<div className="container mx-auto p-6">
<div className="flex items-center justify-center h-64">
<div className="text-lg text-red-500">
Erreur lors du chargement des données d'administration
</div>
</div>
</div>
);
}
}

View File

@@ -0,0 +1,36 @@
import { redirect } from "next/navigation";
import { isUserAuthenticated } from "@/lib/server-auth";
import { AdminService } from "@/services/admin-service";
import { UsersManagementPage } from "@/components/admin/users";
export default async function UsersPage() {
// Vérifier l'authentification
const isAuthenticated = await isUserAuthenticated();
// Si pas de cookie d'authentification, rediriger vers login
if (!isAuthenticated) {
redirect("/login");
}
// Charger les données côté serveur
try {
const adminData = await AdminService.getAdminData();
return (
<UsersManagementPage
teams={adminData.teams}
/>
);
} catch (error) {
console.error("Failed to load admin data:", error);
return (
<div className="container mx-auto p-6">
<div className="flex items-center justify-center h-64">
<div className="text-lg text-red-500">
Erreur lors du chargement des données d'administration
</div>
</div>
</div>
);
}
}