Hide auth fields / buttons based on server auth settings
Some checks failed
LANCommander Release / prep (push) Failing after 12s
LANCommander Release / build_launcher_linux_x64 (push) Has been skipped
LANCommander Release / build_launcher_osx_arm64 (push) Has been skipped
LANCommander Release / build_launcher_osx_x64 (push) Has been skipped
LANCommander Release / build_launcher_win_arm64 (push) Has been skipped
LANCommander Release / build_launcher_win_x64 (push) Has been skipped
LANCommander Release / build_packager (push) Has been skipped
LANCommander Release / build_release (push) Has been skipped
LANCommander Release / build_server_linux_arm64 (push) Has been skipped
LANCommander Release / build_server_linux_x64 (push) Has been skipped
LANCommander Release / build_server_osx_arm64 (push) Has been skipped
LANCommander Release / build_server_osx_x64 (push) Has been skipped
LANCommander Release / build_server_win_arm64 (push) Has been skipped
LANCommander Release / build_server_win_x64 (push) Has been skipped
LANCommander Release / build_launcher_linux_arm64 (push) Has been skipped

This commit is contained in:
Pat Hartl 2026-06-22 21:46:49 -05:00
parent b6e674e2eb
commit 46801dd468
2 changed files with 39 additions and 7 deletions

View file

@ -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<AuthenticationProvider> 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";
}

View file

@ -70,7 +70,7 @@
</Border>
</Grid>
<StackPanel Spacing="8">
<StackPanel Spacing="8" IsVisible="{Binding ShowCredentialFields}">
<TextBlock Text="Username" FontWeight="SemiBold" Foreground="White" />
<TextBox x:Name="UsernameTextBox"
Watermark="Enter your username"
@ -83,7 +83,7 @@
</TextBox>
</StackPanel>
<StackPanel Spacing="8">
<StackPanel Spacing="8" IsVisible="{Binding ShowCredentialFields}">
<TextBlock Text="Password" FontWeight="SemiBold" Foreground="White" />
<TextBox Watermark="Enter your password"
Classes="Glass"
@ -96,7 +96,7 @@
</TextBox>
</StackPanel>
<StackPanel Spacing="8" IsVisible="{Binding IsRegistering}">
<StackPanel Spacing="8" IsVisible="{Binding ShowPasswordConfirmation}">
<TextBlock Text="Confirm Password" FontWeight="SemiBold" Foreground="White" />
<TextBox Watermark="Confirm your password"
Classes="Glass"
@ -109,7 +109,7 @@
</TextBox>
</StackPanel>
<Panel IsVisible="{Binding !IsLoading}">
<Panel IsVisible="{Binding ShowPrimaryButtons}">
<Button Command="{Binding LoginCommand}"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
@ -154,7 +154,7 @@
Background="Transparent"
BorderThickness="0"
Cursor="Hand"
IsVisible="{Binding AllowRegistration}"
IsVisible="{Binding ShowRegisterToggle}"
IsEnabled="{Binding !IsLoading}">
<Panel>
<TextBlock Text="Don't have an account? Register"
@ -173,8 +173,8 @@
</Button>
<StackPanel IsVisible="{Binding !IsRegistering}" Spacing="12">
<StackPanel IsVisible="{Binding AuthenticationProviders.Count}" Spacing="12">
<Grid ColumnDefinitions="*,Auto,*" Margin="0,4">
<StackPanel IsVisible="{Binding ShowProviderButtons}" Spacing="12">
<Grid ColumnDefinitions="*,Auto,*" Margin="0,4" IsVisible="{Binding ShowProviderSeparator}">
<Separator Grid.Column="0" VerticalAlignment="Center" />
<TextBlock Grid.Column="1" Text="or" Foreground="White" Opacity="0.5" Margin="12,0" FontSize="12" />
<Separator Grid.Column="2" VerticalAlignment="Center" />