Files
Walleby/Wallet/CreateWalletViewModel.cs
T
2024-06-29 19:39:34 +01:00

77 lines
2.1 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using Toolkit.Foundation;
namespace Wallet;
public partial class CreateWalletViewModel :
Observable,
IPrimaryConfirmation
{
[ObservableProperty]
private IImageDescriptor? imageDescriptor;
[ObservableProperty]
private bool isConfirmed;
[MaybeNull]
[ObservableProperty]
private string name;
[MaybeNull]
[ObservableProperty]
private string password;
[MaybeNull]
[ObservableProperty]
private string? repeatedPassword;
[ObservableProperty]
private IValidation validation;
public CreateWalletViewModel(IValidation validation,
IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Validation = validation;
Validation.Add(() => Name, [new ValidationRule(() => Name is { Length: > 0 })],
ValidationTrigger.Immediate);
Validation.Add(() => Password, [new ValidationRule(() => Password is { Length: > 0 })],
ValidationTrigger.Immediate);
Name = name;
}
public async Task<bool> ConfirmPrimary()
{
using (await new ActivityLock(this))
{
IsConfirmed = await Mediator.Handle<CreateEventArgs<Wallet<(string, string, IImageDescriptor?)>>,
bool>(Create.As(new Wallet<(string, string, IImageDescriptor?)>((Name, Password, ImageDescriptor))));
return IsConfirmed;
}
}
[RelayCommand]
public async Task Import() => ImageDescriptor = await Mediator.Handle<ReadEventArgs<ProfileImage>,
IImageDescriptor>(Read.As<ProfileImage>());
protected override void OnPropertyChanged(PropertyChangedEventArgs args)
{
if (args.PropertyName is string name)
{
_ = Validation.Validate(name);
}
base.OnPropertyChanged(args);
}
}