From 2ec4be1b501dd11964dbb06d511e28188cc6b06f Mon Sep 17 00:00:00 2001 From: Shaun Lawrence Date: Wed, 1 Nov 2023 22:44:22 +0000 Subject: [PATCH] PopupService (#1165) * Added initial PopupService implementation * Tweaks to allowing parameters to be passed to the view model behind a popup * Tidy up xml docs * Some unit tests * Only create a view model instance if the BindingContext hasn't been set * Remove the reliance on IQueryAttributable in favour of our own interface * A better way to find the current Page * Readonly dictionary and some safety checking around expected BindingContext types. * A different attempt at passing parameters without an explicit interface * Update src/CommunityToolkit.Maui/PopupService.cs Co-authored-by: Pedro Jesus * Now is a time for test * Remove unnecessary changes * Sample to perform a long running process * Provide ability to close popup from within popup view model * Prevent unnecessary instance being created * Refactor `CurrentPage`, Add Default Constructor, Refactor `ValidateBindingContext` * Update Unit Tests --------- Co-authored-by: Pedro Jesus Co-authored-by: Brandon Minnick <13558917+brminnick@users.noreply.github.com> --- .../MauiProgram.cs | 5 +- .../Pages/Views/Popup/MultiplePopupPage.xaml | 6 +- .../Popup/CsharpBindingPopupViewModel.cs | 7 +- .../Views/Popup/MultiplePopupViewModel.cs | 27 +- .../Views/Popup/UpdatingPopupViewModel.cs | 49 ++++ .../Views/Popups/UpdatingPopup.xaml | 55 ++++ .../Views/Popups/UpdatingPopup.xaml.cs | 20 ++ .../IPopupService.cs | 54 ++++ .../BaseHandlerTest.cs | 14 +- .../Mocks/MockPageViewModel.cs | 1 + .../Mocks/MockPopupHandler.cs | 9 +- .../PopupServiceTests.cs | 276 ++++++++++++++++++ .../AppBuilderExtensions.shared.cs | 2 + .../ServiceCollectionExtensions.shared.cs | 20 ++ src/CommunityToolkit.Maui/PopupService.cs | 149 ++++++++++ 15 files changed, 682 insertions(+), 12 deletions(-) create mode 100644 samples/CommunityToolkit.Maui.Sample/ViewModels/Views/Popup/UpdatingPopupViewModel.cs create mode 100644 samples/CommunityToolkit.Maui.Sample/Views/Popups/UpdatingPopup.xaml create mode 100644 samples/CommunityToolkit.Maui.Sample/Views/Popups/UpdatingPopup.xaml.cs create mode 100644 src/CommunityToolkit.Maui.Core/IPopupService.cs create mode 100644 src/CommunityToolkit.Maui.UnitTests/PopupServiceTests.cs create mode 100644 src/CommunityToolkit.Maui/PopupService.cs diff --git a/samples/CommunityToolkit.Maui.Sample/MauiProgram.cs b/samples/CommunityToolkit.Maui.Sample/MauiProgram.cs index 3cfe62c435..175a32efc7 100644 --- a/samples/CommunityToolkit.Maui.Sample/MauiProgram.cs +++ b/samples/CommunityToolkit.Maui.Sample/MauiProgram.cs @@ -195,8 +195,9 @@ static void RegisterViewsAndViewModels(in IServiceCollection services) services.AddTransientWithShellRoute(); // Add Popups - services.AddTransient(); - services.AddTransient(); + services.AddTransientPopup(); + services.AddTransientPopup(); + services.AddTransientPopup(); } static void RegisterEssentials(in IServiceCollection services) diff --git a/samples/CommunityToolkit.Maui.Sample/Pages/Views/Popup/MultiplePopupPage.xaml b/samples/CommunityToolkit.Maui.Sample/Pages/Views/Popup/MultiplePopupPage.xaml index 31013613d2..d05ab27ce4 100644 --- a/samples/CommunityToolkit.Maui.Sample/Pages/Views/Popup/MultiplePopupPage.xaml +++ b/samples/CommunityToolkit.Maui.Sample/Pages/Views/Popup/MultiplePopupPage.xaml @@ -1,4 +1,4 @@ - -