From d9f930d7cbe3fe14658fa048d1379646c7b74ce3 Mon Sep 17 00:00:00 2001 From: Alec Rippberger Date: Tue, 24 Sep 2024 16:35:43 -0500 Subject: [PATCH] Prefill email field when "create account" is clicked. --- .../auth/register-form/register-form.component.ts | 12 ++++++++++++ libs/auth/src/angular/login/login.component.ts | 1 + .../services/login-email/login-email.service.ts | 2 ++ 3 files changed, 15 insertions(+) diff --git a/apps/web/src/app/auth/register-form/register-form.component.ts b/apps/web/src/app/auth/register-form/register-form.component.ts index bf4a3e8203..b8404ae817 100644 --- a/apps/web/src/app/auth/register-form/register-form.component.ts +++ b/apps/web/src/app/auth/register-form/register-form.component.ts @@ -21,10 +21,12 @@ import { DialogService, ToastService } from "@bitwarden/components"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; import { AcceptOrganizationInviteService } from "../organization-invite/accept-organization.service"; +import { LoginEmailService } from "../../../../../../libs/auth/src/common/services/login-email/login-email.service"; @Component({ selector: "app-register-form", templateUrl: "./register-form.component.html", + providers: [LoginEmailService], }) export class RegisterFormComponent extends BaseRegisterComponent implements OnInit { @Input() queryParamEmail: string; @@ -53,6 +55,7 @@ export class RegisterFormComponent extends BaseRegisterComponent implements OnIn dialogService: DialogService, acceptOrgInviteService: AcceptOrganizationInviteService, toastService: ToastService, + private loginEmailService: LoginEmailService, ) { super( formValidationErrorService, @@ -95,6 +98,15 @@ export class RegisterFormComponent extends BaseRegisterComponent implements OnIn } else { this.characterMinimumMessage = this.i18nService.t("characterMinimum", this.minimumLength); } + + /** + * If the user has a login email, set the email field to the login email. + */ + this.loginEmailService.loginEmail$.subscribe((email) => { + if (email) { + this.formGroup.patchValue({ email }); + } + }); } async submit() { diff --git a/libs/auth/src/angular/login/login.component.ts b/libs/auth/src/angular/login/login.component.ts index 9f4f98e0cb..b0aeb1637c 100644 --- a/libs/auth/src/angular/login/login.component.ts +++ b/libs/auth/src/angular/login/login.component.ts @@ -383,6 +383,7 @@ export class LoginComponent implements OnInit, OnDestroy { onEmailBlur(event: Event) { const emailInput = event.target as HTMLInputElement; this.formGroup.controls.email.setValue(emailInput.value); + this.loginEmailService.setLoginEmail(this.formGroup.value.email); } protected async goToHint(): Promise { diff --git a/libs/auth/src/common/services/login-email/login-email.service.ts b/libs/auth/src/common/services/login-email/login-email.service.ts index bb89b412c5..9b9901464f 100644 --- a/libs/auth/src/common/services/login-email/login-email.service.ts +++ b/libs/auth/src/common/services/login-email/login-email.service.ts @@ -12,6 +12,7 @@ import { StateProvider, } from "../../../../../common/src/platform/state"; import { LoginEmailServiceAbstraction } from "../../abstractions/login-email.service"; +import { Injectable } from "@angular/core"; export const LOGIN_EMAIL = new KeyDefinition(LOGIN_EMAIL_MEMORY, "loginEmail", { deserializer: (value: string) => value, @@ -21,6 +22,7 @@ export const STORED_EMAIL = new KeyDefinition(LOGIN_EMAIL_DISK, "storedE deserializer: (value: string) => value, }); +@Injectable() export class LoginEmailService implements LoginEmailServiceAbstraction { private rememberEmail: boolean;