using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; namespace Wallet; [Notification(typeof(CreateEventArgs), nameof(Filter))] [Notification(typeof(InsertEventArgs), nameof(Filter))] [Notification(typeof(MoveToEventArgs), nameof(Filter))] [Notification(typeof(NotifyEventArgs>), nameof(ItemNavigationCollectionViewModel))] public partial class ItemNavigationCollectionViewModel : ObservableCollection, INotificationHandler>, INotificationHandler>>, IKeepAlive { [ObservableProperty] public string? named; private ItemNavigationCollectionConfiguration configuration; public ItemNavigationCollectionViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, IContentTemplate template, NamedComponent named, ItemNavigationCollectionConfiguration configuration, string? filter = null) : base(provider, factory, mediator, publisher, subscriber, disposer) { Template = template; Named = $"{named}"; Filter = filter; this.configuration = configuration with { Filter = filter }; } [ObservableProperty] private string? filter; public IContentTemplate Template { get; set; } public Task Handle(NotifyEventArgs args) { if (args.Sender is Filter filter) { configuration = configuration with { Filter = filter.Value }; Activate(true); } return Task.CompletedTask; } public Task Handle(NotifyEventArgs> args) { if (args.Sender is Search search) { configuration = configuration with { Query = search.Value }; Activate(true); } return Task.CompletedTask; } public override Task OnActivated() { Publisher.Publish(Notify.As(Factory.Create(new List { Factory.Create(), }))); return base.OnActivated(); } protected override ActivationBuilder ActivationBuilder() => new(Activation.As(configuration)); }