using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Toolkit.Foundation; namespace Wallet; public partial class ItemNavigationViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, IContentTemplate template, NamedComponent named, Guid id, string name = "", string description = "", string category = "", bool isSelected = false, bool isFavourite = false, bool isArchived = false) : Observable(provider, factory, mediator, publisher, subscriber, disposer), INotificationHandler>, INotificationHandler>, INotificationHandler>, INotificationHandler>, INotificationHandler>, INotificationHandler>>, INotificationHandler>>, IKeyed, ISelectable, IRemovable { [ObservableProperty] private string? category = category; [ObservableProperty] private string? description = description; [ObservableProperty] private Guid id = id; [ObservableProperty] private IImageDescriptor? imageDescriptor; [ObservableProperty] private bool isArchived = isArchived; [ObservableProperty] private bool isAttached; [ObservableProperty] private bool isFavourite = isFavourite; [ObservableProperty] private bool isSelected = isSelected; [ObservableProperty] private string? name = name; [ObservableProperty] private string named = $"{named}"; public IContentTemplate Template { get; set; } = template; public Task Handle(ArchiveEventArgs args) { Dispose(); return Task.CompletedTask; } public Task Handle(UnarchiveEventArgs args) { Dispose(); return Task.CompletedTask; } public Task Handle(FavouriteEventArgs args) { IsFavourite = true; return Task.CompletedTask; } public Task Handle(UnfavouriteEventArgs args) { IsFavourite = false; return Task.CompletedTask; } public Task Handle(NotifyEventArgs> args) { if (args.Sender is ItemHeader header) { Name = header.Value; } return Task.CompletedTask; } public Task Handle(DeleteEventArgs args) { Dispose(); return Task.CompletedTask; } public Task Handle(NotifyEventArgs> args) { if (args.Sender is Item item) { ImageDescriptor = item.Value; } return Task.CompletedTask; } [RelayCommand] private void Attached() { if (!IsAttached) { Publisher.Publish(Activation.As(Id)); IsAttached = true; } } }