From 2a0c68de16650d1ec198d113a8f0754e6c538547 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Sun, 26 May 2024 23:29:50 +0100 Subject: [PATCH] Parameter improvements --- ...AddItemContentNavigationViewModel.axaml.cs | 8 --- ...odel.axaml => AddItemNavigationView.axaml} | 2 +- .../AddItemNavigationView.axaml.cs | 8 +++ Bitvault.Avalonia/AllNavigationView.axaml | 9 ++-- Bitvault.Avalonia/App.axaml.cs | 8 ++- Bitvault.Avalonia/ArchiveNavigationView.axaml | 10 ++-- Bitvault.Avalonia/Bitvault.Avalonia.csproj | 10 +++- .../ContainerCategoryCollectionView.axaml | 20 +++++++ .../ContainerCategoryCollectionView.axaml.cs | 12 +++++ .../ContainerItemCollectionView.axaml | 20 +++++++ .../ContainerItemCollectionView.axaml.cs | 10 ++++ Bitvault.Avalonia/ContainerView.axaml | 28 +++++----- Bitvault.Avalonia/CreateItemActionView.axaml | 11 ++-- Bitvault.Avalonia/ItemNavigationView.axaml | 20 +++---- Bitvault.Avalonia/StarredNavigationView.axaml | 8 +-- Bitvault/AddItemContentNavigationViewModel.cs | 17 ------ Bitvault/AddItemNavigationViewModel.cs | 11 ++++ ...gerateContainerCategoryViewModelHandler.cs | 21 ++++++++ ... AggerateContainerItemViewModelHandler.cs} | 8 +-- Bitvault/CommandCollection.cs | 7 +-- .../ContainerCategoryCollectionViewModel.cs | 18 +++++++ Bitvault/ContainerItemCollectionViewModel.cs | 54 +++++++++++++++++++ Bitvault/ContainerViewModel.cs | 44 +++------------ .../FilterContainerNavigationViewModel.cs | 2 +- Bitvault/ItemContentViewModel.cs | 2 +- Bitvault/ItemHeaderViewModel.cs | 14 ++--- Bitvault/SearchContainerActionViewModel.cs | 2 +- 27 files changed, 248 insertions(+), 136 deletions(-) delete mode 100644 Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml.cs rename Bitvault.Avalonia/{AddItemContentNavigationViewModel.axaml => AddItemNavigationView.axaml} (76%) create mode 100644 Bitvault.Avalonia/AddItemNavigationView.axaml.cs create mode 100644 Bitvault.Avalonia/ContainerCategoryCollectionView.axaml create mode 100644 Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs create mode 100644 Bitvault.Avalonia/ContainerItemCollectionView.axaml create mode 100644 Bitvault.Avalonia/ContainerItemCollectionView.axaml.cs delete mode 100644 Bitvault/AddItemContentNavigationViewModel.cs create mode 100644 Bitvault/AddItemNavigationViewModel.cs create mode 100644 Bitvault/AggerateContainerCategoryViewModelHandler.cs rename Bitvault/{AggerateContainerViewModelHandler.cs => AggerateContainerItemViewModelHandler.cs} (92%) create mode 100644 Bitvault/ContainerCategoryCollectionViewModel.cs create mode 100644 Bitvault/ContainerItemCollectionViewModel.cs diff --git a/Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml.cs b/Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml.cs deleted file mode 100644 index 94f4907..0000000 --- a/Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Avalonia.Controls; - -namespace Bitvault.Avalonia; - -public partial class AddItemContentNavigationView : UserControl -{ - public AddItemContentNavigationView() => InitializeComponent(); -} diff --git a/Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml b/Bitvault.Avalonia/AddItemNavigationView.axaml similarity index 76% rename from Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml rename to Bitvault.Avalonia/AddItemNavigationView.axaml index 808bd0e..0965e33 100644 --- a/Bitvault.Avalonia/AddItemContentNavigationViewModel.axaml +++ b/Bitvault.Avalonia/AddItemNavigationView.axaml @@ -1,5 +1,5 @@ diff --git a/Bitvault.Avalonia/AddItemNavigationView.axaml.cs b/Bitvault.Avalonia/AddItemNavigationView.axaml.cs new file mode 100644 index 0000000..b2e1b7c --- /dev/null +++ b/Bitvault.Avalonia/AddItemNavigationView.axaml.cs @@ -0,0 +1,8 @@ +using Avalonia.Controls; + +namespace Bitvault.Avalonia; + +public partial class AddItemNavigationView : UserControl +{ + public AddItemNavigationView() => InitializeComponent(); +} diff --git a/Bitvault.Avalonia/AllNavigationView.axaml b/Bitvault.Avalonia/AllNavigationView.axaml index fac82c2..5647b38 100644 --- a/Bitvault.Avalonia/AllNavigationView.axaml +++ b/Bitvault.Avalonia/AllNavigationView.axaml @@ -15,9 +15,7 @@ - - - + @@ -26,7 +24,10 @@ - + + + + diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index 3ebed38..6c64c34 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -87,11 +87,15 @@ public partial class App : Application services.AddScoped(); services.AddTemplate("Container"); - services.AddHandler(); + services.AddTemplate("ContentItemCollection"); services.AddTemplate(); services.AddTemplate("ContainerHeader"); + services.AddTemplate(); + services.AddTemplate("ContainerItemCategoryCollection"); + + services.AddHandler(); services.AddTemplate(); services.AddTemplate("Item"); @@ -109,7 +113,7 @@ public partial class App : Application services.AddTemplate(); services.AddTemplate(); - services.AddTemplate(); + services.AddTemplate(); services.AddScoped, ValueStore>(); diff --git a/Bitvault.Avalonia/ArchiveNavigationView.axaml b/Bitvault.Avalonia/ArchiveNavigationView.axaml index d906c60..18cc089 100644 --- a/Bitvault.Avalonia/ArchiveNavigationView.axaml +++ b/Bitvault.Avalonia/ArchiveNavigationView.axaml @@ -15,10 +15,8 @@ - - - - + + @@ -26,7 +24,9 @@ - + + + diff --git a/Bitvault.Avalonia/Bitvault.Avalonia.csproj b/Bitvault.Avalonia/Bitvault.Avalonia.csproj index 1c0c64d..3fd38a8 100644 --- a/Bitvault.Avalonia/Bitvault.Avalonia.csproj +++ b/Bitvault.Avalonia/Bitvault.Avalonia.csproj @@ -40,8 +40,14 @@ - - AddItemContentNavigationViewModel.axaml + + AddItemNavigationView.axaml + + + ContainerCategoryCollectionView.axaml + + + ContainerItemCollectionView.axaml CreateItemActionView.axaml diff --git a/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml b/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml new file mode 100644 index 0000000..1460496 --- /dev/null +++ b/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs b/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs new file mode 100644 index 0000000..d0e506b --- /dev/null +++ b/Bitvault.Avalonia/ContainerCategoryCollectionView.axaml.cs @@ -0,0 +1,12 @@ +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/ContainerItemCollectionView.axaml b/Bitvault.Avalonia/ContainerItemCollectionView.axaml new file mode 100644 index 0000000..c7e76bd --- /dev/null +++ b/Bitvault.Avalonia/ContainerItemCollectionView.axaml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/Bitvault.Avalonia/ContainerItemCollectionView.axaml.cs b/Bitvault.Avalonia/ContainerItemCollectionView.axaml.cs new file mode 100644 index 0000000..85a9f41 --- /dev/null +++ b/Bitvault.Avalonia/ContainerItemCollectionView.axaml.cs @@ -0,0 +1,10 @@ +using Avalonia.Controls; + +namespace Bitvault.Avalonia; + +public partial class ContainerItemCollectionView : + UserControl +{ + public ContainerItemCollectionView() => + InitializeComponent(); +} diff --git a/Bitvault.Avalonia/ContainerView.axaml b/Bitvault.Avalonia/ContainerView.axaml index e1e7dd8..e09ae2f 100644 --- a/Bitvault.Avalonia/ContainerView.axaml +++ b/Bitvault.Avalonia/ContainerView.axaml @@ -22,21 +22,17 @@ - - - - - + + + + + + + + + + + - + diff --git a/Bitvault.Avalonia/CreateItemActionView.axaml b/Bitvault.Avalonia/CreateItemActionView.axaml index f55fd1a..5aaecd4 100644 --- a/Bitvault.Avalonia/CreateItemActionView.axaml +++ b/Bitvault.Avalonia/CreateItemActionView.axaml @@ -28,14 +28,9 @@ - - - - - + + + diff --git a/Bitvault.Avalonia/ItemNavigationView.axaml b/Bitvault.Avalonia/ItemNavigationView.axaml index 4621ab3..def4e4f 100644 --- a/Bitvault.Avalonia/ItemNavigationView.axaml +++ b/Bitvault.Avalonia/ItemNavigationView.axaml @@ -20,12 +20,10 @@ Region="{Binding Named, StringFormat='{}{0}:Content'}" Route="Item" Scope="self"> - - - - - - + + + + @@ -34,12 +32,10 @@ Region="{Binding Named, StringFormat='{}{0}:Content'}" Route="Item" Scope="self"> - - - - - - + + + + diff --git a/Bitvault.Avalonia/StarredNavigationView.axaml b/Bitvault.Avalonia/StarredNavigationView.axaml index f76ecf1..49b533d 100644 --- a/Bitvault.Avalonia/StarredNavigationView.axaml +++ b/Bitvault.Avalonia/StarredNavigationView.axaml @@ -15,9 +15,7 @@ - - - + @@ -26,7 +24,9 @@ - + + + diff --git a/Bitvault/AddItemContentNavigationViewModel.cs b/Bitvault/AddItemContentNavigationViewModel.cs deleted file mode 100644 index 15289b7..0000000 --- a/Bitvault/AddItemContentNavigationViewModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Toolkit.Foundation; - -namespace Bitvault; - -public partial class AddItemContentNavigationViewModel : Observable, - IItemEntryViewModel -{ - public AddItemContentNavigationViewModel(IServiceProvider provider, - IServiceFactory factory, - IMediator mediator, - IPublisher publisher, - ISubscription subscriber, - IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer) - { - - } -} diff --git a/Bitvault/AddItemNavigationViewModel.cs b/Bitvault/AddItemNavigationViewModel.cs new file mode 100644 index 0000000..e4b6df2 --- /dev/null +++ b/Bitvault/AddItemNavigationViewModel.cs @@ -0,0 +1,11 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public partial class AddItemNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscription subscriber, + IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer), + IItemEntryViewModel; \ No newline at end of file diff --git a/Bitvault/AggerateContainerCategoryViewModelHandler.cs b/Bitvault/AggerateContainerCategoryViewModelHandler.cs new file mode 100644 index 0000000..9d556c0 --- /dev/null +++ b/Bitvault/AggerateContainerCategoryViewModelHandler.cs @@ -0,0 +1,21 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class AggerateContainerCategoryViewModelHandler(IServiceFactory serviceFactory, + IPublisher publisher) : + INotificationHandler> +{ + public Task Handle(AggerateEventArgs args) + { + if (serviceFactory.Create() + is ItemNavigationViewModel viewModel) + { + publisher.Publish(Create.As(viewModel), nameof(ContainerCategoryCollectionViewModel)); + } + + return Task.CompletedTask; + } +} diff --git a/Bitvault/AggerateContainerViewModelHandler.cs b/Bitvault/AggerateContainerItemViewModelHandler.cs similarity index 92% rename from Bitvault/AggerateContainerViewModelHandler.cs rename to Bitvault/AggerateContainerItemViewModelHandler.cs index a861c6e..d0fe6dc 100644 --- a/Bitvault/AggerateContainerViewModelHandler.cs +++ b/Bitvault/AggerateContainerItemViewModelHandler.cs @@ -3,11 +3,12 @@ using Toolkit.Foundation; namespace Bitvault; -public class AggerateContainerViewModelHandler(IMediator mediator, +public class AggerateContainerItemViewModelHandler(IMediator mediator, IServiceProvider serviceProvider, ICache cache, IPublisher publisher) : - INotificationHandler> + INotificationHandler> { public async Task Handle(AggerateEventArgs args) @@ -15,7 +16,6 @@ public class AggerateContainerViewModelHandler(IMediator mediator, if (args.Options is ContainerViewModelConfiguration configuration) { cache.Clear(); - var dd = cache; bool selected = true; if (await mediator.Handle, @@ -37,7 +37,7 @@ public class AggerateContainerViewModelHandler(IMediator mediator, valueStore.Set(item); cache.Add(item); - publisher.Publish(Create.As(viewModel), nameof(ContainerViewModel)); + publisher.Publish(Create.As(viewModel), nameof(ContainerItemCollectionViewModel)); } selected = false; diff --git a/Bitvault/CommandCollection.cs b/Bitvault/CommandCollection.cs index a7363df..36e4bb0 100644 --- a/Bitvault/CommandCollection.cs +++ b/Bitvault/CommandCollection.cs @@ -2,10 +2,7 @@ namespace Bitvault; -public class CommandCollection : - ReadOnlyCollection +public class CommandCollection(IList list) : + ReadOnlyCollection(list) { - public CommandCollection(IList list) : base(list) - { - } } \ No newline at end of file diff --git a/Bitvault/ContainerCategoryCollectionViewModel.cs b/Bitvault/ContainerCategoryCollectionViewModel.cs new file mode 100644 index 0000000..10ed077 --- /dev/null +++ b/Bitvault/ContainerCategoryCollectionViewModel.cs @@ -0,0 +1,18 @@ +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/ContainerItemCollectionViewModel.cs b/Bitvault/ContainerItemCollectionViewModel.cs new file mode 100644 index 0000000..dfbed70 --- /dev/null +++ b/Bitvault/ContainerItemCollectionViewModel.cs @@ -0,0 +1,54 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +[Aggerate(nameof(ContainerItemCollectionViewModel))] +public partial class ContainerItemCollectionViewModel : + ObservableCollection, + INotificationHandler>, + INotificationHandler> +{ + private ContainerViewModelConfiguration configuration; + + public ContainerItemCollectionViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscription subscriber, + IDisposer disposer, + IContentTemplate template, + ContainerViewModelConfiguration configuration, + string? filter = null) : base(provider, factory, mediator, publisher, subscriber, disposer) + { + Template = template; + this.configuration = configuration with { Filter = filter }; + } + + public IContentTemplate Template { get; set; } + + public Task Handle(NotifyEventArgs args) + { + if (args.Value is Filter filter) + { + configuration = configuration with { Filter = filter.Value }; + BeginAggregation(); + } + + return Task.CompletedTask; + } + + public Task Handle(NotifyEventArgs args) + { + if (args.Value is Search search) + { + configuration = configuration with { Query = search.Value }; + BeginAggregation(); + } + + return Task.CompletedTask; + } + + protected override IAggerate OnPrepareAggregation(object? key) => + Aggerate.With(configuration) + with { Key = key }; +} diff --git a/Bitvault/ContainerViewModel.cs b/Bitvault/ContainerViewModel.cs index bec174b..02a9ad8 100644 --- a/Bitvault/ContainerViewModel.cs +++ b/Bitvault/ContainerViewModel.cs @@ -3,55 +3,25 @@ using Toolkit.Foundation; namespace Bitvault; -[Aggerate(nameof(ContainerViewModel))] -public partial class ContainerViewModel : ObservableCollection, - INotificationHandler>, - INotificationHandler> +public partial class ContainerViewModel : + Observable { [ObservableProperty] private string named; + [ObservableProperty] + private string filter; public ContainerViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, ISubscription subscriber, IDisposer disposer, - IContentTemplate template, - ContainerViewModelConfiguration configuration, NamedComponent named, - string? filter = null) : base(provider, factory, mediator, publisher, subscriber, disposer) + string filter) : base(provider, factory, mediator, publisher, subscriber, disposer) { - Template = template; Named = $"{named}"; - - this.configuration = configuration with { Filter = filter }; - } - - private ContainerViewModelConfiguration configuration; - - public IContentTemplate Template { get; set; } - - public Task Handle(NotifyEventArgs args) - { - if (args.Value is Filter filter) - { - configuration = configuration with { Filter = filter.Value }; - BeginAggregation(); - } - - return Task.CompletedTask; - } - - public Task Handle(NotifyEventArgs args) - { - if (args.Value is Search search) - { - configuration = configuration with { Query = search.Value }; - BeginAggregation(); - } - - return Task.CompletedTask; + Filter = filter; } public override async Task OnActivated() @@ -65,6 +35,4 @@ public partial class ContainerViewModel : ObservableCollection()); await base.OnDeactivated(); } - protected override IAggerate OnPrepareAggregation(object? key) => - Aggerate.With(configuration) with { Key = key }; } \ No newline at end of file diff --git a/Bitvault/FilterContainerNavigationViewModel.cs b/Bitvault/FilterContainerNavigationViewModel.cs index 2e186a5..4722b79 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(ContainerViewModel)); + nameof(ContainerItemCollectionViewModel)); } \ No newline at end of file diff --git a/Bitvault/ItemContentViewModel.cs b/Bitvault/ItemContentViewModel.cs index 30c195d..cef2395 100644 --- a/Bitvault/ItemContentViewModel.cs +++ b/Bitvault/ItemContentViewModel.cs @@ -18,7 +18,7 @@ public partial class ItemContentViewModel : if (!immutable) { - Insert(); + Insert(); } } diff --git a/Bitvault/ItemHeaderViewModel.cs b/Bitvault/ItemHeaderViewModel.cs index c283ce0..4167c5b 100644 --- a/Bitvault/ItemHeaderViewModel.cs +++ b/Bitvault/ItemHeaderViewModel.cs @@ -15,13 +15,13 @@ public partial class ItemHeaderViewModel : Observable, private bool immutable; public ItemHeaderViewModel(IServiceProvider provider, - IServiceFactory factory, - IMediator mediator, - IPublisher publisher, - ISubscription subscriber, - IDisposer disposer, - bool immutable, - string? value = null) : base(provider, factory, mediator, publisher, subscriber, disposer, value) + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscription subscriber, + IDisposer disposer, + bool immutable, + string? value = null) : base(provider, factory, mediator, publisher, subscriber, disposer, value) { Immutable = immutable; Value = value; diff --git a/Bitvault/SearchContainerActionViewModel.cs b/Bitvault/SearchContainerActionViewModel.cs index b093cf0..c8e28e8 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(ContainerViewModel)); + nameof(ContainerItemCollectionViewModel)); } \ No newline at end of file