Playvoi/Playvoi.Client/Assets/_Hub/Scripts/UI/LoginUI.cs

99 lines
No EOL
2.9 KiB
C#

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
}
}