fix: merge parameters for segments

This commit is contained in:
Dan Siegel
2024-01-27 08:43:42 -06:00
parent 5b296e1d5c
commit 2c43ee421e
2 changed files with 28 additions and 5 deletions
@@ -403,7 +403,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
var nextSegment = segments.Dequeue();
var pageParameters = UriParsingHelper.GetSegmentParameters(nextSegment);
var pageParameters = UriParsingHelper.GetSegmentParameters(nextSegment, parameters);
if (pageParameters.TryGetValue<bool>(KnownNavigationParameters.UseModalNavigation, out var parameterModal))
useModalNavigation = parameterModal;
@@ -604,7 +604,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
{
if (nextSegment.Contains(KnownNavigationParameters.SelectedTab))
{
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment);
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment, parameters);
SelectPageTab(topPage, segmentParams);
}
});
@@ -706,7 +706,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
{
if (detail is TabbedPage && nextSegment.Contains(KnownNavigationParameters.SelectedTab))
{
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment);
var segmentParams = UriParsingHelper.GetSegmentParameters(nextSegment, parameters);
SelectPageTab(detail, segmentParams);
}
@@ -891,7 +891,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
async Task ConfigureTabbedPage(TabbedPage tabbedPage, string segment, INavigationParameters parameters)
{
var tabParameters = UriParsingHelper.GetSegmentParameters(segment);
var tabParameters = UriParsingHelper.GetSegmentParameters(segment, parameters);
var tabsToCreate = tabParameters.GetValues<string>(KnownNavigationParameters.CreateTab);
foreach (var tabToCreateEncoded in tabsToCreate ?? Array.Empty<string>())
@@ -1029,7 +1029,7 @@ public class PageNavigationService : INavigationService, IRegistryAware
}
//if any page decide to go modal, we need to consider it and all pages after it an illegal page
var pageParameters = UriParsingHelper.GetSegmentParameters(item);
var pageParameters = UriParsingHelper.GetSegmentParameters(item, parameters);
if (pageParameters.ContainsKey(KnownNavigationParameters.UseModalNavigation))
{
if (pageParameters.GetValue<bool>(KnownNavigationParameters.UseModalNavigation))
@@ -548,6 +548,29 @@ public class NavigationTests : TestBase
Assert.True(PageNavigationService.UseModalNavigation(push.CurrentPage, useModalNavigation));
}
[Fact]
public async Task PushesModally_From_NavigationParameters()
{
var mauiApp = CreateBuilder(prism => prism
.CreateWindow(n => n.NavigateAsync("NavigationPage/MockViewA")))
.Build();
var window = GetWindow(mauiApp);
var page = window.Page;
if (page is NavigationPage navPage)
page = navPage.RootPage;
var navService = Prism.Navigation.Xaml.Navigation.GetNavigationService(page);
var result = await navService.NavigateAsync("MockViewB", new NavigationParameters { { KnownNavigationParameters.UseModalNavigation, true } });
Assert.True(result.Success);
var pushes = navService.GetPushes();
Assert.Single(pushes);
var push = pushes[0];
Assert.True(push.UseModalNavigation);
}
private static void TestPage(Page page)
{
Assert.NotNull(page.BindingContext);