AutoCatAvalonia/AutoCat/ViewModels/CheckNumberViewModel.cs

65 lines
1.4 KiB
C#

using System;
using System.Reactive;
using System.Reactive.Linq;
using System.Threading.Tasks;
using AutoCat.Utils;
using AutoCatCore.Model;
using AutoCatCore.Services.Api;
using DynamicData.Binding;
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<string, Unit> CheckCommand { get; }
#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<string>(Check, checkEnabled);
CheckCommand.ThrownExceptions.Subscribe(Alerts.ShowError);
}
private async Task Check(string number)
{
Vehicle = await _apiService.CheckNumber(number);
AutoCloseEvent?.Invoke(this, EventArgs.Empty);
}
}