From a3d4a36f80cfab74dc169736aa98fdca5ea169a6 Mon Sep 17 00:00:00 2001 From: eriklimakc <erik.lima@knowcode.app> Date: Mon, 18 Nov 2024 17:27:14 +0000 Subject: [PATCH] chore: set unique route --- src/Uno.Extensions.Navigation.UI/Navigator.cs | 12 +++- .../Apps/Chefs/ChefsFavoriteRecipesModel.cs | 2 +- .../Apps/Chefs/ChefsFavoriteRecipesPage.xaml | 2 +- .../Navigation/Apps/Chefs/ChefsHomePage.xaml | 1 + .../Navigation/Apps/Chefs/ChefsHostInit.cs | 59 +++++++------------ .../Apps/Chefs/ChefsRecipeDetailsModel.cs | 11 +--- .../Navigation/Apps/Chefs/ChefsSearchModel.cs | 2 +- 7 files changed, 37 insertions(+), 52 deletions(-) diff --git a/src/Uno.Extensions.Navigation.UI/Navigator.cs b/src/Uno.Extensions.Navigation.UI/Navigator.cs index 00e6af4387..5aa42f94c2 100644 --- a/src/Uno.Extensions.Navigation.UI/Navigator.cs +++ b/src/Uno.Extensions.Navigation.UI/Navigator.cs @@ -154,13 +154,21 @@ await RedirectForDependsOn(request, rm) is { } dependsNavResponse) // where request needs to be sent to parent so that all child // regions receive the request) // Required for Test: Given_NavigationView.When_NavigationView - if (await CanNavigate(request.Route) && - !await ParentCanNavigate(request.Route)) + var canNavigate = await CanNavigate(request.Route); + //var parentCanNavigate = request.Route.Base == "ChefsRecipeDetails" ? false : await ParentCanNavigate(request.Route); + var parentCanNavigate = await ParentCanNavigate(request.Route); + if (canNavigate && + !parentCanNavigate) { if (Logger.IsEnabled(LogLevel.Trace)) Logger.LogTraceMessage($"No redirection - Navigator can handle request (and parent cannot)"); return default; } + //if (canNavigate) + //{ + // if (Logger.IsEnabled(LogLevel.Trace)) Logger.LogTraceMessage($"Navigator can handle request - navigating"); + // return default; + //} // If this is a back/close with no other path, then return // as if this navigator can handl it - it can't, so the request diff --git a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesModel.cs b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesModel.cs index 5a50c50c78..68dc9e10ff 100644 --- a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesModel.cs +++ b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesModel.cs @@ -6,6 +6,6 @@ public partial class ChefsFavoriteRecipesModel(INavigator navigator) { public async ValueTask NavigateToRecipeDetail() { - await navigator.NavigateRouteAsync(this, "ChefsFavoriteRecipeDetails", data: new ChefsRecipe { Name = "Favorite Page" }); + await navigator.NavigateRouteAsync(this, "/ChefsRoot/ChefsFavoriteRecipes/ChefsRecipeDetails", data: new ChefsRecipe { Name = "Favorite Page" }); } } diff --git a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesPage.xaml b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesPage.xaml index a5bae446ec..5650f8598b 100644 --- a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesPage.xaml +++ b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsFavoriteRecipesPage.xaml @@ -35,7 +35,7 @@ VerticalAlignment="Center" Text="All my recipes" /> <Button AutomationProperties.AutomationId="RecipeDetailsButton" - uen:Navigation.Request="ChefsFavoriteRecipeDetails" + uen:Navigation.Request="ChefsRecipeDetails" Content="Recipe Details" /> </Grid> <Grid uen:Region.Name="MyCookbooks" diff --git a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHomePage.xaml b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHomePage.xaml index f29cdd334f..988f49c4c4 100644 --- a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHomePage.xaml +++ b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHomePage.xaml @@ -18,6 +18,7 @@ <Button Command="{Binding NavigateToRecipeDetail}" Content="Recipe Details" /> <Button AutomationProperties.AutomationId="FavoriteRecipesButton" Command="{Binding NavigateToFavoriteRecipes}" Content="Favorite Recipes" /> <Button uen:Navigation.Request="ChefsSearch" Content="Search" /> + <Button uen:Navigation.Request="ChefsProfile" Content="Profile :D" /> <Button uen:Navigation.Request="ChefsNotifications" Content="Notifications" /> </StackPanel> </Grid> diff --git a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHostInit.cs b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHostInit.cs index 7f4a725781..620f3a581d 100644 --- a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHostInit.cs +++ b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsHostInit.cs @@ -42,55 +42,40 @@ protected override void RegisterRoutes(IViewRegistry views, IRouteRegistry route new RouteMap("ChefsRoot", View: views.FindByViewModel<ChefsRootModel>(), Nested: new RouteMap[] { #region Main Tabs - new RouteMap("ChefsHome", View: views.FindByViewModel<ChefsHomeModel>(), IsDefault: true), - new RouteMap("ChefsSearch", View: views.FindByViewModel<ChefsSearchModel>()), - new RouteMap("ChefsFavoriteRecipes", View: views.FindByViewModel<ChefsFavoriteRecipesModel>()), + //new RouteMap("ChefsHome", View: views.FindByViewModel<ChefsHomeModel>(), IsDefault: true), + //new RouteMap("ChefsSearch", View: views.FindByViewModel<ChefsSearchModel>()), + //new RouteMap("ChefsFavoriteRecipes", View: views.FindByViewModel<ChefsFavoriteRecipesModel>()), #endregion #region Cookbooks - new RouteMap("ChefsCookbookDetails", View: views.FindByViewModel<ChefsCookbookDetailModel>(), DependsOn: "FavoriteRecipes"), - new RouteMap("ChefsUpdateCookbook", View: views.FindByViewModel<ChefsCreateUpdateCookbookModel>(), DependsOn: "FavoriteRecipes"), - new RouteMap("ChefsCreateCookbook", View: views.FindByViewModel<ChefsCreateUpdateCookbookModel>(), DependsOn: "FavoriteRecipes"), + //new RouteMap("ChefsCookbookDetails", View: views.FindByViewModel<ChefsCookbookDetailModel>(), DependsOn: "FavoriteRecipes"), + //new RouteMap("ChefsUpdateCookbook", View: views.FindByViewModel<ChefsCreateUpdateCookbookModel>(), DependsOn: "FavoriteRecipes"), + //new RouteMap("ChefsCreateCookbook", View: views.FindByViewModel<ChefsCreateUpdateCookbookModel>(), DependsOn: "FavoriteRecipes"), #endregion #region Recipe Details - new RouteMap("ChefsRecipeDetails", View: views.FindByViewModel<ChefsRecipeDetailsModel>(), DependsOn: "ChefsHome", Nested: new[] { - new RouteMap("ChefsIngredientsTabWide"), - new RouteMap("ChefsStepsTabWide"), - new RouteMap("ChefsReviewsTabWide"), - new RouteMap("ChefsNutritionTabWide"), - new RouteMap("ChefsIngredientsTab"), - new RouteMap("ChefsStepsTab"), - new RouteMap("ChefsReviewsTab"), - new RouteMap("ChefsNutritionTab"), - }), - new RouteMap("ChefsSearchRecipeDetails", View: views.FindByViewModel<ChefsRecipeDetailsModel>(), DependsOn: "ChefsSearch"), - new RouteMap("ChefsFavoriteRecipeDetails", View: views.FindByViewModel<ChefsRecipeDetailsModel>(), DependsOn: "ChefsFavoriteRecipes"), - new RouteMap("ChefsCookbookRecipeDetails", View: views.FindByViewModel<ChefsRecipeDetailsModel>(), DependsOn: "ChefsFavoriteRecipes"), + //new RouteMap("ChefsRecipeDetails", View: views.FindByViewModel<ChefsRecipeDetailsModel>(), DependsOn: "ChefsHome"), #endregion #region Live Cooking - new RouteMap("ChefsLiveCooking", View: views.FindByViewModel<ChefsLiveCookingModel>(), DependsOn: "ChefsRecipeDetails"), - new RouteMap("ChefsSearchLiveCooking", View: views.FindByViewModel<ChefsLiveCookingModel>(), DependsOn: "ChefsSearchRecipeDetails"), - new RouteMap("ChefsFavoriteLiveCooking", View: views.FindByViewModel<ChefsLiveCookingModel>(), DependsOn: "ChefsFavoriteRecipeDetails"), - new RouteMap("ChefsCookbookLiveCooking", View: views.FindByViewModel<ChefsLiveCookingModel>(), DependsOn: "ChefsCookbookRecipeDetails"), + //new RouteMap("ChefsLiveCooking", View: views.FindByViewModel<ChefsLiveCookingModel>()), #endregion - new RouteMap("ChefsMap", View: views.FindByViewModel<ChefsMapModel>(), DependsOn: "ChefsHome"), + //new RouteMap("ChefsMap", View: views.FindByViewModel<ChefsMapModel>(), DependsOn: "ChefsHome"), }), - new RouteMap("ChefsNotifications", View: views.FindByViewModel<ChefsNotificationsModel>(), Nested: new RouteMap[] - { - new RouteMap("ChefsAllTab"), - new RouteMap("ChefsUnreadTab"), - new RouteMap("ChefsReadTab"), - }), - new RouteMap("ChefsFilter", View: views.FindByViewModel<ChefsFilterModel>()), - new RouteMap("ChefsReviews", View: views.FindByViewModel<ChefsReviewsModel>()), - new RouteMap("ChefsProfile", View: views.FindByViewModel<ChefsProfileModel>()), - new RouteMap("ChefsSettings", View: views.FindByViewModel<ChefsSettingsModel>(), DependsOn: "ChefsProfile"), - new RouteMap("ChefsCompleted", View: views.FindByView<ChefsCompletedDialog>()), - new RouteMap("ChefsMap", View: views.FindByViewModel<ChefsMapModel>(), DependsOn: "ChefsMain"), - new RouteMap("ChefsDialog", View: views.FindByView<ChefsGenericDialog>()) + //new RouteMap("ChefsNotifications", View: views.FindByViewModel<ChefsNotificationsModel>(), Nested: new RouteMap[] + //{ + // new RouteMap("ChefsAllTab"), + // new RouteMap("ChefsUnreadTab"), + // new RouteMap("ChefsReadTab"), + //}), + //new RouteMap("ChefsFilter", View: views.FindByViewModel<ChefsFilterModel>()), + //new RouteMap("ChefsReviews", View: views.FindByViewModel<ChefsReviewsModel>()), + //new RouteMap("ChefsProfile", View: views.FindByViewModel<ChefsProfileModel>()), + //new RouteMap("ChefsSettings", View: views.FindByViewModel<ChefsSettingsModel>(), DependsOn: "ChefsProfile"), + //new RouteMap("ChefsCompleted", View: views.FindByView<ChefsCompletedDialog>()), + //new RouteMap("ChefsMap", View: views.FindByViewModel<ChefsMapModel>(), DependsOn: "ChefsMain"), + //new RouteMap("ChefsDialog", View: views.FindByView<ChefsGenericDialog>()) } ) ); diff --git a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsRecipeDetailsModel.cs b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsRecipeDetailsModel.cs index e8ca269f2b..6779ff5bc9 100644 --- a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsRecipeDetailsModel.cs +++ b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsRecipeDetailsModel.cs @@ -11,15 +11,6 @@ public partial class ChefsRecipeDetailsModel(ChefsRecipe recipe, INavigator navi public async ValueTask LiveCooking() { - var route = _navigator?.Route?.Base switch - { - "ChefsRecipeDetails" => "ChefsLiveCooking", - "ChefsSearchRecipeDetails" => "ChefsSearchLiveCooking", - "ChefsFavoriteRecipeDetails" => "ChefsFavoriteLiveCooking", - "ChefsCookbookRecipeDetails" => "ChefsCookbookLiveCooking", - _ => throw new InvalidOperationException("Navigating from unknown route") - }; - - await _navigator.NavigateRouteAsync(this, route, data: new ChefsLiveCookingParameter(Recipe, ImmutableList<ChefsStep>.Empty)); + await _navigator.NavigateRouteAsync(this, "ChefsLiveCooking", data: new ChefsLiveCookingParameter(Recipe, ImmutableList<ChefsStep>.Empty)); } } diff --git a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsSearchModel.cs b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsSearchModel.cs index a67ae624a1..f50782ee4b 100644 --- a/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsSearchModel.cs +++ b/testing/TestHarness/TestHarness/Ext/Navigation/Apps/Chefs/ChefsSearchModel.cs @@ -6,6 +6,6 @@ public partial class ChefsSearchModel(INavigator navigator) { public async ValueTask NavigateToRecipeDetail() { - await navigator.NavigateRouteAsync(this, "ChefsSearchRecipeDetails", data: new ChefsRecipe { Name = "Search Page" }); + await navigator.NavigateRouteAsync(this, "ChefsRecipeDetails", data: new ChefsRecipe { Name = "Search Page" }); } }