using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; namespace Bitvault; [Notification(typeof(ConfirmEventArgs), nameof(ItemState.New))] [Notification(typeof(ConfirmEventArgs), nameof(ItemState.Write))] public partial class ItemViewModel : ObservableCollection, INotificationHandler>, INotificationHandler>, INotificationHandler> { [ObservableProperty] private bool archived; [ObservableProperty] private bool favourite; [ObservableProperty] private ItemState state; [ObservableProperty] private string named; [ObservableProperty] private string name; [ObservableProperty] private bool fromCategory; public ItemViewModel(ICollectionSynchronizer synchronizer, IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscription subscriber, IDisposer disposer, IContentTemplate template, NamedComponent named, ItemState state = ItemState.Read, bool fromCategory = false, string name = "", bool favourite = false, bool archived = false) : base(synchronizer,provider, factory, mediator, publisher, subscriber, disposer) { Template = template; Named = $"{named}"; State = state; FromCategory = fromCategory; Favourite = favourite; Archived = archived; Name = name; Add(state, name); Add(state); } public IContentTemplate Template { get; set; } public Task Handle(UpdateEventArgs args) { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(ItemState.Write), Factory.Create(), }))); State = ItemState.Write; return Task.CompletedTask; } public override void Dispose() { Publisher.Publish(Notify.As(Factory.Create(new List()))); base.Dispose(); } 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(), }))); State = ItemState.Read; return Task.CompletedTask; } public override Task OnActivated() { 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(State), Factory.Create(), }))); } else { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(Favourite), Factory.Create(), Factory.Create(), }))); } } return base.OnActivated(); } }