mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
Fix: User update fails when libraries are assigned (#2144)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
This commit is contained in:
@@ -4,7 +4,7 @@ import {Button, ButtonDirective} from 'primeng/button';
|
||||
import {DynamicDialogRef} from 'primeng/dynamicdialog';
|
||||
import {TableModule} from 'primeng/table';
|
||||
import {LowerCasePipe, TitleCasePipe} from '@angular/common';
|
||||
import {User, UserService} from './user.service';
|
||||
import {User, UserService, UserUpdateRequest} from './user.service';
|
||||
|
||||
interface UserWithEditing extends User {
|
||||
isEditing?: boolean;
|
||||
@@ -135,13 +135,14 @@ export class UserManagementComponent implements OnInit, OnDestroy {
|
||||
|
||||
saveUser(user: UserWithEditing) {
|
||||
user.selectedLibraryIds = [...this.editingLibraryIds];
|
||||
const updateRequest: UserUpdateRequest = {
|
||||
name: user.name,
|
||||
email: user.email,
|
||||
permissions: user.permissions,
|
||||
assignedLibraries: user.selectedLibraryIds || [],
|
||||
};
|
||||
this.userService
|
||||
.updateUser(user.id, {
|
||||
name: user.name,
|
||||
email: user.email,
|
||||
permissions: user.permissions,
|
||||
assignedLibraries: this.allLibraries.filter(lib => lib.id && user.selectedLibraryIds?.includes(lib.id)),
|
||||
})
|
||||
.updateUser(user.id, updateRequest)
|
||||
.subscribe({
|
||||
next: () => {
|
||||
user.isEditing = false;
|
||||
|
||||
@@ -191,6 +191,13 @@ export interface UserState {
|
||||
error: string | null;
|
||||
}
|
||||
|
||||
export interface UserUpdateRequest {
|
||||
name?: string;
|
||||
email?: string;
|
||||
permissions?: User['permissions'];
|
||||
assignedLibraries?: number[];
|
||||
}
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
@@ -277,7 +284,7 @@ export class UserService {
|
||||
return this.http.get<User[]>(this.userUrl);
|
||||
}
|
||||
|
||||
updateUser(userId: number, updateData: Partial<User>): Observable<User> {
|
||||
updateUser(userId: number, updateData: UserUpdateRequest): Observable<User> {
|
||||
return this.http.put<User>(`${this.userUrl}/${userId}`, updateData);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import {Button} from 'primeng/button';
|
||||
import {AbstractControl, FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators} from '@angular/forms';
|
||||
import {InputText} from 'primeng/inputtext';
|
||||
import {Password} from 'primeng/password';
|
||||
import {User, UserService} from '../user-management/user.service';
|
||||
import {User, UserService, UserUpdateRequest} from '../user-management/user.service';
|
||||
import {MessageService} from 'primeng/api';
|
||||
import {Subject} from 'rxjs';
|
||||
import {filter, takeUntil} from 'rxjs/operators';
|
||||
@@ -105,7 +105,11 @@ export class UserProfileDialogComponent implements OnInit, OnDestroy {
|
||||
return;
|
||||
}
|
||||
|
||||
this.userService.updateUser(this.currentUser.id, this.editUserData).subscribe({
|
||||
const updateRequest: UserUpdateRequest = {
|
||||
name: this.editUserData.name,
|
||||
email: this.editUserData.email,
|
||||
};
|
||||
this.userService.updateUser(this.currentUser.id, updateRequest).subscribe({
|
||||
next: () => {
|
||||
this.messageService.add({severity: 'success', summary: 'Success', detail: 'Profile updated successfully'});
|
||||
this.isEditing = false;
|
||||
|
||||
Reference in New Issue
Block a user