reafctor: pages for management and split components
This commit is contained in:
28
app/admin/manage/layout.tsx
Normal file
28
app/admin/manage/layout.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
37
app/admin/manage/skills/page.tsx
Normal file
37
app/admin/manage/skills/page.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
}
|
||||
38
app/admin/manage/teams/page.tsx
Normal file
38
app/admin/manage/teams/page.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
}
|
||||
36
app/admin/manage/users/page.tsx
Normal file
36
app/admin/manage/users/page.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,9 @@ import { NextRequest, NextResponse } from "next/server";
|
||||
import { getPool } from "@/services/database";
|
||||
import { isUserAuthenticated } from "@/lib/server-auth";
|
||||
|
||||
// Configuration pour éviter la génération statique
|
||||
export const dynamic = "force-dynamic";
|
||||
|
||||
// GET - Récupérer toutes les skills
|
||||
export async function GET() {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user