"use client"; import { useState, useEffect } from "react"; import { useSearchParams, useRouter } from "next/navigation"; import { TooltipProvider } from "@/components/ui/tooltip"; import { SkillCategory, SkillLevel, CategoryEvaluation } from "@/lib/types"; import { SkillSelector } from "./skill-selector"; import { useEvaluationContext } from "./evaluation"; import { EvaluationHeader, SkillLevelLegend, CategoryTabs, SkillEvaluationGrid, } from "./evaluation"; interface SkillEvaluationProps { categories: SkillCategory[]; evaluations: CategoryEvaluation[]; } export function SkillEvaluation({ categories, evaluations, }: SkillEvaluationProps) { const { currentEvaluation: contextEvaluation, updateSkillLevel, updateSkillMentorStatus, updateSkillLearningStatus, addSkillToEvaluation, addMultipleSkillsToEvaluation, removeSkillFromEvaluation, } = useEvaluationContext(); // Utiliser l'évaluation du contexte (avec état optimiste) ou celle des props (SSR) const activeEvaluations = contextEvaluation?.evaluations || []; const searchParams = useSearchParams(); const router = useRouter(); const categoryParam = searchParams.get("category"); const [selectedCategory, setSelectedCategory] = useState( categories[0]?.category || "" ); const handleCategoryChange = (category: string) => { setSelectedCategory(category); // Update URL without page reload const newUrl = new URL(window.location.href); newUrl.searchParams.set("category", category); router.replace(newUrl.pathname + newUrl.search); }; // Update selected category when URL param changes or categories load useEffect(() => { if (categoryParam && categories.some((c) => c.category === categoryParam)) { setSelectedCategory(categoryParam); } else if (categories.length > 0 && !selectedCategory) { setSelectedCategory(categories[0].category); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [categoryParam, categories]); // selectedCategory intentionally excluded to avoid infinite loop const currentCategory = categories.find( (cat) => cat.category === selectedCategory ); const currentEvaluation = activeEvaluations.find( (evaluation) => evaluation.category === selectedCategory ); if (!currentCategory) { return
Aucune catégorie disponible
; } return (
{/* Background Effects */}
{currentEvaluation && ( )}
); }