using System; using System.Reactive; using System.Threading.Tasks; using AutoCat.Utils; using AutoCatCore.Model; using AutoCatCore.Services.Api; using ReactiveUI; namespace AutoCat.ViewModels; public class CheckNumberViewModel : ViewModelBase { #region Fields private string _plateNumber = ""; #endregion #region Dependencies private readonly IApiService _apiService; #endregion #region Commands public ReactiveCommand CheckCommand { get; set; } #endregion #region Properties public string PlateNumber { get => _plateNumber; set => this.RaiseAndSetIfChanged(ref _plateNumber, value); } public Vehicle? Vehicle { get; set; } #endregion #region Events public event EventHandler? AutoCloseEvent; #endregion public CheckNumberViewModel(IApiService apiService) { _apiService = apiService; var checkEnabled = this.WhenAnyValue(vm => vm.PlateNumber, n => n.Length >= 8); CheckCommand = ReactiveCommand.CreateFromTask(Check, checkEnabled); CheckCommand.ThrownExceptions.Subscribe(Alerts.ShowError); } private async Task Check(string number) { Vehicle = await _apiService.CheckNumber(number); AutoCloseEvent?.Invoke(this, EventArgs.Empty); } }