From bd51de3245de7579adcf2a5612437896f2985d54 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Wed, 10 Jul 2024 15:21:02 +0100 Subject: [PATCH] break wallet navigation off into seperate view --- Wallet.Avalonia/App.axaml.cs | 12 +- .../ItemCategoryCollectionView.axaml.cs | 10 - ...temCategoryNavigationCollectionView.axaml} | 4 +- ...mCategoryNavigationCollectionView.axaml.cs | 10 + Wallet.Avalonia/ItemCollectionView.axaml.cs | 18 -- ...aml => ItemNavigationCollectionView.axaml} | 4 +- .../ItemNavigationCollectionView.axaml.cs | 9 + Wallet.Avalonia/MainView.axaml | 186 +++--------------- Wallet.Avalonia/Wallet.Avalonia.csproj | 8 +- .../WalletNavigationCollectionView.axaml | 146 ++++++++++++++ .../WalletNavigationCollectionView.axaml.cs | 9 + ...mCategoryNavigationCollectionViewModel.cs} | 4 +- .../ItemCategoryViewModelActivatedHandler.cs | 2 +- Wallet/ItemCreatedHandler.cs | 2 +- Wallet/ItemModifiedHandler.cs | 2 +- ... ItemNavigationCollectionConfiguration.cs} | 2 +- ...s => ItemNavigationCollectionViewModel.cs} | 18 +- ...ionCollectionViewModelActivatedHandler.cs} | 10 +- Wallet/MainViewModel.cs | 19 +- Wallet/SearchWalletActionViewModel.cs | 2 +- Wallet/WalletActivatedHandler.cs | 2 +- Wallet/WalletNavigationCollectionViewModel.cs | 33 ++++ ...onCollectionViewModelActivationHandler.cs} | 10 +- Wallet/WalletNavigationViewModel.cs | 12 +- 24 files changed, 298 insertions(+), 236 deletions(-) delete mode 100644 Wallet.Avalonia/ItemCategoryCollectionView.axaml.cs rename Wallet.Avalonia/{ItemCategoryCollectionView.axaml => ItemCategoryNavigationCollectionView.axaml} (83%) create mode 100644 Wallet.Avalonia/ItemCategoryNavigationCollectionView.axaml.cs delete mode 100644 Wallet.Avalonia/ItemCollectionView.axaml.cs rename Wallet.Avalonia/{ItemCollectionView.axaml => ItemNavigationCollectionView.axaml} (92%) create mode 100644 Wallet.Avalonia/ItemNavigationCollectionView.axaml.cs create mode 100644 Wallet.Avalonia/WalletNavigationCollectionView.axaml create mode 100644 Wallet.Avalonia/WalletNavigationCollectionView.axaml.cs rename Wallet/{ItemCategoryCollectionViewModel.cs => ItemCategoryNavigationCollectionViewModel.cs} (83%) rename Wallet/{ItemCollectionConfiguration.cs => ItemNavigationCollectionConfiguration.cs} (68%) rename Wallet/{ItemCollectionViewModel.cs => ItemNavigationCollectionViewModel.cs} (78%) rename Wallet/{ItemCollectionViewModelActivatedHandler.cs => ItemNavigationCollectionViewModelActivatedHandler.cs} (86%) create mode 100644 Wallet/WalletNavigationCollectionViewModel.cs rename Wallet/{MainViewModelActivationHandler.cs => WalletNavigationCollectionViewModelActivationHandler.cs} (82%) diff --git a/Wallet.Avalonia/App.axaml.cs b/Wallet.Avalonia/App.axaml.cs index 72836af..f36058c 100644 --- a/Wallet.Avalonia/App.axaml.cs +++ b/Wallet.Avalonia/App.axaml.cs @@ -136,18 +136,18 @@ public partial class App : Application services.AddTemplate("OpenWallet"); - services.AddScoped(); + services.AddScoped(); services.AddTemplate("Wallet"); - services.AddTemplate("ItemCollection"); + services.AddTemplate("ItemCollection"); - services.AddHandler(); + services.AddHandler(); services.AddTemplate("WalletHeader"); services.AddTemplate(); services.AddTemplate(); - services.AddTemplate("ItemCategoryCollection"); + services.AddTemplate("ItemCategoryCollection"); services.AddTemplate(); services.AddHandler(); @@ -231,7 +231,9 @@ public partial class App : Application services.AddHandler(); services.AddTemplate("Main"); - services.AddHandler(); + services.AddHandler(); + + services.AddTemplate("Wallets"); services.AddTransient(); diff --git a/Wallet.Avalonia/ItemCategoryCollectionView.axaml.cs b/Wallet.Avalonia/ItemCategoryCollectionView.axaml.cs deleted file mode 100644 index abbf9ef..0000000 --- a/Wallet.Avalonia/ItemCategoryCollectionView.axaml.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Avalonia.Controls; - -namespace Wallet.Avalonia; - -public partial class ItemCategoryCollectionView : - UserControl -{ - public ItemCategoryCollectionView() => - InitializeComponent(); -} diff --git a/Wallet.Avalonia/ItemCategoryCollectionView.axaml b/Wallet.Avalonia/ItemCategoryNavigationCollectionView.axaml similarity index 83% rename from Wallet.Avalonia/ItemCategoryCollectionView.axaml rename to Wallet.Avalonia/ItemCategoryNavigationCollectionView.axaml index 4e08e10..77febf3 100644 --- a/Wallet.Avalonia/ItemCategoryCollectionView.axaml +++ b/Wallet.Avalonia/ItemCategoryNavigationCollectionView.axaml @@ -1,9 +1,9 @@ + x:DataType="vm:ItemCategoryNavigationCollectionViewModel"> + InitializeComponent(); +} diff --git a/Wallet.Avalonia/ItemCollectionView.axaml.cs b/Wallet.Avalonia/ItemCollectionView.axaml.cs deleted file mode 100644 index 4ae55b3..0000000 --- a/Wallet.Avalonia/ItemCollectionView.axaml.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Avalonia.Controls; - -namespace Wallet.Avalonia; - -public partial class ItemCollectionView : - UserControl -{ - public ItemCollectionView() - { - InitializeComponent(); - - foo.SelectionChanged += Foo_SelectionChanged; - } - - private void Foo_SelectionChanged(object? sender, SelectionChangedEventArgs e) - { - } -} diff --git a/Wallet.Avalonia/ItemCollectionView.axaml b/Wallet.Avalonia/ItemNavigationCollectionView.axaml similarity index 92% rename from Wallet.Avalonia/ItemCollectionView.axaml rename to Wallet.Avalonia/ItemNavigationCollectionView.axaml index f584df7..cd4b07f 100644 --- a/Wallet.Avalonia/ItemCollectionView.axaml +++ b/Wallet.Avalonia/ItemNavigationCollectionView.axaml @@ -1,9 +1,9 @@ + x:DataType="vm:ItemNavigationCollectionViewModel"> diff --git a/Wallet.Avalonia/ItemNavigationCollectionView.axaml.cs b/Wallet.Avalonia/ItemNavigationCollectionView.axaml.cs new file mode 100644 index 0000000..2024c76 --- /dev/null +++ b/Wallet.Avalonia/ItemNavigationCollectionView.axaml.cs @@ -0,0 +1,9 @@ +using Avalonia.Controls; + +namespace Wallet.Avalonia; + +public partial class ItemNavigationCollectionView : + UserControl +{ + public ItemNavigationCollectionView() => InitializeComponent(); +} diff --git a/Wallet.Avalonia/MainView.axaml b/Wallet.Avalonia/MainView.axaml index 4679b8f..3d9ff7d 100644 --- a/Wallet.Avalonia/MainView.axaml +++ b/Wallet.Avalonia/MainView.axaml @@ -10,8 +10,34 @@ FooterMenuItemsSource="{Binding Footer}" IsSettingsVisible="False" MenuItemTemplate="{Binding Template}" - MenuItemsSource="{Binding #ListBox.SelectedItem}"> - + SelectedItem="{Binding SelectedItem}"> + + + + + + + + + + + + + + 0 + 1,0,0,0 + + + + + + + + + + + + diff --git a/Wallet.Avalonia/Wallet.Avalonia.csproj b/Wallet.Avalonia/Wallet.Avalonia.csproj index 830b849..2f33280 100644 --- a/Wallet.Avalonia/Wallet.Avalonia.csproj +++ b/Wallet.Avalonia/Wallet.Avalonia.csproj @@ -50,11 +50,11 @@ ItemCategoryNavigationView.axaml - - ItemCategoryCollectionView.axaml + + ItemCategoryNavigationCollectionView.axaml - - ItemCollectionView.axaml + + ItemNavigationCollectionView.axaml CreateItemNavigationView.axaml diff --git a/Wallet.Avalonia/WalletNavigationCollectionView.axaml b/Wallet.Avalonia/WalletNavigationCollectionView.axaml new file mode 100644 index 0000000..5be263e --- /dev/null +++ b/Wallet.Avalonia/WalletNavigationCollectionView.axaml @@ -0,0 +1,146 @@ + + + + + 40 + 40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wallet.Avalonia/WalletNavigationCollectionView.axaml.cs b/Wallet.Avalonia/WalletNavigationCollectionView.axaml.cs new file mode 100644 index 0000000..ae64aaf --- /dev/null +++ b/Wallet.Avalonia/WalletNavigationCollectionView.axaml.cs @@ -0,0 +1,9 @@ +using Avalonia.Controls; + +namespace Wallet.Avalonia; + +public partial class WalletNavigationCollectionView : + UserControl +{ + public WalletNavigationCollectionView() => InitializeComponent(); +} diff --git a/Wallet/ItemCategoryCollectionViewModel.cs b/Wallet/ItemCategoryNavigationCollectionViewModel.cs similarity index 83% rename from Wallet/ItemCategoryCollectionViewModel.cs rename to Wallet/ItemCategoryNavigationCollectionViewModel.cs index 27ef536..56fc66e 100644 --- a/Wallet/ItemCategoryCollectionViewModel.cs +++ b/Wallet/ItemCategoryNavigationCollectionViewModel.cs @@ -3,8 +3,8 @@ using Toolkit.Foundation; namespace Wallet; -[Notification(typeof(CreateEventArgs), nameof(ItemCategoryCollectionViewModel))] -public partial class ItemCategoryCollectionViewModel(IServiceProvider provider, +[Notification(typeof(CreateEventArgs), nameof(ItemCategoryNavigationCollectionViewModel))] +public partial class ItemCategoryNavigationCollectionViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, diff --git a/Wallet/ItemCategoryViewModelActivatedHandler.cs b/Wallet/ItemCategoryViewModelActivatedHandler.cs index ebfec08..02fa5f8 100644 --- a/Wallet/ItemCategoryViewModelActivatedHandler.cs +++ b/Wallet/ItemCategoryViewModelActivatedHandler.cs @@ -16,7 +16,7 @@ public class ItemCategoryViewModelActivatedHandler(IItemConfigurationCollection configuration.Key, selected) is ItemCategoryNavigationViewModel viewModel) { - publisher.Publish(Create.As(viewModel), nameof(ItemCategoryCollectionViewModel)); + publisher.Publish(Create.As(viewModel), nameof(ItemCategoryNavigationCollectionViewModel)); selected = false; } } diff --git a/Wallet/ItemCreatedHandler.cs b/Wallet/ItemCreatedHandler.cs index 20f371c..923ff9a 100644 --- a/Wallet/ItemCreatedHandler.cs +++ b/Wallet/ItemCreatedHandler.cs @@ -29,7 +29,7 @@ public class ItemCreatedHandler(IServiceProvider serviceProvider, decoratorService.Set(cachedItem); publisher.Publish(Insert.As(index, viewModel), - nameof(ItemCollectionViewModel)); + nameof(ItemNavigationCollectionViewModel)); } } diff --git a/Wallet/ItemModifiedHandler.cs b/Wallet/ItemModifiedHandler.cs index ec184f4..bce1bee 100644 --- a/Wallet/ItemModifiedHandler.cs +++ b/Wallet/ItemModifiedHandler.cs @@ -29,7 +29,7 @@ public class ItemModifiedHandler(IServiceProvider serviceProvider, decoratorService.Set(newItem); publisher.Publish(MoveTo.As(oldIndex, newIndex), - nameof(ItemCollectionViewModel)); + nameof(ItemNavigationCollectionViewModel)); } } diff --git a/Wallet/ItemCollectionConfiguration.cs b/Wallet/ItemNavigationCollectionConfiguration.cs similarity index 68% rename from Wallet/ItemCollectionConfiguration.cs rename to Wallet/ItemNavigationCollectionConfiguration.cs index fd9b854..d9119bb 100644 --- a/Wallet/ItemCollectionConfiguration.cs +++ b/Wallet/ItemNavigationCollectionConfiguration.cs @@ -1,6 +1,6 @@ namespace Wallet; -public record ItemCollectionConfiguration +public record ItemNavigationCollectionConfiguration { public string? Filter { get; set; } = "All"; diff --git a/Wallet/ItemCollectionViewModel.cs b/Wallet/ItemNavigationCollectionViewModel.cs similarity index 78% rename from Wallet/ItemCollectionViewModel.cs rename to Wallet/ItemNavigationCollectionViewModel.cs index 84cbdd0..4c6bc24 100644 --- a/Wallet/ItemCollectionViewModel.cs +++ b/Wallet/ItemNavigationCollectionViewModel.cs @@ -3,11 +3,11 @@ using Toolkit.Foundation; namespace Wallet; -[Notification(typeof(CreateEventArgs), nameof(ItemCollectionViewModel))] -[Notification(typeof(InsertEventArgs), nameof(ItemCollectionViewModel))] -[Notification(typeof(MoveToEventArgs), nameof(ItemCollectionViewModel))] -[Notification(typeof(NotifyEventArgs>), nameof(ItemCollectionViewModel))] -public partial class ItemCollectionViewModel : +[Notification(typeof(CreateEventArgs), nameof(ItemNavigationCollectionViewModel))] +[Notification(typeof(InsertEventArgs), nameof(ItemNavigationCollectionViewModel))] +[Notification(typeof(MoveToEventArgs), nameof(ItemNavigationCollectionViewModel))] +[Notification(typeof(NotifyEventArgs>), nameof(ItemNavigationCollectionViewModel))] +public partial class ItemNavigationCollectionViewModel : ObservableCollection, INotificationHandler>, INotificationHandler>>, @@ -16,9 +16,9 @@ public partial class ItemCollectionViewModel : [ObservableProperty] public string? named; - private ItemCollectionConfiguration configuration; + private ItemNavigationCollectionConfiguration configuration; - public ItemCollectionViewModel(IServiceProvider provider, + public ItemNavigationCollectionViewModel(IServiceProvider provider, IServiceFactory factory, IMediator mediator, IPublisher publisher, @@ -26,7 +26,7 @@ public partial class ItemCollectionViewModel : IDisposer disposer, IContentTemplate template, NamedComponent named, - ItemCollectionConfiguration configuration, + ItemNavigationCollectionConfiguration configuration, string? filter = null) : base(provider, factory, mediator, publisher, subscriber, disposer) { Template = template; @@ -70,5 +70,5 @@ public partial class ItemCollectionViewModel : } protected override ActivationBuilder ActivationBuilder() => - new(Activation.As(configuration)); + new(Activation.As(configuration)); } diff --git a/Wallet/ItemCollectionViewModelActivatedHandler.cs b/Wallet/ItemNavigationCollectionViewModelActivatedHandler.cs similarity index 86% rename from Wallet/ItemCollectionViewModelActivatedHandler.cs rename to Wallet/ItemNavigationCollectionViewModelActivatedHandler.cs index a2041dc..8f848c9 100644 --- a/Wallet/ItemCollectionViewModelActivatedHandler.cs +++ b/Wallet/ItemNavigationCollectionViewModelActivatedHandler.cs @@ -3,16 +3,16 @@ using Toolkit.Foundation; namespace Wallet; -public class ItemCollectionViewModelActivatedHandler(IMediator mediator, +public class ItemNavigationCollectionViewModelActivatedHandler(IMediator mediator, IServiceProvider serviceProvider, ICache> cache, IPublisher publisher) : - INotificationHandler> + INotificationHandler> { public async Task Handle(ActivationEventArgs args) + ItemNavigationCollectionConfiguration> args) { - if (args.Value is ItemCollectionConfiguration configuration) + if (args.Value is ItemNavigationCollectionConfiguration configuration) { cache.Clear(); bool selected = true; @@ -40,7 +40,7 @@ public class ItemCollectionViewModelActivatedHandler(IMediator mediator, decoratorService.Set(item); cache.Add(item); - publisher.Publish(Create.As(viewModel), nameof(ItemCollectionViewModel)); + publisher.Publish(Create.As(viewModel), nameof(ItemNavigationCollectionViewModel)); } selected = false; diff --git a/Wallet/MainViewModel.cs b/Wallet/MainViewModel.cs index cd28a9f..81c0900 100644 --- a/Wallet/MainViewModel.cs +++ b/Wallet/MainViewModel.cs @@ -1,14 +1,11 @@ -using Avalonia.Xaml.Interactions.Core; -using CommunityToolkit.Mvvm.ComponentModel; -using CommunityToolkit.Mvvm.Input; +using CommunityToolkit.Mvvm.ComponentModel; using Toolkit.Foundation; namespace Wallet; -[Notification(typeof(CreateEventArgs), nameof(MainViewModel))] -[Notification(typeof(InsertEventArgs), nameof(MainViewModel))] public partial class MainViewModel : - ObservableCollection + ObservableCollection, + INotificationHandler> { [ObservableProperty] private FooterViewModel footer; @@ -27,4 +24,14 @@ public partial class MainViewModel : } public IContentTemplate Template { get; set; } + + public Task Handle(SelectionEventArgs args) + { + if (args.Sender is not null) + { + SelectedItem = null; + } + + return Task.CompletedTask; + } } \ No newline at end of file diff --git a/Wallet/SearchWalletActionViewModel.cs b/Wallet/SearchWalletActionViewModel.cs index 7996095..f1bed6e 100644 --- a/Wallet/SearchWalletActionViewModel.cs +++ b/Wallet/SearchWalletActionViewModel.cs @@ -16,5 +16,5 @@ public partial class SearchWalletActionViewModel(IServiceProvider provider, [RelayCommand] private void Invoke() => Publisher.Publish(Notify.As(new Search(Value)), - nameof(ItemCollectionViewModel)); + nameof(ItemNavigationCollectionViewModel)); } \ No newline at end of file diff --git a/Wallet/WalletActivatedHandler.cs b/Wallet/WalletActivatedHandler.cs index f4efb03..636932a 100644 --- a/Wallet/WalletActivatedHandler.cs +++ b/Wallet/WalletActivatedHandler.cs @@ -48,7 +48,7 @@ public class WalletActivatedHandler(IWalletHostCollection wallets, descriptor.Name, profileImage?.Value, false) is WalletNavigationViewModel viewModel) { - publisher.Publish(Insert.As(index, viewModel), + publisher.Publish(Insert.As(index, viewModel), nameof(MainViewModel)); } } diff --git a/Wallet/WalletNavigationCollectionViewModel.cs b/Wallet/WalletNavigationCollectionViewModel.cs new file mode 100644 index 0000000..e5e19d4 --- /dev/null +++ b/Wallet/WalletNavigationCollectionViewModel.cs @@ -0,0 +1,33 @@ +using Toolkit.Foundation; + +namespace Wallet; + +[Notification(typeof(CreateEventArgs), nameof(WalletNavigationCollectionViewModel))] +[Notification(typeof(InsertEventArgs), nameof(WalletNavigationCollectionViewModel))] +public partial class WalletNavigationCollectionViewModel : + ObservableCollection, + INotificationHandler> +{ + public WalletNavigationCollectionViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer, + IContentTemplate template) : base(provider, factory, mediator, publisher, subscriber, disposer) + { + Template = template; + } + + public IContentTemplate Template { get; set; } + + public Task Handle(SelectionEventArgs args) + { + if (args.Sender is not null) + { + SelectedItem = null; + } + + return Task.CompletedTask; + } +} diff --git a/Wallet/MainViewModelActivationHandler.cs b/Wallet/WalletNavigationCollectionViewModelActivationHandler.cs similarity index 82% rename from Wallet/MainViewModelActivationHandler.cs rename to Wallet/WalletNavigationCollectionViewModelActivationHandler.cs index 59f75b9..6772dbb 100644 --- a/Wallet/MainViewModelActivationHandler.cs +++ b/Wallet/WalletNavigationCollectionViewModelActivationHandler.cs @@ -3,11 +3,11 @@ using Toolkit.Foundation; namespace Wallet; -public class MainViewModelActivationHandler(IPublisher publisher, +public class WalletNavigationCollectionViewModelActivationHandler(IPublisher publisher, IWalletHostCollection Wallets) : - INotificationHandler> + INotificationHandler> { - public Task Handle(ActivationEventArgs args) + public Task Handle(ActivationEventArgs args) { bool selected = true; @@ -42,8 +42,8 @@ public class MainViewModelActivationHandler(IPublisher publisher, if (factory.Create(args => args.Initialize(), configuration.Name, profileImage?.Value ?? null, selected) is WalletNavigationViewModel viewModel) { - publisher.Publish(Create.As(viewModel), - nameof(MainViewModel)); + publisher.Publish(Create.As(viewModel), + nameof(WalletNavigationCollectionViewModel)); selected = false; } diff --git a/Wallet/WalletNavigationViewModel.cs b/Wallet/WalletNavigationViewModel.cs index 9ae02c8..72c6f76 100644 --- a/Wallet/WalletNavigationViewModel.cs +++ b/Wallet/WalletNavigationViewModel.cs @@ -6,7 +6,7 @@ namespace Wallet; public partial class WalletNavigationViewModel : ObservableCollection, - IMainNavigationViewModel, + IWalletNavigationViewModel, INotificationHandler>, INotificationHandler>, INotificationHandler>, @@ -52,11 +52,11 @@ public partial class WalletNavigationViewModel : public Task Handle(OpenedEventArgs args) { - Add(); - Add("All", 0); - Add("Favourites", 0); - Add("Archive", 0); - Add("Categories", 0); + //Add(); + //Add("All", 0); + //Add("Favourites", 0); + //Add("Archive", 0); + //Add("Categories", 0); IsOpened = true; Publisher.Publish(Changed.As());