Amend Navigation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user