test
This commit is contained in:
parent
87b608f7b9
commit
6f3217f28b
@ -349,10 +349,6 @@ const TimeClockPage = () => {
|
|||||||
try {
|
try {
|
||||||
const apiUsers = await timeApi.getUsers();
|
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)) {
|
if (Array.isArray(apiUsers)) {
|
||||||
availableUsers = apiUsers;
|
availableUsers = apiUsers;
|
||||||
} else if (Array.isArray(apiUsers?.results)) {
|
} else if (Array.isArray(apiUsers?.results)) {
|
||||||
@ -361,21 +357,14 @@ const TimeClockPage = () => {
|
|||||||
availableUsers = apiUsers.data;
|
availableUsers = apiUsers.data;
|
||||||
} else if (Array.isArray(apiUsers?.users)) {
|
} else if (Array.isArray(apiUsers?.users)) {
|
||||||
availableUsers = apiUsers.users;
|
availableUsers = apiUsers.users;
|
||||||
} else {
|
|
||||||
availableUsers = [];
|
|
||||||
}
|
}
|
||||||
} catch (usersError) {
|
} catch (usersError) {
|
||||||
console.warn(
|
console.warn('Impossible de charger les utilisateurs.', usersError);
|
||||||
'Impossible de charger la liste des utilisateurs. Fallback sur les pointages.',
|
|
||||||
usersError,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Les pointages contiennent eux aussi l'utilisateur associé.
|
// Sécurité : on ajoute les utilisateurs trouvés dans les pointages
|
||||||
// On les fusionne toujours avec la liste de l'API : l'endpoint
|
// qui ne seraient pas présents dans /users/.
|
||||||
// utilisateurs peut être limité au profil courant ou être paginé.
|
|
||||||
// Cela évite d'avoir uniquement l'admin dans la combolist.
|
|
||||||
const usersById = new Map(
|
const usersById = new Map(
|
||||||
availableUsers
|
availableUsers
|
||||||
.map((user) => [getUserId(user), user])
|
.map((user) => [getUserId(user), user])
|
||||||
@ -402,37 +391,21 @@ const TimeClockPage = () => {
|
|||||||
usersById.set(id, entryUser);
|
usersById.set(id, entryUser);
|
||||||
});
|
});
|
||||||
|
|
||||||
availableUsers = [...usersById.values()];
|
availableUsers = [...usersById.values()]
|
||||||
|
.filter((user) => getUserId(user))
|
||||||
const currentUserId = getCurrentUserId();
|
.sort((a, b) =>
|
||||||
|
getUserLabel(a).localeCompare(getUserLabel(b), 'fr'),
|
||||||
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'),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
setUsers(availableUsers);
|
setUsers(availableUsers);
|
||||||
|
|
||||||
|
const currentUserId = getCurrentUserId();
|
||||||
|
|
||||||
setSelectedUserId((currentSelectedId) => {
|
setSelectedUserId((currentSelectedId) => {
|
||||||
if (
|
if (
|
||||||
currentSelectedId &&
|
currentSelectedId &&
|
||||||
availableUsers.some(
|
availableUsers.some(
|
||||||
(availableUser) =>
|
(user) => getUserId(user) === String(currentSelectedId),
|
||||||
getUserId(availableUser) === String(currentSelectedId),
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return currentSelectedId;
|
return currentSelectedId;
|
||||||
@ -451,7 +424,6 @@ const TimeClockPage = () => {
|
|||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadTimeEntries();
|
loadTimeEntries();
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user