diff --git a/src/domain/login/LoginViewModel.js b/src/domain/login/LoginViewModel.js index 26d0ca88..381dc260 100644 --- a/src/domain/login/LoginViewModel.js +++ b/src/domain/login/LoginViewModel.js @@ -117,11 +117,15 @@ export class LoginViewModel extends ViewModel { async attemptLogin(loginMethod) { this._toggleBusy(true); + this._passwordLoginViewModel?.toggleBusy(true); + this._startSSOLoginViewModel?.toggleBusy(true); this._sessionContainer.startWithLogin(loginMethod); const loadStatus = this._sessionContainer.loadStatus; const handle = loadStatus.waitFor(status => status !== LoadStatus.Login); await handle.promise; this._toggleBusy(false); + this._passwordLoginViewModel?.toggleBusy(false); + this._startSSOLoginViewModel?.toggleBusy(false); const status = loadStatus.get(); if (status === LoadStatus.LoginFailed) { return this._sessionContainer.loginFailure; diff --git a/src/domain/login/PasswordLoginViewModel.js b/src/domain/login/PasswordLoginViewModel.js index 76814806..64a48f37 100644 --- a/src/domain/login/PasswordLoginViewModel.js +++ b/src/domain/login/PasswordLoginViewModel.js @@ -30,15 +30,13 @@ export class PasswordLoginViewModel extends ViewModel { get isBusy() { return this._isBusy; } - _toggleBusy(state) { + toggleBusy(state) { this._isBusy = state; this.emitChange("isBusy"); } async login(username, password) { - this._toggleBusy(true); const status = await this._attemptLogin(this._loginOptions.password(username, password)); - this._toggleBusy(false); let error = ""; switch (status) { case LoginFailure.Credentials: diff --git a/src/domain/login/StartSSOLoginViewModel.js b/src/domain/login/StartSSOLoginViewModel.js index 41f6dbeb..e4c0cf92 100644 --- a/src/domain/login/StartSSOLoginViewModel.js +++ b/src/domain/login/StartSSOLoginViewModel.js @@ -20,6 +20,14 @@ export class StartSSOLoginViewModel extends ViewModel{ constructor(options) { super(options); this._sso = options.loginOptions.sso; + this._isBusy = false; + } + + get isBusy() { return this._isBusy; } + + toggleBusy(state) { + this._isBusy = state; + this.emitChange("isBusy"); } async startSSOLogin() { diff --git a/src/platform/web/ui/login/LoginView.js b/src/platform/web/ui/login/LoginView.js index 1a146051..7672a719 100644 --- a/src/platform/web/ui/login/LoginView.js +++ b/src/platform/web/ui/login/LoginView.js @@ -57,7 +57,8 @@ class StartSSOLoginView extends TemplateView { t.button({ className: "StartSSOLoginView_button button-action secondary", type: "button", - onClick: () => vm.startSSOLogin() + onClick: () => vm.startSSOLogin(), + disabled: vm => vm.isBusy }, vm.i18n`Log in with SSO`) ); }