feat: add lint:fix command to package.json and update French text for consistency across various components

This commit is contained in:
Julien Froidefond
2025-10-12 16:09:31 +02:00
parent ad5d954182
commit 6db4921d0f
27 changed files with 49 additions and 44 deletions

View File

@@ -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<string | null>(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({
<div className="flex items-center gap-3">
<Users className="w-6 h-6 text-blue-400" />
<div>
<CardTitle className="text-xl">Membres de l'équipe</CardTitle>
<CardTitle className="text-xl">Membres de l&apos;équipe</CardTitle>
<p className="text-sm text-slate-500 font-normal">{teamName}</p>
</div>
</div>
@@ -137,7 +137,7 @@ export function TeamMembersModal({
Aucun membre dans cette équipe
</p>
<p className="text-slate-500 text-sm mt-1">
Les membres apparaîtront ici une fois qu'ils seront assignés
Les membres apparaîtront ici une fois qu&apos;ils seront assignés
</p>
</div>
) : (

View File

@@ -27,7 +27,7 @@ export function TeamDetailHeader({
className="text-slate-400 hover:text-white hover:bg-white/10"
>
<ArrowLeft className="h-4 w-4 mr-2" />
Retour à l'admin
Retour à l&apos;admin
</Button>
<div className="text-slate-400 text-sm">|</div>
<div className="flex items-center gap-3">

View File

@@ -116,7 +116,7 @@ export function TeamDetailModal({
</div>
</DialogTitle>
<DialogDescription className="text-slate-400">
Aperçu rapide de l'équipe. Cliquez sur "Voir tous les détails" pour
Aperçu rapide de l&apos;équipe. Cliquez sur &quot;Voir tous les détails&quot; pour
une vue complète.
</DialogDescription>
</DialogHeader>

View File

@@ -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&apos;ensemble
</TabsTrigger>
<TabsTrigger
value="skills"

View File

@@ -204,7 +204,7 @@ export function TeamInsightsTab({
<div className="bg-white/5 backdrop-blur-sm border border-white/10 rounded-2xl p-6">
<h3 className="text-lg font-semibold text-white mb-6 flex items-center gap-2">
<Lightbulb className="h-5 w-5 text-yellow-400" />
Recommandations pour lquipe
Recommandations pour l&apos;équipe
</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="p-4 bg-red-500/10 border border-red-500/20 rounded-xl">
@@ -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&apos;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&apos;atteigne
{teamInsights.skillGaps.majeure > 1 ? "nt" : ""} pas
l'objectif de {COVERAGE_OBJECTIVES.majeure}%.
l&apos;objectif de {COVERAGE_OBJECTIVES.majeure}%.
</>
) : (
<>

View File

@@ -74,7 +74,7 @@ export function TeamOverviewTab({
<div className="bg-white/5 backdrop-blur-sm border border-white/10 rounded-2xl p-6">
<h3 className="text-lg font-semibold text-white mb-6 flex items-center gap-2">
<Star className="h-5 w-5 text-yellow-400" />
Top Compétences de lquipe
Top Compétences de l&apos;équipe
</h3>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
{team.topSkills.slice(0, 6).map((skill, idx) => (
@@ -505,7 +505,7 @@ export function TeamOverviewTab({
</div>
<div className="flex items-center justify-between p-3 bg-white/5 rounded-lg">
<span className="text-slate-300">Objectifs d'apprentissage</span>
<span className="text-slate-300">Objectifs d&apos;apprentissage</span>
<span className="text-white font-bold">
{teamInsights.totalLearners}
</span>

View File

@@ -55,7 +55,7 @@ export function TeamFormDialog({
</DialogHeader>
<div className="space-y-4">
<div>
<Label htmlFor="team-name">Nom de l'équipe *</Label>
<Label htmlFor="team-name">Nom de l&apos;équipe *</Label>
<Input
id="team-name"
value={formData.name}

View File

@@ -23,7 +23,7 @@ export function AdminHeader() {
<h1 className="text-4xl font-bold text-white">Dashboard Managérial</h1>
<p className="text-slate-400 max-w-2xl mx-auto leading-relaxed">
Vue d'ensemble des compétences par équipe et direction pour pilotage
Vue d&apos;ensemble des compétences par équipe et direction pour pilotage
stratégique
</p>
@@ -40,7 +40,7 @@ export function AdminHeader() {
}`}
>
<Building2 className="w-4 h-4 mr-2" />
Vue d'ensemble
Vue d&apos;ensemble
</Button>
</Link>
<Link href="/admin/manage">