diff --git a/LANCommander.Launcher/ViewModels/LoginViewModel.cs b/LANCommander.Launcher/ViewModels/LoginViewModel.cs index c5714818..10f3feb1 100644 --- a/LANCommander.Launcher/ViewModels/LoginViewModel.cs +++ b/LANCommander.Launcher/ViewModels/LoginViewModel.cs @@ -32,15 +32,18 @@ public partial class LoginViewModel : ViewModelBase private string _passwordConfirmation = string.Empty; [ObservableProperty] + [NotifyPropertyChangedFor(nameof(ShowPasswordConfirmation))] private bool _isRegistering; [ObservableProperty] + [NotifyPropertyChangedFor(nameof(ShowRegisterToggle))] private bool _allowRegistration = true; [ObservableProperty] private string _statusMessage = string.Empty; [ObservableProperty] + [NotifyPropertyChangedFor(nameof(ShowPrimaryButtons))] private bool _isLoading; [ObservableProperty] @@ -53,10 +56,33 @@ public partial class LoginViewModel : ViewModelBase private bool _isServerOffline; [ObservableProperty] + [NotifyPropertyChangedFor(nameof(ShowCredentialFields))] + [NotifyPropertyChangedFor(nameof(ShowPasswordConfirmation))] + [NotifyPropertyChangedFor(nameof(ShowPrimaryButtons))] + [NotifyPropertyChangedFor(nameof(ShowRegisterToggle))] + [NotifyPropertyChangedFor(nameof(ShowProviderButtons))] + [NotifyPropertyChangedFor(nameof(ShowProviderSeparator))] private bool _autoRedirectToProvider; public ObservableCollection AuthenticationProviders { get; } = new(); + // When auto-redirect is enabled, the username/password login path is hidden entirely. + public bool ShowCredentialFields => !AutoRedirectToProvider; + + public bool ShowPasswordConfirmation => IsRegistering && !AutoRedirectToProvider; + + public bool ShowPrimaryButtons => !IsLoading && !AutoRedirectToProvider; + + public bool ShowRegisterToggle => AllowRegistration && !AutoRedirectToProvider; + + // Hide provider buttons only in the case the launcher auto-redirects (auto-redirect on + exactly one provider). + public bool ShowProviderButtons => AutoRedirectToProvider + ? AuthenticationProviders.Count > 1 + : AuthenticationProviders.Count >= 1; + + // The "or" separator only makes sense when both credential fields and provider buttons are shown. + public bool ShowProviderSeparator => !AutoRedirectToProvider && ShowProviderButtons; + public event EventHandler? LoginSucceeded; public event EventHandler? ChangeServerRequested; @@ -71,6 +97,12 @@ public partial class LoginViewModel : ViewModelBase _authenticationClient = authenticationClient; _settingsProvider = settingsProvider; + AuthenticationProviders.CollectionChanged += (_, _) => + { + OnPropertyChanged(nameof(ShowProviderButtons)); + OnPropertyChanged(nameof(ShowProviderSeparator)); + }; + ServerAddress = _connectionClient.GetServerAddress()?.ToString() ?? "Not connected"; } diff --git a/LANCommander.Launcher/Views/LoginView.axaml b/LANCommander.Launcher/Views/LoginView.axaml index ee2f8690..96d20a72 100644 --- a/LANCommander.Launcher/Views/LoginView.axaml +++ b/LANCommander.Launcher/Views/LoginView.axaml @@ -70,7 +70,7 @@ - + - + - + - +