diff --git a/CommunityToolkitExample/LoginAction.cs b/CommunityToolkitExample/LoginActions.cs similarity index 66% rename from CommunityToolkitExample/LoginAction.cs rename to CommunityToolkitExample/LoginActions.cs index 2fd8d4a45..3cbc6972c 100644 --- a/CommunityToolkitExample/LoginAction.cs +++ b/CommunityToolkitExample/LoginActions.cs @@ -1,7 +1,8 @@ namespace CommunityToolkitExample; -internal enum LoginAction +internal enum LoginActions { + Clear, Validation, LoginProgress } diff --git a/CommunityToolkitExample/LoginView.cs b/CommunityToolkitExample/LoginView.cs index 262928e35..b0d891fa9 100644 --- a/CommunityToolkitExample/LoginView.cs +++ b/CommunityToolkitExample/LoginView.cs @@ -3,7 +3,7 @@ using Terminal.Gui; namespace CommunityToolkitExample; -internal partial class LoginView : IRecipient> +internal partial class LoginView : IRecipient> { public LoginView (LoginViewModel viewModel) { @@ -14,12 +14,10 @@ internal partial class LoginView : IRecipient> usernameInput.TextChanged += (_, _) => { ViewModel.Username = usernameInput.Text; - SetText (); }; passwordInput.TextChanged += (_, _) => { ViewModel.Password = passwordInput.Text; - SetText (); }; loginButton.Accept += (_, _) => { @@ -30,7 +28,6 @@ internal partial class LoginView : IRecipient> clearButton.Accept += (_, _) => { ViewModel.ClearCommand.Execute (null); - SetText (); }; Initialized += (_, _) => { ViewModel.Initialized (); }; @@ -38,16 +35,23 @@ internal partial class LoginView : IRecipient> public LoginViewModel ViewModel { get; set; } - public void Receive (Message message) + public void Receive (Message message) { switch (message.Value) { - case LoginAction.LoginProgress: + case LoginActions.Clear: + { + loginProgressLabel.Text = ViewModel.LoginProgressMessage; + validationLabel.Text = ViewModel.ValidationMessage; + validationLabel.ColorScheme = ViewModel.ValidationColorScheme; + break; + } + case LoginActions.LoginProgress: { loginProgressLabel.Text = ViewModel.LoginProgressMessage; break; } - case LoginAction.Validation: + case LoginActions.Validation: { validationLabel.Text = ViewModel.ValidationMessage; validationLabel.ColorScheme = ViewModel.ValidationColorScheme; diff --git a/CommunityToolkitExample/LoginViewModel.cs b/CommunityToolkitExample/LoginViewModel.cs index 2de4688a3..506641801 100644 --- a/CommunityToolkitExample/LoginViewModel.cs +++ b/CommunityToolkitExample/LoginViewModel.cs @@ -11,6 +11,7 @@ internal partial class LoginViewModel : ObservableObject private const string INVALID_LOGIN_MESSAGE = "Please enter a valid user name and password."; private const string LOGGING_IN_PROGRESS_MESSAGE = "Logging in..."; private const string VALID_LOGIN_MESSAGE = "The input is valid!"; + [ObservableProperty] private bool _canLogin; @@ -26,6 +27,7 @@ internal partial class LoginViewModel : ObservableObject [ObservableProperty] private string _usernameLengthMessage; + [ObservableProperty] private ColorScheme? _validationColorScheme; @@ -33,6 +35,13 @@ internal partial class LoginViewModel : ObservableObject private string _validationMessage; public LoginViewModel () { + _loginProgressMessage = string.Empty; + _password = string.Empty; + _passwordLengthMessage = string.Empty; + _username = string.Empty; + _usernameLengthMessage = string.Empty; + _validationMessage = string.Empty; + Username = string.Empty; Password = string.Empty; @@ -81,35 +90,39 @@ internal partial class LoginViewModel : ObservableObject { Username = string.Empty; Password = string.Empty; - SendMessage (LoginAction.Validation); - SendMessage (LoginAction.LoginProgress, DEFAULT_LOGIN_PROGRESS_MESSAGE); + SendMessage (LoginActions.Clear, DEFAULT_LOGIN_PROGRESS_MESSAGE); } private async Task Login () { - SendMessage (LoginAction.LoginProgress, LOGGING_IN_PROGRESS_MESSAGE); + SendMessage (LoginActions.LoginProgress, LOGGING_IN_PROGRESS_MESSAGE); await Task.Delay (TimeSpan.FromSeconds (1)); Clear (); } - private void SendMessage (LoginAction loginAction, string message = "") + private void SendMessage (LoginActions loginAction, string message = "") { switch (loginAction) { - case LoginAction.LoginProgress: + case LoginActions.Clear: + LoginProgressMessage = message; + ValidationMessage = INVALID_LOGIN_MESSAGE; + ValidationColorScheme = Colors.ColorSchemes ["Error"]; + break; + case LoginActions.LoginProgress: LoginProgressMessage = message; break; - case LoginAction.Validation: + case LoginActions.Validation: ValidationMessage = CanLogin ? VALID_LOGIN_MESSAGE : INVALID_LOGIN_MESSAGE; ValidationColorScheme = CanLogin ? Colors.ColorSchemes ["Base"] : Colors.ColorSchemes ["Error"]; break; } - WeakReferenceMessenger.Default.Send (new Message { Value = loginAction }); + WeakReferenceMessenger.Default.Send (new Message { Value = loginAction }); } private void ValidateLogin () { CanLogin = !string.IsNullOrEmpty (Username) && !string.IsNullOrEmpty (Password); - SendMessage (LoginAction.Validation); + SendMessage (LoginActions.Validation); } } diff --git a/CommunityToolkitExample/Message.cs b/CommunityToolkitExample/Message.cs index a1081512e..f0e8ad530 100644 --- a/CommunityToolkitExample/Message.cs +++ b/CommunityToolkitExample/Message.cs @@ -2,5 +2,5 @@ internal class Message { - public T Value { get; set; } + public T? Value { get; set; } } diff --git a/CommunityToolkitExample/Program.cs b/CommunityToolkitExample/Program.cs index 96c43a14a..0d4f21c30 100644 --- a/CommunityToolkitExample/Program.cs +++ b/CommunityToolkitExample/Program.cs @@ -5,7 +5,7 @@ namespace CommunityToolkitExample; public static class Program { - public static IServiceProvider Services { get; private set; } + public static IServiceProvider? Services { get; private set; } private static void Main (string [] args) {