diff --git a/apps/web/src/app/auth/recover-delete.component.html b/apps/web/src/app/auth/recover-delete.component.html index 5b3ba90565e..a00fbb838eb 100644 --- a/apps/web/src/app/auth/recover-delete.component.html +++ b/apps/web/src/app/auth/recover-delete.component.html @@ -1,44 +1,16 @@ -
-
-
-

{{ "deleteAccount" | i18n }}

-
-
-

{{ "deleteRecoverDesc" | i18n }}

-
- - -
-
-
- - - {{ "cancel" | i18n }} - -
-
-
-
+ +

{{ "deleteRecoverDesc" | i18n }}

+ + {{ "emailAddress" | i18n }} + + +
+
+ + + {{ "cancel" | i18n }} +
diff --git a/apps/web/src/app/auth/recover-delete.component.ts b/apps/web/src/app/auth/recover-delete.component.ts index e52353e382c..6688c1582ec 100644 --- a/apps/web/src/app/auth/recover-delete.component.ts +++ b/apps/web/src/app/auth/recover-delete.component.ts @@ -1,10 +1,10 @@ import { Component } from "@angular/core"; +import { FormControl, FormGroup, Validators } from "@angular/forms"; import { Router } from "@angular/router"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { DeleteRecoverRequest } from "@bitwarden/common/models/request/delete-recover.request"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @Component({ @@ -12,33 +12,27 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl templateUrl: "recover-delete.component.html", }) export class RecoverDeleteComponent { - email: string; - formPromise: Promise; + protected recoverDeleteForm = new FormGroup({ + email: new FormControl(null, [Validators.required]), + }); constructor( private router: Router, private apiService: ApiService, private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, - private logService: LogService, ) {} - async submit() { - try { - const request = new DeleteRecoverRequest(); - request.email = this.email.trim().toLowerCase(); - this.formPromise = this.apiService.postAccountRecoverDelete(request); - await this.formPromise; - this.platformUtilsService.showToast( - "success", - null, - this.i18nService.t("deleteRecoverEmailSent"), - ); - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.router.navigate(["/"]); - } catch (e) { - this.logService.error(e); - } - } + submit = async () => { + const request = new DeleteRecoverRequest(); + request.email = this.recoverDeleteForm.value.email.trim().toLowerCase(); + await this.apiService.postAccountRecoverDelete(request); + this.platformUtilsService.showToast( + "success", + null, + this.i18nService.t("deleteRecoverEmailSent"), + ); + + await this.router.navigate(["/"]); + }; } diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index 209a291a712..0a15e058696 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -134,12 +134,6 @@ const routes: Routes = [ data: { titleId: "acceptFamilySponsorship", doNotSaveUrl: false } satisfies DataProperties, }, { path: "recover", pathMatch: "full", redirectTo: "recover-2fa" }, - { - path: "recover-delete", - component: RecoverDeleteComponent, - canActivate: [UnauthGuard], - data: { titleId: "deleteAccount" } satisfies DataProperties, - }, { path: "verify-recover-delete", component: VerifyRecoverDeleteComponent, @@ -231,6 +225,20 @@ const routes: Routes = [ (mod) => mod.AcceptEmergencyComponent, ), }, + ], + }, + { + path: "recover-delete", + canActivate: [unauthGuardFn()], + children: [ + { + path: "", + component: RecoverDeleteComponent, + data: { + pageTitle: "deleteAccount", + titleId: "deleteAccount", + } satisfies DataProperties & AnonLayoutWrapperData, + }, { path: "", component: EnvironmentSelectorComponent,