diff --git a/booklore-ui/src/app/features/settings/user-management/user-management.component.ts b/booklore-ui/src/app/features/settings/user-management/user-management.component.ts index 39bf517e1..ffdc85153 100644 --- a/booklore-ui/src/app/features/settings/user-management/user-management.component.ts +++ b/booklore-ui/src/app/features/settings/user-management/user-management.component.ts @@ -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; diff --git a/booklore-ui/src/app/features/settings/user-management/user.service.ts b/booklore-ui/src/app/features/settings/user-management/user.service.ts index 5cfe9f3a8..e8d31124a 100644 --- a/booklore-ui/src/app/features/settings/user-management/user.service.ts +++ b/booklore-ui/src/app/features/settings/user-management/user.service.ts @@ -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(this.userUrl); } - updateUser(userId: number, updateData: Partial): Observable { + updateUser(userId: number, updateData: UserUpdateRequest): Observable { return this.http.put(`${this.userUrl}/${userId}`, updateData); } diff --git a/booklore-ui/src/app/features/settings/user-profile-dialog/user-profile-dialog.component.ts b/booklore-ui/src/app/features/settings/user-profile-dialog/user-profile-dialog.component.ts index 2c65108d1..8d94cbdc3 100644 --- a/booklore-ui/src/app/features/settings/user-profile-dialog/user-profile-dialog.component.ts +++ b/booklore-ui/src/app/features/settings/user-profile-dialog/user-profile-dialog.component.ts @@ -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;