Amend Navigation

This commit is contained in:
Daniel Clark
2022-12-22 20:31:25 +00:00
parent 757349285a
commit 894bbbd177
11 changed files with 424 additions and 151 deletions
+3 -13
View File
@@ -3,23 +3,13 @@ namespace Toolkit.Framework.Foundation;
public record Navigate : IRequest
{
public Navigate(string name, params object?[] parameters)
public Navigate(string path, params object?[] parameters)
{
Name = name;
Path = path;
Parameters = parameters;
}
public Navigate(Type type, params object?[] parameters)
{
Type = type;
Parameters = parameters;
}
public Type? Type { get; }
public object? Route { get; init; }
public string? Name { get; }
public string? Path { get; }
public object?[] Parameters { get; }
}
@@ -0,0 +1,53 @@
using Microsoft.Extensions.Primitives;
using System.Diagnostics;
namespace Toolkit.Framework.Foundation;
public class NavigationSegment
{
private NavigationSegment(string name, IDictionary<string, StringValues> parameters, string target)
{
Name = name;
Parameters = parameters;
Target = target;
}
public string Name { get; }
public IDictionary<string, StringValues> Parameters { get; }
public string Target { get; }
public static IReadOnlyCollection<NavigationSegment> FromPath(string? path)
{
List<NavigationSegment> result = new();
if (path is null)
{
return result;
}
string[] pathParts = path.Split('?');
string[] segments = pathParts is { Length: >= 1 } ? pathParts[0].Split('/', StringSplitOptions.RemoveEmptyEntries)
: Array.Empty<string>();
string query = pathParts is { Length: 2 } ? pathParts[1] : "";
Dictionary<string, StringValues> parameters = QueryHelpers.ParseQuery(query);
foreach (string segment in segments)
{
string[] segmentParts = segment.Split('#');
string name = segmentParts is { Length: >= 1 } ? segmentParts[0] : "";
string target = segmentParts is { Length: 2 } ? segmentParts[1] : "";
Trace.WriteLine(name);
Trace.WriteLine(target);
result.Add(new NavigationSegment(name, parameters, target));
}
return result;
}
}