Ensure new wallets show up in the menu

This commit is contained in:
TheXamlGuy
2024-06-10 22:47:04 +01:00
parent 6c210a2236
commit 14ab366d67
6 changed files with 17 additions and 15 deletions
+2 -2
View File
@@ -14,7 +14,7 @@ public class CreateWalletHandler(IWalletFactory componentFactory,
{
if (args.Sender is Wallet <(string, string)> Wallet)
{
if (Wallet.Value is (string name, string password) &&
if (Wallet.Sender is (string name, string password) &&
name is { Length: > 0 } &&
password is { Length: > 0 })
{
@@ -36,7 +36,7 @@ public class CreateWalletHandler(IWalletFactory componentFactory,
configuration.Write(args => args.Key = $"{Convert.ToBase64String(key.Salt)}:{Convert.ToBase64String(key.EncryptedKey)}:{Convert.ToBase64String(key.DecryptedKey)}");
host.Start();
publisher.Publish(Activated.As(host), cancellationToken);
publisher.Publish(Activated.As(new Wallet<IComponentHost>(host)));
return true;
}
}
+1 -1
View File
@@ -1,10 +1,10 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.Extensions.DependencyInjection;
using Toolkit.Foundation;
namespace Wallet;
[Notification(typeof(CreateEventArgs<IMainNavigationViewModel>), nameof(MainViewModel))]
[Notification(typeof(InsertEventArgs<IMainNavigationViewModel>), nameof(MainViewModel))]
public partial class MainViewModel :
ObservableCollection<IMainNavigationViewModel>
{
+1 -1
View File
@@ -13,7 +13,7 @@ public class OpenWalletHandler(IConfigurationDescriptor<WalletConfiguration> des
{
if (args.Sender is Wallet<string> Wallet &&
descriptor.Name is { Length: > 0 } name &&
Wallet.Value is { Length: > 0 } password)
Wallet.Sender is { Length: > 0 } password)
{
WalletConfiguration configuration = descriptor.Value;
if (configuration.Key?.Split(':') is { Length: >= 2 } keyPart)
+1 -1
View File
@@ -14,7 +14,7 @@ public class QueryWalletHandler(IDbContextFactory<WalletContext> dbContextFactor
List<(Guid Id, string? Name, string Category, bool Favourite, bool Archived)> items = [];
if (args.Value is Wallet<(string, string)> Wallet)
{
(string filter, string text) = Wallet.Value;
(string filter, string text) = Wallet.Sender;
ExpressionStarter<ItemEntry> predicate =
PredicateBuilder.New<ItemEntry>(true);
+1 -1
View File
@@ -1,5 +1,5 @@
namespace Wallet;
public record Wallet<TValue>(TValue Value);
public record Wallet<TSender>(TSender Sender);
public record Wallet;
+11 -9
View File
@@ -5,25 +5,27 @@ namespace Wallet;
public class WalletActivatedHandler(IWalletHostCollection Wallets,
IPublisher publisher) :
INotificationHandler<ActivatedEventArgs<IComponentHost>>
INotificationHandler<ActivatedEventArgs<Wallet<IComponentHost>>>
{
public Task Handle(ActivatedEventArgs<IComponentHost> args)
public Task Handle(ActivatedEventArgs<Wallet<IComponentHost>> args)
{
if (args.Sender is IComponentHost Wallet)
if (args.Sender is Wallet<IComponentHost> wallet && wallet.Sender is IComponentHost host)
{
List<IComponentHost> sortedWallets = [.. Wallets, Wallet];
List<IComponentHost> sortedWallets = [.. Wallets, host];
sortedWallets = [.. sortedWallets.OrderBy(x => x.Services.GetRequiredService<IConfigurationDescriptor<WalletConfiguration>>() is
IConfigurationDescriptor<WalletConfiguration> descriptor ? descriptor.Name : null)];
int index = sortedWallets.IndexOf(Wallet);
int index = sortedWallets.IndexOf(host);
if (Wallet.Services.GetRequiredService<ConfigurationDescriptor<WalletConfiguration>>() is ConfigurationDescriptor<WalletConfiguration> descriptor)
if (host.Services.GetRequiredService<IConfigurationDescriptor<WalletConfiguration>>() is
ConfigurationDescriptor<WalletConfiguration> descriptor)
{
if (Wallet.Services.GetRequiredService<IServiceFactory>() is IServiceFactory serviceFactory)
if (host.Services.GetRequiredService<IServiceFactory>() is IServiceFactory serviceFactory)
{
if (serviceFactory.Create<WalletNavigationViewModel>(descriptor.Name) is WalletNavigationViewModel viewModel)
if (serviceFactory.Create<WalletNavigationViewModel>(descriptor.Name, false)
is WalletNavigationViewModel viewModel)
{
publisher.Publish(new InsertEventArgs<IMainNavigationViewModel>(index, viewModel),
publisher.Publish(Insert.As<IMainNavigationViewModel>(index, viewModel),
nameof(MainViewModel));
}
}