-
-
{{ "deleteAccount" | i18n }}
-
-
-
{{ "deleteRecoverDesc" | 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,