fix: resolve React Hook dependency warnings in useEffect
Fixed all 5 ESLint warnings by wrapping functions with useCallback and adding proper dependencies: - app/admin/tirages/page.tsx: checkExistingDraw, loadParticipants - app/admin/utilisateurs/[id]/page.tsx: loadUserDetails - app/historique/page.tsx: loadUserTickets, filterTickets - app/mes-lots/page.tsx: loadTickets - components/admin/UserManagement.tsx: loadUsers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
00776a1d74
commit
aee6658cd7
|
|
@ -1,6 +1,6 @@
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { Card } from '@/components/ui/Card';
|
import { Card } from '@/components/ui/Card';
|
||||||
import Button from '@/components/Button';
|
import Button from '@/components/Button';
|
||||||
import toast from 'react-hot-toast';
|
import toast from 'react-hot-toast';
|
||||||
|
|
@ -79,13 +79,7 @@ export default function TiragesPage() {
|
||||||
const [prizeValue, setPrizeValue] = useState('360');
|
const [prizeValue, setPrizeValue] = useState('360');
|
||||||
const [allowRedraw, setAllowRedraw] = useState(false);
|
const [allowRedraw, setAllowRedraw] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
const checkExistingDraw = useCallback(async () => {
|
||||||
checkExistingDraw();
|
|
||||||
// Charger automatiquement les participants au chargement de la page
|
|
||||||
loadParticipants();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const checkExistingDraw = async () => {
|
|
||||||
try {
|
try {
|
||||||
const token = localStorage.getItem('auth_token') || localStorage.getItem('token');
|
const token = localStorage.getItem('auth_token') || localStorage.getItem('token');
|
||||||
const response = await fetch(`${API_BASE_URL}/draw/check-existing`, {
|
const response = await fetch(`${API_BASE_URL}/draw/check-existing`, {
|
||||||
|
|
@ -102,9 +96,9 @@ export default function TiragesPage() {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erreur:', error);
|
console.error('Erreur:', error);
|
||||||
}
|
}
|
||||||
};
|
}, []);
|
||||||
|
|
||||||
const loadParticipants = async () => {
|
const loadParticipants = useCallback(async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
const token = localStorage.getItem('auth_token') || localStorage.getItem('token');
|
const token = localStorage.getItem('auth_token') || localStorage.getItem('token');
|
||||||
|
|
@ -128,7 +122,13 @@ export default function TiragesPage() {
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
}, [minTickets, verifiedOnly]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
checkExistingDraw();
|
||||||
|
// Charger automatiquement les participants au chargement de la page
|
||||||
|
loadParticipants();
|
||||||
|
}, [checkExistingDraw, loadParticipants]);
|
||||||
|
|
||||||
const conductDraw = async () => {
|
const conductDraw = async () => {
|
||||||
if (participants.length === 0) {
|
if (participants.length === 0) {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { useRouter, useParams } from 'next/navigation';
|
import { useRouter, useParams } from 'next/navigation';
|
||||||
import { adminService } from '@/services/admin.service';
|
import { adminService } from '@/services/admin.service';
|
||||||
import { User } from '@/types';
|
import { User } from '@/types';
|
||||||
|
|
@ -16,11 +16,7 @@ export default function UserDetailsPage() {
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
const loadUserDetails = useCallback(async () => {
|
||||||
loadUserDetails();
|
|
||||||
}, [userId]);
|
|
||||||
|
|
||||||
const loadUserDetails = async () => {
|
|
||||||
try {
|
try {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
|
|
@ -32,7 +28,11 @@ export default function UserDetailsPage() {
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
}, [userId]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
loadUserDetails();
|
||||||
|
}, [loadUserDetails]);
|
||||||
|
|
||||||
const getRoleBadgeColor = (role: string) => {
|
const getRoleBadgeColor = (role: string) => {
|
||||||
switch (role) {
|
switch (role) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
"use client";
|
"use client";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState, useCallback } from "react";
|
||||||
import { useAuth } from "@/contexts/AuthContext";
|
import { useAuth } from "@/contexts/AuthContext";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card";
|
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card";
|
||||||
|
|
@ -26,22 +26,7 @@ export default function HistoriquePage() {
|
||||||
rejected: 0,
|
rejected: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
const loadUserTickets = useCallback(async () => {
|
||||||
if (!authLoading && !isAuthenticated) {
|
|
||||||
router.push(ROUTES.LOGIN);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isAuthenticated) {
|
|
||||||
loadUserTickets();
|
|
||||||
}
|
|
||||||
}, [authLoading, isAuthenticated, router]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
filterTickets();
|
|
||||||
}, [tickets, filter, searchQuery]);
|
|
||||||
|
|
||||||
const loadUserTickets = async () => {
|
|
||||||
try {
|
try {
|
||||||
const response = await gameService.getMyTickets(1, 1000);
|
const response = await gameService.getMyTickets(1, 1000);
|
||||||
const ticketsData = response?.data || [];
|
const ticketsData = response?.data || [];
|
||||||
|
|
@ -59,9 +44,9 @@ export default function HistoriquePage() {
|
||||||
} finally {
|
} finally {
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
}
|
}
|
||||||
};
|
}, []);
|
||||||
|
|
||||||
const filterTickets = () => {
|
const filterTickets = useCallback(() => {
|
||||||
let result = [...tickets];
|
let result = [...tickets];
|
||||||
|
|
||||||
if (filter !== 'ALL') {
|
if (filter !== 'ALL') {
|
||||||
|
|
@ -75,7 +60,22 @@ export default function HistoriquePage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
setFilteredTickets(result);
|
setFilteredTickets(result);
|
||||||
};
|
}, [tickets, filter, searchQuery]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!authLoading && !isAuthenticated) {
|
||||||
|
router.push(ROUTES.LOGIN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAuthenticated) {
|
||||||
|
loadUserTickets();
|
||||||
|
}
|
||||||
|
}, [authLoading, isAuthenticated, router, loadUserTickets]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
filterTickets();
|
||||||
|
}, [filterTickets]);
|
||||||
|
|
||||||
if (authLoading || isLoading) {
|
if (authLoading || isLoading) {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
"use client";
|
"use client";
|
||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect, useCallback } from "react";
|
||||||
import { useAuth } from "@/contexts/AuthContext";
|
import { useAuth } from "@/contexts/AuthContext";
|
||||||
import { useGame } from "@/hooks/useGame";
|
import { useGame } from "@/hooks/useGame";
|
||||||
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card";
|
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card";
|
||||||
|
|
@ -29,13 +29,7 @@ export default function HistoriquePage() {
|
||||||
const [totalPages, setTotalPages] = useState(1);
|
const [totalPages, setTotalPages] = useState(1);
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
const loadTickets = useCallback(async () => {
|
||||||
if (isAuthenticated && user?.role?.toLowerCase() === "client") {
|
|
||||||
loadTickets();
|
|
||||||
}
|
|
||||||
}, [isAuthenticated, user, currentPage]);
|
|
||||||
|
|
||||||
const loadTickets = async () => {
|
|
||||||
try {
|
try {
|
||||||
setError(null);
|
setError(null);
|
||||||
console.log('🎫 Chargement des tickets, page:', currentPage);
|
console.log('🎫 Chargement des tickets, page:', currentPage);
|
||||||
|
|
@ -55,7 +49,13 @@ export default function HistoriquePage() {
|
||||||
setError('Erreur lors du chargement de vos tickets.');
|
setError('Erreur lors du chargement de vos tickets.');
|
||||||
setTickets([]);
|
setTickets([]);
|
||||||
}
|
}
|
||||||
};
|
}, [getMyTickets, currentPage]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (isAuthenticated && user?.role?.toLowerCase() === "client") {
|
||||||
|
loadTickets();
|
||||||
|
}
|
||||||
|
}, [isAuthenticated, user, loadTickets]);
|
||||||
|
|
||||||
if (!isAuthenticated || user?.role?.toLowerCase() !== "client") {
|
if (!isAuthenticated || user?.role?.toLowerCase() !== "client") {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect, useCallback } from 'react';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
import { adminService } from '@/services/admin.service';
|
import { adminService } from '@/services/admin.service';
|
||||||
import { User, CreateEmployeeData, UpdateUserData, PaginatedResponse } from '@/types';
|
import { User, CreateEmployeeData, UpdateUserData, PaginatedResponse } from '@/types';
|
||||||
|
|
@ -29,11 +29,7 @@ export default function UserManagement() {
|
||||||
|
|
||||||
const [userFormData, setUserFormData] = useState<UpdateUserData>({});
|
const [userFormData, setUserFormData] = useState<UpdateUserData>({});
|
||||||
|
|
||||||
useEffect(() => {
|
const loadUsers = useCallback(async () => {
|
||||||
loadUsers();
|
|
||||||
}, [page, filterRole]);
|
|
||||||
|
|
||||||
const loadUsers = async () => {
|
|
||||||
try {
|
try {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
|
|
@ -50,7 +46,11 @@ export default function UserManagement() {
|
||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
}, [page, filterRole]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
loadUsers();
|
||||||
|
}, [loadUsers]);
|
||||||
|
|
||||||
const handleCreateEmployee = async (e: React.FormEvent) => {
|
const handleCreateEmployee = async (e: React.FormEvent) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user