using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; namespace Bitvault; public partial class ItemNavigationViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscription subscriber, IDisposer disposer, IContentTemplate template, NamedComponent named, Guid id, string name = "", string description = "", string category = "", bool selected = false, bool favourite = false, bool archived = false) : Observable(provider, factory, mediator, publisher, subscriber, disposer), INotificationHandler>, INotificationHandler>, INotificationHandler>, INotificationHandler>, INotificationHandler>>, IKeyed, ISelectable, IRemovable { [ObservableProperty] private bool archived = archived; [ObservableProperty] private string? category = category; [ObservableProperty] private string? description = description; [ObservableProperty] private bool favourite = favourite; [ObservableProperty] private Guid id = id; [ObservableProperty] private string? name = name; [ObservableProperty] private string named = $"{named}"; [ObservableProperty] private bool selected = selected; public IContentTemplate Template { get; set; } = template; public Task Handle(ArchiveEventArgs args) => Task.Run(Dispose); public Task Handle(UnarchiveEventArgs args) => Task.Run(Dispose); public Task Handle(FavouriteEventArgs args) => Task.FromResult(Favourite = true); public Task Handle(UnfavouriteEventArgs args) => Task.FromResult(Favourite = false); public Task Handle(NotifyEventArgs> args) { if (args.Value is ItemHeader header) { Name = header.Value; } return Task.CompletedTask; } }