diff --git a/app/admin/manage/skills/page.tsx b/app/admin/manage/skills/page.tsx index 281d69a..983b8e8 100644 --- a/app/admin/manage/skills/page.tsx +++ b/app/admin/manage/skills/page.tsx @@ -4,10 +4,15 @@ import { SkillsManagementPage } from "@/components/admin/skills"; export default async function SkillsPage() { // Charger les données côté serveur try { - const { skillCategories, teams } = await AdminService.getAdminData(); + const { skillCategories, teams, skills } = + await AdminService.getAdminData(); return ( - + ); } catch (error) { console.error("Failed to load admin data:", error); diff --git a/app/api/admin/skills/route.ts b/app/api/admin/skills/route.ts index 1fd647e..3c3c2c0 100644 --- a/app/api/admin/skills/route.ts +++ b/app/api/admin/skills/route.ts @@ -4,20 +4,6 @@ import { SkillsService } from "@/services/skills-service"; // 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 { - const skills = await SkillsService.getAllSkillsWithUsage(); - return NextResponse.json(skills); - } catch (error) { - console.error("Error fetching skills:", error); - return NextResponse.json( - { error: "Erreur lors de la récupération des skills" }, - { status: 500 } - ); - } -} - // POST - Créer une nouvelle skill export async function POST(request: NextRequest) { try { diff --git a/clients/domains/admin-client.ts b/clients/domains/admin-client.ts index de65b39..9213414 100644 --- a/clients/domains/admin-client.ts +++ b/clients/domains/admin-client.ts @@ -41,10 +41,6 @@ export interface User { export class AdminClient extends BaseHttpClient { // Skills Management - async getSkills(): Promise { - return await this.get(`/admin/skills`); - } - async createSkill( skillData: Omit ): Promise { diff --git a/components/admin/skills/skills-management-page.tsx b/components/admin/skills/skills-management-page.tsx index c7a89ab..48a7f98 100644 --- a/components/admin/skills/skills-management-page.tsx +++ b/components/admin/skills/skills-management-page.tsx @@ -15,11 +15,13 @@ import { SkillsList } from "./skills-list"; interface SkillsManagementPageProps { skillCategories: SkillCategory[]; teams: Team[]; + initialSkills: any[]; } export function SkillsManagementPage({ skillCategories, teams, + initialSkills, }: SkillsManagementPageProps) { const [searchTerm, setSearchTerm] = useState(""); const { @@ -43,7 +45,7 @@ export function SkillsManagementPage({ handleEditSkill, handleUpdateSkill, handleDeleteSkill, - } = useSkillsManagement(skillCategories); + } = useSkillsManagement(skillCategories, initialSkills); // Utilisation du hook factorisé pour la vue arborescente const { diff --git a/hooks/use-skills-management.ts b/hooks/use-skills-management.ts index 51f56e2..bc65342 100644 --- a/hooks/use-skills-management.ts +++ b/hooks/use-skills-management.ts @@ -11,9 +11,12 @@ interface SkillFormData { icon: string; } -export function useSkillsManagement(skillCategories: SkillCategory[]) { - const [skills, setSkills] = useState([]); - const [isLoading, setIsLoading] = useState(true); +export function useSkillsManagement( + skillCategories: SkillCategory[], + initialSkills?: any[] +) { + const [skills, setSkills] = useState(initialSkills || []); + const [isLoading, setIsLoading] = useState(!initialSkills); const [editingSkill, setEditingSkill] = useState(null); const [skillFormData, setSkillFormData] = useState({ name: "", @@ -24,28 +27,28 @@ export function useSkillsManagement(skillCategories: SkillCategory[]) { const [isSubmitting, setIsSubmitting] = useState(false); const { toast } = useToast(); - // Charger les skills depuis l'API - const fetchSkills = async () => { - try { - setIsLoading(true); - const skillsData = await adminClient.getSkills(); - setSkills(skillsData); - } catch (error) { - console.error("Error fetching skills:", error); - toast({ - title: "Erreur", - description: "Impossible de charger les skills", - variant: "destructive", - }); - } finally { - setIsLoading(false); - } - }; - - // Charger les skills au montage du composant + // Charger les skills depuis l'API si pas de skills initiales useEffect(() => { - fetchSkills(); - }, []); + if (!initialSkills) { + const fetchSkills = async () => { + try { + setIsLoading(true); + const skillsData = await adminClient.getSkills(); + setSkills(skillsData); + } catch (error) { + console.error("Error fetching skills:", error); + toast({ + title: "Erreur", + description: "Impossible de charger les skills", + variant: "destructive", + }); + } finally { + setIsLoading(false); + } + }; + fetchSkills(); + } + }, [initialSkills]); const resetForm = () => { setSkillFormData({ name: "", categoryId: "", description: "", icon: "" }); diff --git a/services/admin-service.ts b/services/admin-service.ts index 5ffbd9c..889d5c0 100644 --- a/services/admin-service.ts +++ b/services/admin-service.ts @@ -1,6 +1,7 @@ import { getPool } from "./database"; import { Team, SkillCategory } from "@/lib/types"; import { TeamMember, TeamStats, DirectionStats } from "@/lib/admin-types"; +import { SkillsService } from "./skills-service"; export class AdminService { /** @@ -197,18 +198,23 @@ export class AdminService { skillCategories: SkillCategory[]; teamStats: TeamStats[]; directionStats: DirectionStats[]; + skills: any[]; }> { const pool = getPool(); try { // Récupérer toutes les données en parallèle - const [teamsResult, categoriesResult, teamStats] = await Promise.all([ - pool.query( - "SELECT id, name, direction FROM teams ORDER BY direction, name" - ), - pool.query("SELECT id, name, icon FROM skill_categories ORDER BY name"), - AdminService.getTeamsStats(), - ]); + const [teamsResult, categoriesResult, teamStats, skills] = + await Promise.all([ + pool.query( + "SELECT id, name, direction FROM teams ORDER BY direction, name" + ), + pool.query( + "SELECT id, name, icon FROM skill_categories ORDER BY name" + ), + AdminService.getTeamsStats(), + SkillsService.getAllSkillsWithUsage(), + ]); const teams = teamsResult.rows; const skillCategories = categoriesResult.rows.map((row) => ({ @@ -224,6 +230,7 @@ export class AdminService { skillCategories, teamStats, directionStats, + skills, }; } catch (error) { console.error("Error fetching admin data:", error);