using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; namespace Bitvault; [Notification(typeof(ConfirmEventArgs), nameof(ItemHeader))] public partial class ItemHeaderViewModel : Observable, IHandler, bool>, IHandler, string?>, INotificationHandler>, INotificationHandler>, INotificationHandler>, INotificationHandler>> { [ObservableProperty] private string? category; [ObservableProperty] private ItemState state; public ItemHeaderViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscription subscriber, IDisposer disposer, ItemState state, string? value = null) : base(provider, factory, mediator, publisher, subscriber, disposer, value) { State = state; Value = value; Track(nameof(Value), () => Value, newValue => Value = newValue); } public Task Handle(ValidationEventArgs args, CancellationToken cancellationToken) { return Task.FromResult(true); } public Task Handle(UpdateEventArgs args) => Task.FromResult(State = ItemState.Write); public Task Handle(CancelEventArgs args) { Revert(); State = ItemState.Read; return Task.CompletedTask; } public Task Handle(ConfirmEventArgs args) { Commit(); State = ItemState.Read; return Task.CompletedTask; } public Task Handle(NotifyEventArgs> args) { if (args.Value is ItemCategory category) { Category = category.Value; } return Task.CompletedTask; } public Task Handle(ConfirmEventArgs args, CancellationToken cancellationToken) => Task.FromResult(Value); }