From a77adf5959ac4ee36f771243e9c039a2771e1ccb Mon Sep 17 00:00:00 2001 From: Florian Ehrenstorfer Date: Tue, 25 Feb 2025 15:47:24 +0100 Subject: [PATCH] create settings page #248 --- .../src/app/settings/settings.component.html | 27 +++++++++++ webapp/src/app/settings/settings.component.ts | 45 ++++++++++--------- 2 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 webapp/src/app/settings/settings.component.html diff --git a/webapp/src/app/settings/settings.component.html b/webapp/src/app/settings/settings.component.html new file mode 100644 index 00000000..447f1e12 --- /dev/null +++ b/webapp/src/app/settings/settings.component.html @@ -0,0 +1,27 @@ +
+

Settings

+
+

Notifications

+
+ +

Email notifications

+ +
+ +
+ +
+ + + + +

Are you absolutely sure?

+

This action cannot be undone. This will permanently delete your account and remove your data from our servers.

+
+ + + + +
+
+
diff --git a/webapp/src/app/settings/settings.component.ts b/webapp/src/app/settings/settings.component.ts index 73f64651..d27fdaf7 100644 --- a/webapp/src/app/settings/settings.component.ts +++ b/webapp/src/app/settings/settings.component.ts @@ -1,9 +1,9 @@ import { Component, inject } from '@angular/core'; import { Router } from '@angular/router'; import { lastValueFrom } from 'rxjs'; -import { UserService } from '@app/core/modules/openapi'; +import { UserService, UserSettings } from '@app/core/modules/openapi'; import { SecurityStore } from '@app/core/security/security-store.service'; -import { injectMutation } from '@tanstack/angular-query-experimental'; +import { injectMutation, injectQuery } from '@tanstack/angular-query-experimental'; import { BrnAlertDialogContentDirective, BrnAlertDialogTriggerDirective } from '@spartan-ng/brain/alert-dialog'; import { HlmAlertDialogActionButtonDirective, @@ -16,6 +16,9 @@ import { HlmAlertDialogTitleDirective } from '@spartan-ng/ui-alertdialog-helm'; import { HlmButtonDirective } from '@spartan-ng/ui-button-helm'; +import { HlmLabelDirective } from '@spartan-ng/ui-label-helm'; +import { FormControl, ReactiveFormsModule } from '@angular/forms'; +import { HlmSwitchComponent } from '@spartan-ng/ui-switch-helm'; @Component({ selector: 'app-settings', @@ -30,31 +33,18 @@ import { HlmButtonDirective } from '@spartan-ng/ui-button-helm'; HlmAlertDialogCancelButtonDirective, HlmAlertDialogActionButtonDirective, HlmAlertDialogContentComponent, - HlmButtonDirective + HlmButtonDirective, + HlmLabelDirective, + HlmSwitchComponent, + ReactiveFormsModule ], - template: ` -
-

Settings

- - - - -

Are you absolutely sure?

-

This action cannot be undone. This will permanently delete your account and remove your data from our servers.

-
- - - - -
-
-
- ` + templateUrl: './settings.component.html' }) export class SettingsComponent { router = inject(Router); securityStore = inject(SecurityStore); userService = inject(UserService); + _newNotificationEnabled = new FormControl(false); mutation = injectMutation(() => ({ mutationFn: () => lastValueFrom(this.userService.deleteUser()), @@ -67,4 +57,17 @@ export class SettingsComponent { deleteAccount() { this.mutation.mutate(); } + + settingsQuery = injectQuery(() => ({ + queryKey: ['settings'], + queryFn: async () => lastValueFrom(this.userService.getUserSettings()).then((settings) => this._newNotificationEnabled.setValue(settings.receiveNotifications ?? false)) + })); + + settingsMutation = injectMutation(() => ({ + mutationFn: (settings: UserSettings) => lastValueFrom(this.userService.updateUserSettings(settings)) + })); + + saveSettings() { + this.settingsMutation.mutate({ receiveNotifications: this._newNotificationEnabled.value ?? false }); + } }