From 6db4921d0f6a5d3a3e7dc39e09bf1e45324e81df Mon Sep 17 00:00:00 2001
From: Julien Froidefond
Date: Sun, 12 Oct 2025 16:09:31 +0200
Subject: [PATCH] feat: add lint:fix command to package.json and update French
text for consistency across various components
---
.eslintrc.json | 3 +++
app/admin/manage/skills/page.tsx | 2 +-
app/admin/manage/teams/page.tsx | 2 +-
app/admin/manage/users/page.tsx | 2 +-
app/admin/page.tsx | 2 +-
app/admin/team/[teamId]/page.tsx | 2 +-
app/team/page.tsx | 4 ++--
components/account/account-form.tsx | 2 +-
.../admin/management/team-members-modal.tsx | 22 +++++++++----------
.../admin/team-detail/team-detail-header.tsx | 2 +-
.../admin/team-detail/team-detail-modal.tsx | 2 +-
.../admin/team-detail/team-detail-tabs.tsx | 2 +-
.../admin/team-detail/team-insights-tab.tsx | 8 +++----
.../admin/team-detail/team-overview-tab.tsx | 4 ++--
components/admin/teams/team-form-dialog.tsx | 2 +-
components/admin/utils/admin-header.tsx | 4 ++--
components/home/action-section.tsx | 2 +-
components/home/mentor-section.tsx | 2 +-
components/home/radar-section.tsx | 2 +-
components/home/welcome-screen.tsx | 8 +++----
components/login/auth-wrapper.tsx | 2 +-
components/login/register-form.tsx | 2 +-
components/skill-evaluation.tsx | 3 ++-
components/skill-selector.tsx | 2 +-
components/team-review/team-overview.tsx | 2 +-
components/team-review/team-stats.tsx | 2 +-
package.json | 1 +
27 files changed, 49 insertions(+), 44 deletions(-)
create mode 100644 .eslintrc.json
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({
-
Nom de l'équipe *
+
Nom de l'équipe *
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
- Aucune équipe trouvée pour "{searchTerm}"
+ Aucune équipe trouvée pour "{searchTerm}"
)}
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",