diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..15b1ed9 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next" +} diff --git a/app/admin/manage/skills/page.tsx b/app/admin/manage/skills/page.tsx index 5e82368..58c7805 100644 --- a/app/admin/manage/skills/page.tsx +++ b/app/admin/manage/skills/page.tsx @@ -18,7 +18,7 @@ export default async function SkillsPage() {
- Erreur lors du chargement des données d'administration + Erreur lors du chargement des données d'administration
diff --git a/app/admin/manage/teams/page.tsx b/app/admin/manage/teams/page.tsx index f4fcde3..277ca6d 100644 --- a/app/admin/manage/teams/page.tsx +++ b/app/admin/manage/teams/page.tsx @@ -14,7 +14,7 @@ export default async function TeamsPage() {
- Erreur lors du chargement des données d'administration + Erreur lors du chargement des données d'administration
diff --git a/app/admin/manage/users/page.tsx b/app/admin/manage/users/page.tsx index d03726a..27f5d8e 100644 --- a/app/admin/manage/users/page.tsx +++ b/app/admin/manage/users/page.tsx @@ -13,7 +13,7 @@ export default async function UsersPage() {
- Erreur lors du chargement des données d'administration + Erreur lors du chargement des données d'administration
diff --git a/app/admin/page.tsx b/app/admin/page.tsx index 4544751..2c27863 100644 --- a/app/admin/page.tsx +++ b/app/admin/page.tsx @@ -20,7 +20,7 @@ export default async function AdminPage() {
- Erreur lors du chargement des données d'administration + Erreur lors du chargement des données d'administration
diff --git a/app/admin/team/[teamId]/page.tsx b/app/admin/team/[teamId]/page.tsx index 9782e3b..ebc71e0 100644 --- a/app/admin/team/[teamId]/page.tsx +++ b/app/admin/team/[teamId]/page.tsx @@ -27,7 +27,7 @@ export default async function TeamDetailPage({ params }: TeamDetailPageProps) { return (
- Erreur lors du chargement des détails de l'équipe + Erreur lors du chargement des détails de l'équipe
); diff --git a/app/team/page.tsx b/app/team/page.tsx index 6414d2f..7afc1ef 100644 --- a/app/team/page.tsx +++ b/app/team/page.tsx @@ -36,7 +36,7 @@ async function TeamReviewPage() {
- Vue d'équipe + Vue d'équipe
@@ -45,7 +45,7 @@ async function TeamReviewPage() {

- Vue d'ensemble et analyse des compétences de l'équipe{" "} + Vue d'ensemble et analyse des compétences de l'équipe{" "} {teamData.team.direction}

diff --git a/components/account/account-form.tsx b/components/account/account-form.tsx index 709ec80..bbf0113 100644 --- a/components/account/account-form.tsx +++ b/components/account/account-form.tsx @@ -254,7 +254,7 @@ export function AccountForm({ initialProfile, teams }: AccountFormProps) { {Object.keys(teamsByDirection).length === 0 && (
- Aucune équipe trouvée pour "{searchTerm}" + Aucune équipe trouvée pour "{searchTerm}"
)} diff --git a/components/admin/management/team-members-modal.tsx b/components/admin/management/team-members-modal.tsx index d9ea0c6..91d30c6 100644 --- a/components/admin/management/team-members-modal.tsx +++ b/components/admin/management/team-members-modal.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState, useEffect } from "react"; +import { useState, useEffect, useCallback } from "react"; import { Users, User, Calendar, X, Trash2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -31,13 +31,7 @@ export function TeamMembersModal({ const [deletingMemberId, setDeletingMemberId] = useState(null); const { toast } = useToast(); - useEffect(() => { - if (isOpen && teamId) { - fetchMembers(); - } - }, [isOpen, teamId]); - - const fetchMembers = async () => { + const fetchMembers = useCallback(async () => { setIsLoading(true); setError(null); try { @@ -48,7 +42,13 @@ export function TeamMembersModal({ } finally { setIsLoading(false); } - }; + }, [teamId]); + + useEffect(() => { + if (isOpen && teamId) { + fetchMembers(); + } + }, [isOpen, teamId, fetchMembers]); const handleRemoveMember = async (memberId: string, memberName: string) => { if ( @@ -91,7 +91,7 @@ export function TeamMembersModal({
- Membres de l'équipe + Membres de l'équipe

{teamName}

@@ -137,7 +137,7 @@ export function TeamMembersModal({ Aucun membre dans cette équipe

- Les membres apparaîtront ici une fois qu'ils seront assignés + Les membres apparaîtront ici une fois qu'ils seront assignés

) : ( diff --git a/components/admin/team-detail/team-detail-header.tsx b/components/admin/team-detail/team-detail-header.tsx index 068dd92..8fbd640 100644 --- a/components/admin/team-detail/team-detail-header.tsx +++ b/components/admin/team-detail/team-detail-header.tsx @@ -27,7 +27,7 @@ export function TeamDetailHeader({ className="text-slate-400 hover:text-white hover:bg-white/10" > - Retour à l'admin + Retour à l'admin
|
diff --git a/components/admin/team-detail/team-detail-modal.tsx b/components/admin/team-detail/team-detail-modal.tsx index 0a62d5e..57b47d7 100644 --- a/components/admin/team-detail/team-detail-modal.tsx +++ b/components/admin/team-detail/team-detail-modal.tsx @@ -116,7 +116,7 @@ export function TeamDetailModal({
- Aperçu rapide de l'équipe. Cliquez sur "Voir tous les détails" pour + Aperçu rapide de l'équipe. Cliquez sur "Voir tous les détails" pour une vue complète. diff --git a/components/admin/team-detail/team-detail-tabs.tsx b/components/admin/team-detail/team-detail-tabs.tsx index 2a99539..4788c01 100644 --- a/components/admin/team-detail/team-detail-tabs.tsx +++ b/components/admin/team-detail/team-detail-tabs.tsx @@ -69,7 +69,7 @@ export function TeamDetailTabs({ value="overview" className="data-[state=active]:bg-white/20 data-[state=active]:text-white text-slate-400 hover:text-white transition-colors" > - Vue d'ensemble + Vue d'ensemble

- Recommandations pour l'équipe + Recommandations pour l'équipe

@@ -219,7 +219,7 @@ export function TeamInsightsTab({ {teamInsights.skillGaps.incontournable > 1 ? "s" : ""}{" "} incontournable {teamInsights.skillGaps.incontournable > 1 ? "s" : ""} sous - l'objectif de {COVERAGE_OBJECTIVES.incontournable}%. + l'objectif de {COVERAGE_OBJECTIVES.incontournable}%. ) : ( <> @@ -239,9 +239,9 @@ export function TeamInsightsTab({ <> Attention: {teamInsights.skillGaps.majeure} compétence {teamInsights.skillGaps.majeure > 1 ? "s" : ""} majeure - {teamInsights.skillGaps.majeure > 1 ? "s" : ""} n'atteigne + {teamInsights.skillGaps.majeure > 1 ? "s" : ""} n'atteigne {teamInsights.skillGaps.majeure > 1 ? "nt" : ""} pas - l'objectif de {COVERAGE_OBJECTIVES.majeure}%. + l'objectif de {COVERAGE_OBJECTIVES.majeure}%. ) : ( <> diff --git a/components/admin/team-detail/team-overview-tab.tsx b/components/admin/team-detail/team-overview-tab.tsx index eefd2a7..a87cfff 100644 --- a/components/admin/team-detail/team-overview-tab.tsx +++ b/components/admin/team-detail/team-overview-tab.tsx @@ -74,7 +74,7 @@ export function TeamOverviewTab({

- Top Compétences de l'équipe + Top Compétences de l'équipe

{team.topSkills.slice(0, 6).map((skill, idx) => ( @@ -505,7 +505,7 @@ export function TeamOverviewTab({
- Objectifs d'apprentissage + Objectifs d'apprentissage {teamInsights.totalLearners} diff --git a/components/admin/teams/team-form-dialog.tsx b/components/admin/teams/team-form-dialog.tsx index 62d7884..25be7fc 100644 --- a/components/admin/teams/team-form-dialog.tsx +++ b/components/admin/teams/team-form-dialog.tsx @@ -55,7 +55,7 @@ export function TeamFormDialog({
- + Dashboard Managérial

- Vue d'ensemble des compétences par équipe et direction pour pilotage + Vue d'ensemble des compétences par équipe et direction pour pilotage stratégique

@@ -40,7 +40,7 @@ export function AdminHeader() { }`} > - Vue d'ensemble + Vue d'ensemble diff --git a/components/home/action-section.tsx b/components/home/action-section.tsx index ceab51d..0cc347d 100644 --- a/components/home/action-section.tsx +++ b/components/home/action-section.tsx @@ -9,7 +9,7 @@ export function ActionSection() { size="lg" className="bg-blue-500 hover:bg-blue-600 text-white px-8 py-3 rounded-xl" > - Continuer l'évaluation + Continuer l'évaluation
); diff --git a/components/home/mentor-section.tsx b/components/home/mentor-section.tsx index ce6c90a..8970dfa 100644 --- a/components/home/mentor-section.tsx +++ b/components/home/mentor-section.tsx @@ -194,7 +194,7 @@ export function MentorSection({ }) ) : (

- Aucun objectif d'apprentissage configuré + Aucun objectif d'apprentissage configuré

)}
diff --git a/components/home/radar-section.tsx b/components/home/radar-section.tsx index 594eb5a..a3e8374 100644 --- a/components/home/radar-section.tsx +++ b/components/home/radar-section.tsx @@ -13,7 +13,7 @@ export function RadarSection({ radarData }: RadarSectionProps) {

- Vue d'ensemble de vos compétences + Vue d'ensemble de vos compétences

Radar chart représentant votre niveau par catégorie diff --git a/components/home/welcome-screen.tsx b/components/home/welcome-screen.tsx index a4cccb3..95a60fa 100644 --- a/components/home/welcome-screen.tsx +++ b/components/home/welcome-screen.tsx @@ -22,8 +22,8 @@ export function WelcomeScreen() { Bienvenue ! Commencez votre parcours

- Vous êtes connecté avec succès. Il est temps d'évaluer vos - compétences techniques pour obtenir une vue d'ensemble personnalisée + Vous êtes connecté avec succès. Il est temps d'évaluer vos + compétences techniques pour obtenir une vue d'ensemble personnalisée de votre expertise.

@@ -35,7 +35,7 @@ export function WelcomeScreen() { Évaluez vos compétences

- Sélectionnez vos domaines d'expertise et évaluez votre niveau + Sélectionnez vos domaines d'expertise et évaluez votre niveau

@@ -63,7 +63,7 @@ export function WelcomeScreen() { href="/evaluation" className="group bg-blue-500 hover:bg-blue-600 text-white px-8 py-4 rounded-xl font-medium transition-all inline-flex items-center gap-2" > - Commencer l'évaluation + Commencer l'évaluation
diff --git a/components/login/auth-wrapper.tsx b/components/login/auth-wrapper.tsx index 349c3e8..eb0422e 100644 --- a/components/login/auth-wrapper.tsx +++ b/components/login/auth-wrapper.tsx @@ -148,7 +148,7 @@ export function AuthWrapper({ teams, initialUser }: AuthWrapperProps) { onClick={() => (window.location.href = "/")} className="px-6 py-3 bg-blue-500 hover:bg-blue-600 text-white rounded-lg" > - Aller à l'accueil + Aller à l'accueil
)}
diff --git a/components/skill-evaluation.tsx b/components/skill-evaluation.tsx index 9f2e073..46755fe 100644 --- a/components/skill-evaluation.tsx +++ b/components/skill-evaluation.tsx @@ -58,7 +58,8 @@ export function SkillEvaluation({ } else if (categories.length > 0 && !selectedCategory) { setSelectedCategory(categories[0].category); } - }, [categoryParam, categories]); // Remove selectedCategory from deps to avoid loop + // 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 diff --git a/components/skill-selector.tsx b/components/skill-selector.tsx index 27f5757..f3519f1 100644 --- a/components/skill-selector.tsx +++ b/components/skill-selector.tsx @@ -236,7 +236,7 @@ export function SkillSelector({

Aucune compétence sélectionnée

- Cliquez sur "Ajouter une compétence" pour commencer + Cliquez sur "Ajouter une compétence" pour commencer

)} diff --git a/components/team-review/team-overview.tsx b/components/team-review/team-overview.tsx index c57bfc1..c4c8395 100644 --- a/components/team-review/team-overview.tsx +++ b/components/team-review/team-overview.tsx @@ -92,7 +92,7 @@ export function TeamOverview({ return ( - Vue d'ensemble + Vue d'ensemble
diff --git a/components/team-review/team-stats.tsx b/components/team-review/team-stats.tsx index a76678b..e69674c 100644 --- a/components/team-review/team-stats.tsx +++ b/components/team-review/team-stats.tsx @@ -130,7 +130,7 @@ export function TeamStats({ - Statistiques de l'équipe + Statistiques de l'équipe diff --git a/package.json b/package.json index f6907db..8bba338 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build": "next build", "dev": "next dev --turbopack", "lint": "next lint", + "lint:fix": "next lint --fix", "start": "next start", "generate-test-data": "tsx scripts/generate-test-data.ts", "sync-skills": "tsx scripts/sync-skills.ts",