2
0

LoginViewModel.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using CommunityToolkit.Mvvm.ComponentModel;
  2. using CommunityToolkit.Mvvm.Input;
  3. using CommunityToolkit.Mvvm.Messaging;
  4. using Terminal.Gui.Configuration;
  5. using Terminal.Gui.Drawing;
  6. namespace CommunityToolkitExample;
  7. internal partial class LoginViewModel : ObservableObject
  8. {
  9. private const string DEFAULT_LOGIN_PROGRESS_MESSAGE = "Press 'Login' to log in.";
  10. private const string INVALID_LOGIN_MESSAGE = "Please enter a valid user name and password.";
  11. private const string LOGGING_IN_PROGRESS_MESSAGE = "Logging in...";
  12. private const string VALID_LOGIN_MESSAGE = "The input is valid!";
  13. [ObservableProperty]
  14. private bool _canLogin;
  15. [ObservableProperty]
  16. private string _loginProgressMessage;
  17. private string _password;
  18. [ObservableProperty]
  19. private string _passwordLengthMessage;
  20. private string _username;
  21. [ObservableProperty]
  22. private string _usernameLengthMessage;
  23. [ObservableProperty]
  24. private Scheme? _validationScheme;
  25. [ObservableProperty]
  26. private string _validationMessage;
  27. public LoginViewModel ()
  28. {
  29. _loginProgressMessage = string.Empty;
  30. _password = string.Empty;
  31. _passwordLengthMessage = string.Empty;
  32. _username = string.Empty;
  33. _usernameLengthMessage = string.Empty;
  34. _validationMessage = string.Empty;
  35. Username = string.Empty;
  36. Password = string.Empty;
  37. ClearCommand = new (Clear);
  38. LoginCommand = new (Execute);
  39. Clear ();
  40. return;
  41. async void Execute () { await Login (); }
  42. }
  43. public RelayCommand ClearCommand { get; }
  44. public RelayCommand LoginCommand { get; }
  45. public string Password
  46. {
  47. get => _password;
  48. set
  49. {
  50. SetProperty (ref _password, value);
  51. PasswordLengthMessage = $"_Password ({_password.Length} characters):";
  52. ValidateLogin ();
  53. }
  54. }
  55. public string Username
  56. {
  57. get => _username;
  58. set
  59. {
  60. SetProperty (ref _username, value);
  61. UsernameLengthMessage = $"_Username ({_username.Length} characters):";
  62. ValidateLogin ();
  63. }
  64. }
  65. public void Initialized ()
  66. {
  67. Clear ();
  68. }
  69. private void Clear ()
  70. {
  71. Username = string.Empty;
  72. Password = string.Empty;
  73. SendMessage (LoginActions.Clear, DEFAULT_LOGIN_PROGRESS_MESSAGE);
  74. }
  75. private async Task Login ()
  76. {
  77. SendMessage (LoginActions.LoginProgress, LOGGING_IN_PROGRESS_MESSAGE);
  78. await Task.Delay (TimeSpan.FromSeconds (1));
  79. Clear ();
  80. }
  81. private void SendMessage (LoginActions loginAction, string message = "")
  82. {
  83. switch (loginAction)
  84. {
  85. case LoginActions.Clear:
  86. LoginProgressMessage = message;
  87. ValidationMessage = INVALID_LOGIN_MESSAGE;
  88. ValidationScheme = SchemeManager.GetScheme ("Error");
  89. break;
  90. case LoginActions.LoginProgress:
  91. LoginProgressMessage = message;
  92. break;
  93. case LoginActions.Validation:
  94. ValidationMessage = CanLogin ? VALID_LOGIN_MESSAGE : INVALID_LOGIN_MESSAGE;
  95. ValidationScheme = CanLogin ? SchemeManager.GetScheme ("Base") : SchemeManager.GetScheme ("Error");
  96. break;
  97. }
  98. WeakReferenceMessenger.Default.Send (new Message<LoginActions> { Value = loginAction });
  99. }
  100. private void ValidateLogin ()
  101. {
  102. CanLogin = !string.IsNullOrEmpty (Username) && !string.IsNullOrEmpty (Password);
  103. SendMessage (LoginActions.Validation);
  104. }
  105. }