-
Dashboard
+
{{t('dashboard.title')}}
@for (item of navigationService.items(); track item.translationKey) {
diff --git a/UI/Web/src/app/management/manage-user/manage-user.component.scss b/UI/Web/src/app/management/manage-user/manage-user.component.scss
new file mode 100644
index 0000000..ed35878
--- /dev/null
+++ b/UI/Web/src/app/management/manage-user/manage-user.component.scss
@@ -0,0 +1,5 @@
+@use "../shared/management";
+
+#user-form {
+ background-color: var(--surface-card);
+}
diff --git a/UI/Web/src/app/management/manage-user/manage-user.component.ts b/UI/Web/src/app/management/manage-user/manage-user.component.ts
new file mode 100644
index 0000000..a3930c0
--- /dev/null
+++ b/UI/Web/src/app/management/manage-user/manage-user.component.ts
@@ -0,0 +1,59 @@
+import {ChangeDetectionStrategy, Component, DestroyRef, inject, OnInit} from '@angular/core';
+import {FormArray, FormControl, FormGroup, NonNullableFormBuilder, ReactiveFormsModule} from '@angular/forms';
+import {AuthService, Role} from '../../_services/auth.service';
+import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
+import {debounceTime, distinctUntilChanged, map, switchMap} from 'rxjs';
+import {AllLanguages, User} from '../../_models/user';
+import {SettingsItemComponent} from '../../shared/components/settings-item/settings-item.component';
+import {TranslocoDirective} from '@jsverse/transloco';
+import {LanguagePipe} from '../../_pipes/language-pipe';
+
+type UserForm = FormGroup<{
+ id: FormControl
+ name: FormControl,
+ language: FormControl,
+ roles: FormArray>,
+}>;
+
+@Component({
+ selector: 'app-manage-user',
+ imports: [
+ ReactiveFormsModule,
+ SettingsItemComponent,
+ TranslocoDirective,
+ LanguagePipe
+ ],
+ templateUrl: './manage-user.component.html',
+ styleUrl: './manage-user.component.scss',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ManageUserComponent implements OnInit {
+
+ private readonly authService = inject(AuthService);
+ private readonly destroyRef = inject(DestroyRef);
+ private readonly fb = inject(NonNullableFormBuilder);
+
+ userForm!: UserForm;
+
+ ngOnInit(): void {
+ const user = this.authService.user();
+
+
+ this.userForm = this.fb.group({
+ id: this.fb.control(user.id),
+ name: this.fb.control(user.name),
+ language: this.fb.control(user.language),
+ roles: this.fb.array(user.roles.map(r => this.fb.control(r))),
+ });
+
+ this.userForm.valueChanges.pipe(
+ takeUntilDestroyed(this.destroyRef),
+ distinctUntilChanged(),
+ debounceTime(100),
+ map(() => this.userForm.getRawValue() as User),
+ switchMap(user => this.authService.update(user)),
+ ).subscribe();
+ }
+
+ protected readonly AllLanguages = AllLanguages;
+}
diff --git a/UI/Web/src/app/management/management-server/_components/export-settings/export-settings.component.scss b/UI/Web/src/app/management/management-server/_components/export-settings/export-settings.component.scss
index d921112..a617152 100644
--- a/UI/Web/src/app/management/management-server/_components/export-settings/export-settings.component.scss
+++ b/UI/Web/src/app/management/management-server/_components/export-settings/export-settings.component.scss
@@ -1,7 +1,6 @@
.export-settings-container {
font-family: 'Spectral', serif;
padding: 2rem;
- background-color: var(--background-color);
min-height: 100vh;
.section-title {
diff --git a/UI/Web/src/app/management/management-server/management-server.component.html b/UI/Web/src/app/management/management-server/management-server.component.html
index 726d956..32b1f42 100644
--- a/UI/Web/src/app/management/management-server/management-server.component.html
+++ b/UI/Web/src/app/management/management-server/management-server.component.html
@@ -49,7 +49,7 @@ {{t('general-title')}}
@if (settings()) {
-
+
}
diff --git a/UI/Web/src/app/management/management-server/management-server.component.scss b/UI/Web/src/app/management/management-server/management-server.component.scss
index 72b9406..a333eb5 100644
--- a/UI/Web/src/app/management/management-server/management-server.component.scss
+++ b/UI/Web/src/app/management/management-server/management-server.component.scss
@@ -1 +1,5 @@
@use "../shared/management";
+
+#nav-container {
+ background-color: var(--surface-card);
+}
diff --git a/UI/Web/src/app/nav-bar/nav-bar.component.html b/UI/Web/src/app/nav-bar/nav-bar.component.html
index 7a98103..efe0d0e 100644
--- a/UI/Web/src/app/nav-bar/nav-bar.component.html
+++ b/UI/Web/src/app/nav-bar/nav-bar.component.html
@@ -15,9 +15,9 @@