Improved event naming

This commit is contained in:
TheXamlGuy
2024-05-12 19:55:20 +01:00
parent 3ba21051bf
commit 105aa2da26
21 changed files with 111 additions and 60 deletions
+1 -1
View File
@@ -89,7 +89,7 @@ public partial class App : Application
services.AddTemplate<ItemHeaderViewModel, ItemHeaderView>();
services.AddHandler<ItemConfigurationHandler>();
services.AddHandler<CreateItemHandler>();
});
})!);
+3 -3
View File
@@ -7,15 +7,15 @@ using Toolkit.Foundation;
namespace Bitvault.Avalonia;
public class AppHandler(IPublisher publisher) :
INotificationHandler<Started>
INotificationHandler<StartedEventArgs>
{
public async Task Handle(Started args, CancellationToken cancellationToken = default)
public async Task Handle(StartedEventArgs args, CancellationToken cancellationToken = default)
{
if (Application.Current is Application application)
{
if (application.ApplicationLifetime is IApplicationLifetime lifetime)
{
await publisher.Publish(new Navigate(lifetime is IClassicDesktopStyleApplicationLifetime ? "MainWindow" : "Main",
await publisher.Publish(new NavigateEventArgs(lifetime is IClassicDesktopStyleApplicationLifetime ? "MainWindow" : "Main",
lifetime is IClassicDesktopStyleApplicationLifetime ? typeof(IClassicDesktopStyleApplicationLifetime) :
typeof(ISingleViewApplicationLifetime)), cancellationToken);
}
+9 -2
View File
@@ -1,3 +1,10 @@
namespace Bitvault;
using Toolkit.Foundation;
public record Closed;
namespace Bitvault;
public record Closed
{
public static ChangedEventArgs<TValue> As<TValue>(TValue value) => new(value);
public static ChangedEventArgs<TValue> As<TValue>() where TValue : new() => new(new TValue());
}
+3
View File
@@ -0,0 +1,3 @@
namespace Bitvault;
public record ClosedEventArgs<TValue>(TValue? Value = default);
+3 -5
View File
@@ -2,8 +2,6 @@
namespace Bitvault;
public record Container<TValue>(TValue? Value = default);
public record Container
{
public Container(string name, string password)
@@ -17,10 +15,10 @@ public record Container
Password = password;
}
public Container()
{
public static Container<TValue> As<TValue>(TValue value) => new(value);
public static Container<TValue> As<TValue>() where TValue : new() => new(new TValue());
}
[MaybeNull]
+19 -6
View File
@@ -1,13 +1,15 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Toolkit.Foundation;
namespace Bitvault;
public class ContainerActivatedHandler(IContainerHostCollection containers,
IPublisher publisher) :
INotificationHandler<Activated<IComponentHost>>
INotificationHandler<ActivatedEventArgs<IComponentHost>>
{
public async Task Handle(Activated<IComponentHost> args, CancellationToken cancellationToken = default)
public async Task Handle(ActivatedEventArgs<IComponentHost> args,
CancellationToken cancellationToken = default)
{
if (args.Value is IComponentHost container)
{
@@ -18,15 +20,26 @@ public class ContainerActivatedHandler(IContainerHostCollection containers,
if (container.Services.GetRequiredService<ContainerConfiguration>() is ContainerConfiguration configuration)
{
if (container.Services.GetRequiredService<IServiceFactory>() is IServiceFactory factory)
if (container.Services.GetRequiredService<IServiceFactory>() is IServiceFactory serviceFactory)
{
if (factory.Create<ContainerNavigationViewModel>(configuration.Name) is ContainerNavigationViewModel viewModel)
if (serviceFactory.Create<ContainerNavigationViewModel>(configuration.Name) is ContainerNavigationViewModel viewModel)
{
await publisher.Publish(new Insert<IMainNavigationViewModel>(index, viewModel),
await publisher.Publish(new InsertEventArgs<IMainNavigationViewModel>(index, viewModel),
nameof(MainViewModel), cancellationToken);
}
}
}
}
}
}
public class ItemActivatedHandler(IServiceFactory serviceFactory,
IPublisher publisher) :
INotificationHandler<ActivatedEventArgs<ItemConfiguration>>
{
public async Task Handle(ActivatedEventArgs<ItemConfiguration> args,
CancellationToken cancellationToken = default)
{
}
}
+2 -2
View File
@@ -3,7 +3,7 @@
namespace Bitvault;
public partial class ContainerHeaderViewModel : ObservableCollectionViewModel<string, IDisposable>,
INotificationHandler<Container<Filter<string>>>
INotificationHandler<ActivateEventArgs<Filter<string>>>
{
public ContainerHeaderViewModel(IServiceProvider provider,
IServiceFactory factory,
@@ -20,7 +20,7 @@ public partial class ContainerHeaderViewModel : ObservableCollectionViewModel<st
public IContentTemplate Template { get; set; }
public Task Handle(Container<Filter<string>> args,
public Task Handle(ActivateEventArgs<Filter<string>> args,
CancellationToken cancellationToken = default)
{
if (args.Value is Filter<string> filter)
+8 -8
View File
@@ -6,10 +6,10 @@ namespace Bitvault;
public partial class ContainerNavigationViewModel :
ObservableCollectionViewModel<IContainerNavigationViewModel>,
IMainNavigationViewModel,
INotificationHandler<Container<Opened>>,
INotificationHandler<Container<Closed>>,
INotificationHandler<Container<Activated>>,
INotificationHandler<Container<Deactivated>>
INotificationHandler<OpenedEventArgs<Container>>,
INotificationHandler<ClosedEventArgs<Container>>,
INotificationHandler<ActivatedEventArgs<Container>>,
INotificationHandler<DeactivatedEventArgs<Container>>
{
[ObservableProperty]
private bool activated;
@@ -41,7 +41,7 @@ public partial class ContainerNavigationViewModel :
public IContentTemplate Template { get; set; }
public Task Handle(Container<Opened> args,
public Task Handle(OpenedEventArgs<Container> args,
CancellationToken cancellationToken = default)
{
Add<AllNavigationViewModel>("All");
@@ -53,7 +53,7 @@ public partial class ContainerNavigationViewModel :
return Task.CompletedTask;
}
public Task Handle(Container<Closed> args,
public Task Handle(ClosedEventArgs<Container> args,
CancellationToken cancellationToken = default)
{
Opened = true;
@@ -62,11 +62,11 @@ public partial class ContainerNavigationViewModel :
return Task.CompletedTask;
}
public Task Handle(Container<Deactivated> args,
public Task Handle(DeactivatedEventArgs<Container> args,
CancellationToken cancellationToken = default) =>
Task.FromResult(Activated = false);
public Task Handle(Container<Activated> args,
public Task Handle(ActivatedEventArgs<Container> args,
CancellationToken cancellationToken = default) =>
Task.FromResult(Activated = true);
}
+9 -9
View File
@@ -14,7 +14,7 @@ public partial class ContainerViewModel(IServiceProvider provider,
IContentTemplate template,
NamedComponent named,
string? filter = null) : ObservableCollectionViewModel<ItemNavigationViewModel>(provider, factory, mediator, publisher, subscriber, disposer),
INotificationHandler<Container<Filter<string>>>
INotificationHandler<RequestEventArgs<Filter<string>>>
{
[ObservableProperty]
private string? filter = filter;
@@ -24,19 +24,19 @@ public partial class ContainerViewModel(IServiceProvider provider,
public IContentTemplate Template { get; set; } = template;
public override async Task Activated()
public override async Task OnActivated()
{
await Publisher.Publish(Container.As<Activated>());
await base.Activated();
await Publisher.Publish(Activated.As<Container>());
await base.OnActivated();
}
public override async Task Deactivated()
public override async Task OnDeactivated()
{
await Publisher.Publish(Container.As<Deactivated>());
await base.Deactivated();
await Publisher.Publish(Deactivated.As<Container>());
await base.OnDeactivated();
}
public async Task Handle(Container<Filter<string>> args,
public async Task Handle(RequestEventArgs<Filter<string>> args,
CancellationToken cancellationToken = default)
{
if (args.Value is Filter<string> filter)
@@ -47,5 +47,5 @@ public partial class ContainerViewModel(IServiceProvider provider,
}
protected override IEnumerate PrepareEnumeration(object? key) =>
Enumerate<ItemNavigationViewModel>.With(new ContainerViewModelConfiguration { Filter = Filter }) with { Key = key };
EnumerateEventArgs<ItemNavigationViewModel>.With(new ContainerViewModelConfiguration { Filter = Filter }) with { Key = key };
}
+1 -1
View File
@@ -51,7 +51,7 @@ public class ContainerViewModelHandler(IDbContextFactory<ContainerDbContext> dbC
if (serviceFactory.Create<ItemNavigationViewModel>(item.Id, item.Name, "Description " + 1) is ItemNavigationViewModel viewModel)
{
await publisher.Publish(new Create<ItemNavigationViewModel>(viewModel),
await publisher.Publish(new CreateEventArgs<ItemNavigationViewModel>(viewModel),
nameof(ContainerViewModel), cancellationToken);
}
}
+2 -2
View File
@@ -7,9 +7,9 @@ namespace Bitvault;
public class CreateContainerHandler(IContainerFactory componentFactory,
IPublisher publisher) :
IHandler<Create<Container>, bool>
IHandler<CreateEventArgs<Container>, bool>
{
public async Task<bool> Handle(Create<Container> args,
public async Task<bool> Handle(CreateEventArgs<Container> args,
CancellationToken cancellationToken)
{
if (args.Value is Container container && container.Name is { Length: > 0 } name &&
+1 -1
View File
@@ -22,5 +22,5 @@ public partial class CreateContainerViewModel(IServiceProvider provider,
private string password;
public async Task<bool> Confirm() =>
await Mediator.Handle<Create<Container>, bool>(Create.As(new Container(Name, Password)));
await Mediator.Handle<CreateEventArgs<Container>, bool>(Create.As(new Container(Name, Password)));
}
@@ -4,10 +4,10 @@ using Toolkit.Foundation;
namespace Bitvault;
public class ItemConfigurationHandler(IDbContextFactory<ContainerDbContext> dbContextFactory) :
IHandler<Create<ItemConfiguration>, bool>
public class CreateItemHandler(IDbContextFactory<ContainerDbContext> dbContextFactory, IPublisher publisher) :
IHandler<CreateEventArgs<ItemConfiguration>, bool>
{
public async Task<bool> Handle(Create<ItemConfiguration> args,
public async Task<bool> Handle(CreateEventArgs<ItemConfiguration> args,
CancellationToken cancellationToken)
{
if (args.Value is ItemConfiguration configuration)
@@ -19,8 +19,10 @@ public class ItemConfigurationHandler(IDbContextFactory<ContainerDbContext> dbCo
using ContainerDbContext context = dbContextFactory.CreateDbContext();
await context.AddAsync(new Data.Item { Name = configuration.Name }, cancellationToken);
await context.SaveChangesAsync(cancellationToken);
}, cancellationToken);
await publisher.Publish(Activated.As(configuration));
return true;
}
catch
@@ -6,8 +6,8 @@ namespace Bitvault;
public partial class FilterContainerNavigationViewModel : ObservableViewModel,
IContainerNavigationViewModel,
INotificationHandler<Container<Activated>>,
INotificationHandler<Container<Deactivated>>
INotificationHandler<ActivatedEventArgs<Container>>,
INotificationHandler<DeactivatedEventArgs<Container>>
{
[ObservableProperty]
private bool activated;
@@ -29,14 +29,14 @@ public partial class FilterContainerNavigationViewModel : ObservableViewModel,
Filter = filter;
}
public Task Handle(Container<Deactivated> args,
public Task Handle(DeactivatedEventArgs<Container> args,
CancellationToken cancellationToken = default) =>
Task.FromResult(Activated = false);
public Task Handle(Container<Activated> args,
public Task Handle(ActivatedEventArgs<Container> args,
CancellationToken cancellationToken = default) =>
Task.FromResult(Activated = true);
[RelayCommand]
public async Task Invoke() => await Publisher.Publish(Container.As(new Filter<string>(Filter)));
public async Task Invoke() => await Publisher.Publish(Request.As(new Filter<string>(Filter)));
}
+21 -1
View File
@@ -1,3 +1,23 @@
namespace Bitvault;
public record Item;
public record Item<TValue>(TValue? Value = default);
public record Item
{
public Item(int id)
{
Id = id;
}
public Item()
{
}
public static Item<TValue> As<TValue>(TValue value) => new(value);
public static Item<TValue> As<TValue>() where TValue : new() => new(new TValue());
public int Id { get; }
}
+3 -3
View File
@@ -5,7 +5,7 @@ namespace Bitvault;
public partial class ItemViewModel :
ObservableCollectionViewModel<IItemViewModel>,
INotificationHandler<Confirm<Item>>
INotificationHandler<ConfirmEventArgs<Item>>
{
[ObservableProperty]
private int? id;
@@ -33,7 +33,7 @@ public partial class ItemViewModel :
public IContentTemplate Template { get; set; }
public async Task Handle(Confirm<Item> args, CancellationToken cancellationToken = default)
public async Task Handle(ConfirmEventArgs<Item> args, CancellationToken cancellationToken = default)
{
ItemConfiguration configuration = new();
foreach (IItemViewModel item in this)
@@ -41,6 +41,6 @@ public partial class ItemViewModel :
item.Invoke(configuration);
}
await Mediator.Handle<Create<ItemConfiguration>, bool>(Create.As(configuration), cancellationToken);
await Mediator.Handle<CreateEventArgs<ItemConfiguration>, bool>(Create.As(configuration), cancellationToken);
}
}
+3 -3
View File
@@ -5,9 +5,9 @@ namespace Bitvault;
public class MainViewModelHandler(IPublisher publisher,
IContainerHostCollection containers) :
INotificationHandler<Enumerate<IMainNavigationViewModel>>
INotificationHandler<EnumerateEventArgs<IMainNavigationViewModel>>
{
public async Task Handle(Enumerate<IMainNavigationViewModel> args,
public async Task Handle(EnumerateEventArgs<IMainNavigationViewModel> args,
CancellationToken cancellationToken = default)
{
foreach (IComponentHost container in containers.OrderBy(x => x.GetConfiguration<ContainerConfiguration>()
@@ -19,7 +19,7 @@ public class MainViewModelHandler(IPublisher publisher,
{
if (factory.Create<ContainerNavigationViewModel>(configuration.Name) is ContainerNavigationViewModel viewModel)
{
await publisher.Publish(new Create<IMainNavigationViewModel>(viewModel),
await publisher.Publish(new CreateEventArgs<IMainNavigationViewModel>(viewModel),
nameof(MainViewModel), cancellationToken);
}
}
+2 -2
View File
@@ -6,9 +6,9 @@ namespace Bitvault;
public class OpenContainerHandler(ContainerConfiguration configuration,
ISecurityKeyFactory keyVaultFactory,
IContainerStorageFactory vaultStorage) :
IHandler<Open<Container>, bool>
IHandler<ActivateEventArgs<Container>, bool>
{
public async Task<bool> Handle(Open<Container> args,
public async Task<bool> Handle(ActivateEventArgs<Container> args,
CancellationToken cancellationToken)
{
if (args.Value is Container container && configuration.Name is { Length: > 0 } name && container.Password is { Length: > 0 } password)
+2 -2
View File
@@ -20,9 +20,9 @@ public partial class OpenContainerViewModel(IServiceProvider provider,
{
if (Password is { Length: > 0 })
{
if (await Mediator.Handle<Open<Container>, bool>(Open.As(new Container(Password))))
if (await Mediator.Handle<ActivateEventArgs<Container>, bool>(Activate.As(new Container(Password))))
{
await Publisher.Publish(Container.As<Opened>());
await Publisher.Publish(Opened.As<Container>());
}
}
}
+6 -1
View File
@@ -1,3 +1,8 @@
namespace Bitvault;
public record Opened;
public record Opened
{
public static OpenedEventArgs<TValue> As<TValue>(TValue value) => new(value);
public static OpenedEventArgs<TValue> As<TValue>() where TValue : new() => new(new TValue());
}
+3
View File
@@ -0,0 +1,3 @@
namespace Bitvault;
public record OpenedEventArgs<TValue>(TValue? Value = default);