From 6f3217f28bdb965214d73c4de00d89a209183ad7 Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Sat, 19 Sep 2026 23:18:36 +0200 Subject: [PATCH] test --- frontend/src/pages/TimeClockPage.jsx | 48 ++++++---------------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/frontend/src/pages/TimeClockPage.jsx b/frontend/src/pages/TimeClockPage.jsx index acb1862..f9d8b1a 100644 --- a/frontend/src/pages/TimeClockPage.jsx +++ b/frontend/src/pages/TimeClockPage.jsx @@ -349,10 +349,6 @@ const TimeClockPage = () => { try { const apiUsers = await timeApi.getUsers(); - // Django REST Framework renvoie souvent les listes paginées - // sous la forme { count, next, previous, results: [...] }. - // On accepte aussi les formats { data: [...] } / { users: [...] } - // pour éviter de perdre une partie des utilisateurs. if (Array.isArray(apiUsers)) { availableUsers = apiUsers; } else if (Array.isArray(apiUsers?.results)) { @@ -361,21 +357,14 @@ const TimeClockPage = () => { availableUsers = apiUsers.data; } else if (Array.isArray(apiUsers?.users)) { availableUsers = apiUsers.users; - } else { - availableUsers = []; } } catch (usersError) { - console.warn( - 'Impossible de charger la liste des utilisateurs. Fallback sur les pointages.', - usersError, - ); + console.warn('Impossible de charger les utilisateurs.', usersError); } } - // Les pointages contiennent eux aussi l'utilisateur associé. - // On les fusionne toujours avec la liste de l'API : l'endpoint - // utilisateurs peut être limité au profil courant ou être paginé. - // Cela évite d'avoir uniquement l'admin dans la combolist. + // Sécurité : on ajoute les utilisateurs trouvés dans les pointages + // qui ne seraient pas présents dans /users/. const usersById = new Map( availableUsers .map((user) => [getUserId(user), user]) @@ -402,37 +391,21 @@ const TimeClockPage = () => { usersById.set(id, entryUser); }); - availableUsers = [...usersById.values()]; - - const currentUserId = getCurrentUserId(); - - if ( - currentUserId && - !availableUsers.some( - (availableUser) => getUserId(availableUser) === currentUserId, - ) - ) { - const loggedInUser = authUser || currentUser; - - if (loggedInUser) { - availableUsers.unshift(loggedInUser); - } - } - - availableUsers = availableUsers - .filter((availableUser) => getUserId(availableUser)) - .sort((first, second) => - getUserLabel(first).localeCompare(getUserLabel(second), 'fr'), + availableUsers = [...usersById.values()] + .filter((user) => getUserId(user)) + .sort((a, b) => + getUserLabel(a).localeCompare(getUserLabel(b), 'fr'), ); setUsers(availableUsers); + const currentUserId = getCurrentUserId(); + setSelectedUserId((currentSelectedId) => { if ( currentSelectedId && availableUsers.some( - (availableUser) => - getUserId(availableUser) === String(currentSelectedId), + (user) => getUserId(user) === String(currentSelectedId), ) ) { return currentSelectedId; @@ -451,7 +424,6 @@ const TimeClockPage = () => { setLoading(false); } }; - useEffect(() => { loadTimeEntries(); }, []);