Le dépôt sortait 7 erreurs eslint au début de cette série de correctifs, dont certaines antérieures. Il n'en reste aucune. - Dashboard et Users appelaient setState de façon synchrone dans un effet, ce qui provoque des rendus en cascade. Le chargement initial passe par une fonction asynchrone qui n'écrit qu'après l'await, avec annulation au démontage. Sur le Dashboard, l'indicateur de chargement est allumé par les gestionnaires d'événement, et le bouton Actualiser relance l'effet via un compteur plutôt qu'en appelant le chargement. - L'import ExternalLink de Documentation.jsx n'était pas utilisé. - AuthContext.jsx exportait à la fois un composant, le contexte et un hook, ce qui désactivait le rafraîchissement à chaud de Vite pour ce fichier. Le contexte et le hook vivent désormais dans leurs propres modules ; les 5 fichiers concernés sont mis à jour.
41 lines
1.3 KiB
React
41 lines
1.3 KiB
React
/* Contexte d'authentification global : gestion de l'utilisateur connecté */
|
|
|
|
import { useState } from 'react';
|
|
import * as api from '../services/api';
|
|
import { USER_KEY } from '../services/api';
|
|
import { AuthContext } from './authContextObject';
|
|
|
|
/* Fournisseur du contexte d'authentification */
|
|
export function AuthProvider({ children }) {
|
|
const [user, setUser] = useState(() => {
|
|
/* Restauration de la session depuis le localStorage au montage */
|
|
const stored = localStorage.getItem(USER_KEY);
|
|
return stored ? JSON.parse(stored) : null;
|
|
});
|
|
|
|
/* Connexion : appelle l'API, stocke le token + l'utilisateur retourné */
|
|
async function login(username, password) {
|
|
const connectedUser = await api.login(username, password);
|
|
setUser(connectedUser);
|
|
localStorage.setItem(USER_KEY, JSON.stringify(connectedUser));
|
|
return connectedUser;
|
|
}
|
|
|
|
/* Déconnexion : vide le token, le state et le localStorage */
|
|
function logout() {
|
|
api.clearToken();
|
|
setUser(null);
|
|
localStorage.removeItem(USER_KEY);
|
|
}
|
|
|
|
/* Booléen pratique pour savoir si l'utilisateur est connecté */
|
|
const isAuthenticated = !!user;
|
|
|
|
return (
|
|
<AuthContext.Provider value={{ user, login, logout, isAuthenticated }}>
|
|
{children}
|
|
</AuthContext.Provider>
|
|
);
|
|
}
|
|
|