using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; using Wallet.Data; namespace Wallet; public partial class ItemViewModel : ObservableCollection, INotificationHandler>, INotificationHandler>, INotificationHandler> { [ObservableProperty] private bool archived; [ObservableProperty] private bool favourite; [ObservableProperty] private bool fromCategory; [ObservableProperty] private string name; [ObservableProperty] private string named; [ObservableProperty] private ItemState state; public ItemViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, IContentTemplate template, NamedComponent named, IDecoratorService itemHeaderConfigurationDecorator, string name = "", string category = "", ImageDescriptor? imageDescriptor = null, bool fromCategory = false, bool favourite = false, bool archived = false, ItemState state = ItemState.Read) : base(provider, factory, mediator, publisher, subscriber, disposer) { Template = template; Named = $"{named}"; State = state; FromCategory = fromCategory; Favourite = favourite; Archived = archived; Name = name; ItemHeaderConfiguration configuration = new() { Name = name, Category = category, }; itemHeaderConfigurationDecorator.Set(configuration); Add(configuration, state, name, imageDescriptor); Add(); } public IContentTemplate Template { get; set; } public override void Dispose() { GC.SuppressFinalize(this); Publisher.Publish(Notify.As(Factory.Create(new List()))); base.Dispose(); } public Task Handle(UpdateEventArgs args) { Publisher.Publish(Update.As()); Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(), Factory.Create(), }))); State = ItemState.Write; return Task.CompletedTask; } public Task Handle(CancelEventArgs args) { Publisher.Publish(Cancel.As()); Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(), Factory.Create(), }))); State = ItemState.Read; return Task.CompletedTask; } public async Task Handle(ConfirmEventArgs args) { List results = []; await foreach (bool result in Mediator.HandleManyAsync, bool>(Validate.As())) { results.Add(result); } if (results.All(result => result)) { Publisher.Publish(Confirm.As()); Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(Favourite), Factory.Create(), Factory.Create(), }))); Publisher.Publish(Confirm.As(), State is ItemState.New ? nameof(ItemState.New) : nameof(ItemState.Write)); State = ItemState.Read; } } public override Task OnActivated() { if (Archived) { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(), Factory.Create(), }))); } else { if (State is ItemState.Write or ItemState.New) { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(), Factory.Create(), }))); } else { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(Favourite), Factory.Create(), Factory.Create(), }))); } } return base.OnActivated(); } }