Sort user list, preselect own user, check password before saving

This commit is contained in:
araemer 2025-11-30 07:36:47 +01:00
parent ac3450239e
commit e1eeef8d8a

View file

@ -38,6 +38,7 @@ export default function UserManagementPage() {
const [isPasswordModalOpen, setIsPasswordModalOpen] = useState(false); const [isPasswordModalOpen, setIsPasswordModalOpen] = useState(false);
const [password, setPassword] = useState(""); const [password, setPassword] = useState("");
const [confirmPassword, setConfirmPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState("");
const [passwordError, setPasswordError] = useState("");
const [isSaving, setIsSaving] = useState(false); const [isSaving, setIsSaving] = useState(false);
const isAdmin = currentUser?.role === "admin"; const isAdmin = currentUser?.role === "admin";
@ -53,8 +54,22 @@ export default function UserManagementPage() {
if (me.role === "admin") { if (me.role === "admin") {
const userResponse: UserListResponse = await fetchAllUsers(); 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 { } else {
setUsers([me]); setUsers([me]);
setSelectedUser(me); setSelectedUser(me);
@ -72,15 +87,22 @@ export default function UserManagementPage() {
setIsSaving(true); setIsSaving(true);
try { try {
if (!selectedUser.id) { 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 response: CreateUserResponse = await createUser({userData: selectedUser, password});
const userDto = response.userData; const userDto = response.userData;
if (userDto) { if (userDto) {
// add user to list and slect
setUsers([...users, userDto]); setUsers([...users, userDto]);
setSelectedUser(userDto); setSelectedUser(userDto);
} }
} else { } else {
// existing user - update
const updated = await updateUser(selectedUser); 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))); setUsers(users.map(u => (u.id === updated.id ? updated : u)));
setSelectedUser(updated); setSelectedUser(updated);
} }
@ -107,6 +129,7 @@ export default function UserManagementPage() {
}); });
}; };
// @todo API enum!
const roleOptions = [ const roleOptions = [
{value: "user", label: "Benutzer"}, {value: "user", label: "Benutzer"},
{value: "admin", label: "Administrator"} {value: "admin", label: "Administrator"}
@ -148,7 +171,7 @@ export default function UserManagementPage() {
)} )}
onClick={() => handleSelectUser(user)} onClick={() => handleSelectUser(user)}
> >
{user.firstName} {user.lastName} ({user.userName}) {user.lastName}, {user.firstName} ({user.userName})
</li> </li>
))} ))}
</ul> </ul>
@ -232,6 +255,7 @@ export default function UserManagementPage() {
onKeyDown={() => { onKeyDown={() => {
}} }}
/> />
{passwordError && <p className="error-text mb-2">{passwordError}</p>}
</> </>
)} )}