diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index 6c64c34..b368799 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -25,8 +25,16 @@ public partial class App : Application public override async void OnFrameworkInitializationCompleted() { IHost? host = DefaultHostBuilder.Create() - .AddConfiguration(args => args.Name = "Personal", - "Vault:*") + .AddConfiguration("Locker:*") + .AddConfiguration("Item:*") + .AddConfiguration(args => args.Name = "Bank Account", "Item:Bank Account") + .AddConfiguration(args => args.Name = "Credit Card", "Item:Credit Card") + .AddConfiguration(args => args.Name = "Document", "Item:Document") + .AddConfiguration(args => args.Name = "Driving Licence", "Item:Driving Licence") + .AddConfiguration(args => args.Name = "Identity", "Item:Identity") + .AddConfiguration(args => args.Name = "Login", "Item:Login") + .AddConfiguration(args => args.Name = "Note", "Item:Note") + .AddConfiguration(args => args.Name = "Password", "Item:Password") .ConfigureServices((context, services) => { services.AddAvalonia(); @@ -37,6 +45,9 @@ public partial class App : Application services.AddTemplate("MainWindow"); } + services.AddScoped>>(provider => + new ProxyService>(provider.GetRequiredService>())); + services.AddHandler(); services.AddTransient(provider => Component.Create(provider, args => @@ -48,6 +59,9 @@ public partial class App : Application services.AddCache(); + services.AddTransient(_ => + provider.GetRequiredService>>()); + services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -87,15 +101,17 @@ public partial class App : Application services.AddScoped(); services.AddTemplate("Container"); - services.AddTemplate("ContentItemCollection"); + services.AddTemplate("ContentItemCollection"); + services.AddHandler(); services.AddTemplate(); services.AddTemplate("ContainerHeader"); services.AddTemplate(); - services.AddTemplate("ContainerItemCategoryCollection"); - - services.AddHandler(); + services.AddTemplate("ContainerItemCategoryCollection"); + services.AddTemplate(); + + services.AddHandler(); services.AddTemplate(); services.AddTemplate("Item"); diff --git a/Bitvault.Avalonia/ArchiveNavigationView.axaml b/Bitvault.Avalonia/ArchiveNavigationView.axaml index 18cc089..b01b3a9 100644 --- a/Bitvault.Avalonia/ArchiveNavigationView.axaml +++ b/Bitvault.Avalonia/ArchiveNavigationView.axaml @@ -15,8 +15,8 @@ - - + + @@ -25,8 +25,9 @@ - - + + + diff --git a/Bitvault.Avalonia/Bitvault.Avalonia.csproj b/Bitvault.Avalonia/Bitvault.Avalonia.csproj index 3fd38a8..4a0679f 100644 --- a/Bitvault.Avalonia/Bitvault.Avalonia.csproj +++ b/Bitvault.Avalonia/Bitvault.Avalonia.csproj @@ -43,11 +43,14 @@ AddItemNavigationView.axaml - - ContainerCategoryCollectionView.axaml + + ItemCategoryNavigationView.axaml - - ContainerItemCollectionView.axaml + + ItemCategoryCollectionView.axaml + + + ItemCollectionView.axaml CreateItemActionView.axaml diff --git a/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs b/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs deleted file mode 100644 index d0e506b..0000000 --- a/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Avalonia.Controls; -using FluentAvalonia.UI.Media.Animation; -using Toolkit.UI.Avalonia; - -namespace Bitvault.Avalonia; - -public partial class ContainerCategoryCollectionView : - UserControl -{ - public ContainerCategoryCollectionView() => - InitializeComponent(); -} diff --git a/Bitvault.Avalonia/CreateContainerNavigationView.axaml.cs b/Bitvault.Avalonia/CreateContainerNavigationView.axaml.cs index 68948f5..df5a43d 100644 --- a/Bitvault.Avalonia/CreateContainerNavigationView.axaml.cs +++ b/Bitvault.Avalonia/CreateContainerNavigationView.axaml.cs @@ -4,5 +4,6 @@ namespace Bitvault.Avalonia; public partial class CreateContainerNavigationView : SettingsExpander { - public CreateContainerNavigationView() => InitializeComponent(); + public CreateContainerNavigationView() => + InitializeComponent(); } \ No newline at end of file diff --git a/Bitvault.Avalonia/ContainerItemCollectionView.axaml b/Bitvault.Avalonia/ItemCategoryCollectionView.axaml similarity index 84% rename from Bitvault.Avalonia/ContainerItemCollectionView.axaml rename to Bitvault.Avalonia/ItemCategoryCollectionView.axaml index c7e76bd..2c43b9b 100644 --- a/Bitvault.Avalonia/ContainerItemCollectionView.axaml +++ b/Bitvault.Avalonia/ItemCategoryCollectionView.axaml @@ -1,9 +1,9 @@ + x:DataType="vm:ItemCategoryCollectionViewModel"> + public ItemCategoryCollectionView() => InitializeComponent(); } diff --git a/Bitvault.Avalonia/ItemCategoryNavigationView.axaml b/Bitvault.Avalonia/ItemCategoryNavigationView.axaml new file mode 100644 index 0000000..397e0cd --- /dev/null +++ b/Bitvault.Avalonia/ItemCategoryNavigationView.axaml @@ -0,0 +1,7 @@ + diff --git a/Bitvault.Avalonia/ItemCategoryNavigationView.axaml.cs b/Bitvault.Avalonia/ItemCategoryNavigationView.axaml.cs new file mode 100644 index 0000000..20aace9 --- /dev/null +++ b/Bitvault.Avalonia/ItemCategoryNavigationView.axaml.cs @@ -0,0 +1,9 @@ +using Avalonia.Controls; + +namespace Bitvault.Avalonia; + +public partial class ItemCategoryNavigationView : UserControl +{ + public ItemCategoryNavigationView() => + InitializeComponent(); +} diff --git a/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml b/Bitvault.Avalonia/ItemCollectionView.axaml similarity index 84% rename from Bitvault.Avalonia/ContainerCategoryCollectionView.axaml rename to Bitvault.Avalonia/ItemCollectionView.axaml index 1460496..762ad4f 100644 --- a/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml +++ b/Bitvault.Avalonia/ItemCollectionView.axaml @@ -1,9 +1,9 @@ + x:DataType="vm:ItemCollectionViewModel"> + InitializeComponent(); +} diff --git a/Bitvault.Avalonia/StarredNavigationView.axaml b/Bitvault.Avalonia/StarredNavigationView.axaml index 49b533d..fb0eb31 100644 --- a/Bitvault.Avalonia/StarredNavigationView.axaml +++ b/Bitvault.Avalonia/StarredNavigationView.axaml @@ -26,6 +26,7 @@ + diff --git a/Bitvault/AggerateContainerCategoryViewModelHandler.cs b/Bitvault/AggerateContainerCategoryViewModelHandler.cs index 9d556c0..3171ef3 100644 --- a/Bitvault/AggerateContainerCategoryViewModelHandler.cs +++ b/Bitvault/AggerateContainerCategoryViewModelHandler.cs @@ -2,18 +2,23 @@ namespace Bitvault; -public class AggerateContainerCategoryViewModelHandler(IServiceFactory serviceFactory, +public class AggerateContainerCategoryViewModelHandler(IProxyService> proxyConfigurations, + IServiceFactory serviceFactory, IPublisher publisher) : - INotificationHandler> + INotificationHandler> { - public Task Handle(AggerateEventArgs args) + public Task Handle(AggerateEventArgs args) { - if (serviceFactory.Create() - is ItemNavigationViewModel viewModel) + if (proxyConfigurations.Value is IEnumerable configurations) { - publisher.Publish(Create.As(viewModel), nameof(ContainerCategoryCollectionViewModel)); + foreach (ItemConfiguration configuration in configurations) + { + if (serviceFactory.Create(configuration.Name) + is ItemCategoryNavigationViewModel viewModel) + { + publisher.Publish(Create.As(viewModel), nameof(ItemCategoryCollectionViewModel)); + } + } } return Task.CompletedTask; diff --git a/Bitvault/AggerateContainerItemViewModelHandler.cs b/Bitvault/AggerateContainerItemViewModelHandler.cs index d0fe6dc..d29935f 100644 --- a/Bitvault/AggerateContainerItemViewModelHandler.cs +++ b/Bitvault/AggerateContainerItemViewModelHandler.cs @@ -37,7 +37,7 @@ public class AggerateContainerItemViewModelHandler(IMediator mediator, valueStore.Set(item); cache.Add(item); - publisher.Publish(Create.As(viewModel), nameof(ContainerItemCollectionViewModel)); + publisher.Publish(Create.As(viewModel), nameof(ItemCollectionViewModel)); } selected = false; diff --git a/Bitvault/ContainerCategoryCollectionViewModel.cs b/Bitvault/ContainerCategoryCollectionViewModel.cs deleted file mode 100644 index 10ed077..0000000 --- a/Bitvault/ContainerCategoryCollectionViewModel.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Toolkit.Foundation; - -namespace Bitvault; - -[Aggerate(nameof(ContainerCategoryCollectionViewModel))] -public partial class ContainerCategoryCollectionViewModel : - ObservableCollection -{ - public ContainerCategoryCollectionViewModel(IServiceProvider provider, - IServiceFactory factory, - IMediator mediator, - IPublisher publisher, - ISubscription subscriber, - IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer) - { - - } -} diff --git a/Bitvault/ContainerFactory.cs b/Bitvault/ContainerFactory.cs index eb367c6..42740e6 100644 --- a/Bitvault/ContainerFactory.cs +++ b/Bitvault/ContainerFactory.cs @@ -7,7 +7,7 @@ public class ContainerFactory(IComponentFactory componentFactory) : { public IComponentHost? Create(string name) { - if (componentFactory.Create($"Vault:{name}", + if (componentFactory.Create($"Locker:{name}", new ContainerConfiguration { Name = name }) is IComponentHost host) { return host; diff --git a/Bitvault/FilterContainerNavigationViewModel.cs b/Bitvault/FilterContainerNavigationViewModel.cs index 4722b79..2398a70 100644 --- a/Bitvault/FilterContainerNavigationViewModel.cs +++ b/Bitvault/FilterContainerNavigationViewModel.cs @@ -37,5 +37,5 @@ public partial class FilterContainerNavigationViewModel : Observable, [RelayCommand] public void Invoke() => Publisher.Publish(Notify.As(new Filter(Filter)), - nameof(ContainerItemCollectionViewModel)); + nameof(ItemCollectionViewModel)); } \ No newline at end of file diff --git a/Bitvault/ItemCategoryCollectionViewModel.cs b/Bitvault/ItemCategoryCollectionViewModel.cs new file mode 100644 index 0000000..ecf0b5e --- /dev/null +++ b/Bitvault/ItemCategoryCollectionViewModel.cs @@ -0,0 +1,17 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using Toolkit.Foundation; + +namespace Bitvault; +[Aggerate(nameof(ItemCategoryCollectionViewModel))] +public partial class ItemCategoryCollectionViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscription subscriber, + IDisposer disposer, + IContentTemplate template) : + ObservableCollection(provider, factory, mediator, publisher, subscriber, disposer) +{ + [ObservableProperty] + private IContentTemplate template = template; +} diff --git a/Bitvault/ItemCategoryNavigationViewModel.cs b/Bitvault/ItemCategoryNavigationViewModel.cs new file mode 100644 index 0000000..e40ebec --- /dev/null +++ b/Bitvault/ItemCategoryNavigationViewModel.cs @@ -0,0 +1,17 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using Toolkit.Foundation; + +namespace Bitvault; + +public partial class ItemCategoryNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscription subscriber, + IDisposer disposer, + string name) : + Observable(provider, factory, mediator, publisher, subscriber, disposer) +{ + [ObservableProperty] + private string name = name; +} diff --git a/Bitvault/ContainerItemCollectionViewModel.cs b/Bitvault/ItemCollectionViewModel.cs similarity index 89% rename from Bitvault/ContainerItemCollectionViewModel.cs rename to Bitvault/ItemCollectionViewModel.cs index dfbed70..bc6672b 100644 --- a/Bitvault/ContainerItemCollectionViewModel.cs +++ b/Bitvault/ItemCollectionViewModel.cs @@ -2,15 +2,15 @@ namespace Bitvault; -[Aggerate(nameof(ContainerItemCollectionViewModel))] -public partial class ContainerItemCollectionViewModel : +[Aggerate(nameof(ItemCollectionViewModel))] +public partial class ItemCollectionViewModel : ObservableCollection, INotificationHandler>, INotificationHandler> { private ContainerViewModelConfiguration configuration; - public ContainerItemCollectionViewModel(IServiceProvider provider, + public ItemCollectionViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, diff --git a/Bitvault/SearchContainerActionViewModel.cs b/Bitvault/SearchContainerActionViewModel.cs index c8e28e8..ef86695 100644 --- a/Bitvault/SearchContainerActionViewModel.cs +++ b/Bitvault/SearchContainerActionViewModel.cs @@ -17,5 +17,5 @@ public partial class SearchContainerActionViewModel(IServiceProvider provider, [RelayCommand] public void Invoke() => Publisher.Publish(Notify.As(new Search(Value)), - nameof(ContainerItemCollectionViewModel)); + nameof(ItemCollectionViewModel)); } \ No newline at end of file