using System; using System.Text.RegularExpressions; using _Network.Auth; using TMPro; using UnityEngine; using UnityEngine.UI; namespace _Hub.Scripts.UI { public class LoginUI : MonoBehaviour { #region Variables private const int _maxUsernameLength = 15; private const int _maxPasswordLength = 15; [SerializeField] private AuthButton loginButton; [SerializeField] private AuthInputField usernameInputField; [SerializeField] private AuthInputField passwordInputField; private string _username = String.Empty; private string _password = String.Empty; #endregion #region Unity private void Start() { AddListeners(); } private void AddListeners() { loginButton.Button.onClick.AddListener(OnLoginClick); usernameInputField.InputField.onValueChanged.AddListener(UpdateUsername); passwordInputField.InputField.onValueChanged.AddListener(UpdatePassword); } private void OnLoginClick() { } private void UpdateUsername(string username) { _username = username; Debug.Log("Username:" + username); ValidateAndUpdateUI(); } private void UpdatePassword(string password) { _password = password; Debug.Log("Password:" + password); ValidateAndUpdateUI(); } private void ValidateAndUpdateUI() { var usernameRegex = Regex.Match(_username, "^[a-zA-Z0-9]+$"); var interactable = (!string.IsNullOrWhiteSpace(_username) && !string.IsNullOrWhiteSpace(_password) && (_maxUsernameLength >= _username.Length && _maxPasswordLength >= _password.Length) && usernameRegex.Success); EnableLoginButton(interactable); UpdateInputErrors(usernameRegex); } private void UpdateInputErrors(Match usernameRegex) { //Username if (string.IsNullOrEmpty(_username)) { usernameInputField.Error(false); } else { var usernameTooLong = _username.Length > _maxUsernameLength; usernameInputField.Error(usernameTooLong || !usernameRegex.Success); } //Password if (string.IsNullOrEmpty(_password)) { usernameInputField.Error(false); } else { var passwordTooLong = _password.Length > _maxPasswordLength; passwordInputField.Error(passwordTooLong); } } private void EnableLoginButton(bool interactable) { loginButton.SetInteractable(interactable); } #endregion } }