diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000..81c71ba84a Binary files /dev/null and b/.DS_Store differ diff --git a/angular/src/components/lock.component.ts b/angular/src/components/lock.component.ts index bd11e9acce..2262895c05 100644 --- a/angular/src/components/lock.component.ts +++ b/angular/src/components/lock.component.ts @@ -1,5 +1,6 @@ -import { Directive, OnInit } from '@angular/core'; +import { Directive, NgZone, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import { take } from 'rxjs/operators'; import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; @@ -51,7 +52,7 @@ export class LockComponent implements OnInit { protected storageService: StorageService, protected vaultTimeoutService: VaultTimeoutService, protected environmentService: EnvironmentService, protected stateService: StateService, protected apiService: ApiService, private logService: LogService, - private keyConnectorService: KeyConnectorService) { } + private keyConnectorService: KeyConnectorService, private ngZone: NgZone) { } async ngOnInit() { this.pinSet = await this.vaultTimeoutService.isPinLockSet(); @@ -185,7 +186,12 @@ export class LockComponent implements OnInit { togglePassword() { this.showPassword = !this.showPassword; - document.getElementById(this.pinLock ? 'pin' : 'masterPassword').focus(); + const input = document.getElementById(this.pinLock ? 'pin' : 'masterPassword'); + if (this.ngZone.isStable) { + input.focus(); + } else { + this.ngZone.onStable.pipe(take(1)).subscribe(() => input.focus()); + } } private async setKeyAndContinue(key: SymmetricCryptoKey) { diff --git a/angular/src/components/login.component.ts b/angular/src/components/login.component.ts index bfac5f5318..eb2678848a 100644 --- a/angular/src/components/login.component.ts +++ b/angular/src/components/login.component.ts @@ -1,11 +1,14 @@ import { Directive, Input, + NgZone, OnInit, } from '@angular/core'; import { Router } from '@angular/router'; +import { take } from 'rxjs/operators'; + import { AuthResult } from 'jslib-common/models/domain/authResult'; import { AuthService } from 'jslib-common/abstractions/auth.service'; @@ -51,7 +54,7 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit protected stateService: StateService, environmentService: EnvironmentService, protected passwordGenerationService: PasswordGenerationService, protected cryptoFunctionService: CryptoFunctionService, private storageService: StorageService, - protected logService: LogService) { + protected logService: LogService, private ngZone: NgZone) { super(environmentService, i18nService, platformUtilsService); } @@ -132,7 +135,11 @@ export class LoginComponent extends CaptchaProtectedComponent implements OnInit togglePassword() { this.showPassword = !this.showPassword; - document.getElementById('masterPassword').focus(); + if (this.ngZone.isStable) { + document.getElementById('masterPassword').focus(); + } else { + this.ngZone.onStable.pipe(take(1)).subscribe(() => document.getElementById('masterPassword').focus()); + } } async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {