using Raven.Client.Documents.Session;
namespace zero.Routing;
public class RawLinkProvider : ILinkProvider
{
public const string AREA = "zero.url";
///
/// Creates a new link object from an url
///
public Link Create(string url, LinkTarget target = LinkTarget.Default, string title = null)
{
return new Link()
{
Area = AREA,
Target = target,
Title = title,
Values = new()
{
{ "url", url }
}
};
}
///
public bool CanProcess(Link link) => link.Area is AREA or "zero.raw";
///
public Task Resolve(Link link)
{
link.Url = link.Values.GetValueOrDefault("url");
return Task.FromResult(link.Url);
}
///
public Task Preview(IAsyncDocumentSession session, Link link)
{
string url = link.Values.GetValueOrDefault("url");
if (url.IsNullOrEmpty())
{
return Task.FromResult(default);
}
return Task.FromResult(new LinkPreview()
{
Id = url,
Icon = "fth-link",
Name = link.Title.Or("@ui.link"),
Text = url
});
}
}