From e1eeef8d8a4e5112714a836b4fe042a605b3c164 Mon Sep 17 00:00:00 2001 From: araemer Date: Sun, 30 Nov 2025 07:36:47 +0100 Subject: [PATCH] Sort user list, preselect own user, check password before saving --- .../components/users/UserManagementPage.tsx | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/users/UserManagementPage.tsx b/frontend/src/components/users/UserManagementPage.tsx index 3bac1aa..6e230b4 100644 --- a/frontend/src/components/users/UserManagementPage.tsx +++ b/frontend/src/components/users/UserManagementPage.tsx @@ -38,6 +38,7 @@ export default function UserManagementPage() { const [isPasswordModalOpen, setIsPasswordModalOpen] = useState(false); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); + const [passwordError, setPasswordError] = useState(""); const [isSaving, setIsSaving] = useState(false); const isAdmin = currentUser?.role === "admin"; @@ -53,8 +54,22 @@ export default function UserManagementPage() { if (me.role === "admin") { const userResponse: UserListResponse = await fetchAllUsers(); - setUsers(userResponse.valueList); - console.log(users) + + // Sort users alphabetically by last name, then first name + const sortedUsers = userResponse.valueList.sort((a, b) => { + // Compare last names first + const lastNameCompare = (a.lastName || "").localeCompare(b.lastName || ""); + if (lastNameCompare !== 0) { + return lastNameCompare; + } + // If last names are equal, compare first names + return (a.firstName || "").localeCompare(b.firstName || ""); + }); + + setUsers(sortedUsers); + + // Pre-select current user (admin's own profile) + setSelectedUser(me); } else { setUsers([me]); setSelectedUser(me); @@ -72,15 +87,22 @@ export default function UserManagementPage() { setIsSaving(true); try { if (!selectedUser.id) { - //@todo check passwords! + // New user - check passwords and save + if (confirmPassword !== password) { + setPasswordError("Passwords do not match"); + return; + } const response: CreateUserResponse = await createUser({userData: selectedUser, password}); const userDto = response.userData; if (userDto) { + // add user to list and slect setUsers([...users, userDto]); setSelectedUser(userDto); } } else { + // existing user - update const updated = await updateUser(selectedUser); + // update user data in user list and select correct user setUsers(users.map(u => (u.id === updated.id ? updated : u))); setSelectedUser(updated); } @@ -107,6 +129,7 @@ export default function UserManagementPage() { }); }; + // @todo API enum! const roleOptions = [ {value: "user", label: "Benutzer"}, {value: "admin", label: "Administrator"} @@ -148,7 +171,7 @@ export default function UserManagementPage() { )} onClick={() => handleSelectUser(user)} > - {user.firstName} {user.lastName} ({user.userName}) + {user.lastName}, {user.firstName} ({user.userName}) ))} @@ -232,6 +255,7 @@ export default function UserManagementPage() { onKeyDown={() => { }} /> + {passwordError &&

{passwordError}

} )}