using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewComponents;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
namespace BTCPayServer.Components.TruncateCenter;
///
/// Truncates long strings in the center with ellipsis: Turns e.g. a BOLT11 into "lnbcrt7…q2ns60y"
///
/// The full text, e.g. a Bitcoin address or BOLT11
/// Optional link, e.g. a block explorer URL
/// Optional additional CSS classes
/// The number of characters to show on each side
/// Display a copy button
/// HTML with truncated string
public class TruncateCenter : ViewComponent
{
public IViewComponentResult Invoke(string text, string link = null, string classes = null, int padding = 7, bool copy = true, bool elastic = false, bool isVue = false, string id = null)
{
if (string.IsNullOrEmpty(text))
return new HtmlContentViewComponentResult(new StringHtmlContent(string.Empty));
var vm = new TruncateCenterViewModel
{
Classes = classes,
Padding = padding,
Elastic = elastic,
IsVue = isVue,
Copy = copy,
Text = text,
Link = link,
Id = id
};
if (!isVue && text.Length > 2 * padding)
{
vm.Start = text[..padding];
vm.End = text[^padding..];
}
return View(vm);
}
}