using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; 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, string name = "", 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; } 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(Notify.As(Factory.Create(new List { Factory.Create(), Factory.Create(), }))); State = ItemState.Write; return Task.CompletedTask; } public Task Handle(CancelEventArgs args) { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(), Factory.Create(), }))); State = ItemState.Read; return Task.CompletedTask; } public Task Handle(ConfirmEventArgs args) { 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; return Task.CompletedTask; } public override Task Activated() { if (Archived) { Publisher.Publish(Notify.As(Factory.Create(new List { 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.Activated(); } protected override SynchronizeExpression BuildAggregateExpression() => new(Toolkit.Foundation.Synchronize.As(("", Name, State))); }