btcpayserver/BTCPayServer/Services/Notifications/Blobs/InvoiceEventNotification.cs
Umar Bolatov fe4ffcfc62
Update notification dropdown styling (#2167)
* Update notification dropdown strings

* Update notification dropdown styling

address #2131

* Update border color

* Update notification hover color

* Revert "was confirmed paid" to "has been paid" change

* Move styles to site.css

* Update style="border-bottom: 0;" to border-bottom-0

* Update heading

* Add icon sprite

* Add default icon styles

* Use "currentColor" instead of specific color for icon

* Update icon color definition

* Adjust dropdown position

* Update h4 to h5
2021-01-07 18:07:42 +09:00

81 lines
3.1 KiB
C#

using System.Collections.Generic;
using System.Linq;
using BTCPayServer.Abstractions.Contracts;
using BTCPayServer.Configuration;
using BTCPayServer.Controllers;
using BTCPayServer.Events;
using BTCPayServer.Models.NotificationViewModels;
using Microsoft.AspNetCore.Routing;
namespace BTCPayServer.Services.Notifications.Blobs
{
internal class InvoiceEventNotification:BaseNotification
{
private const string TYPE = "invoicestate";
internal class Handler : NotificationHandler<InvoiceEventNotification>
{
private readonly LinkGenerator _linkGenerator;
private readonly BTCPayServerOptions _options;
public Handler(LinkGenerator linkGenerator, BTCPayServerOptions options)
{
_linkGenerator = linkGenerator;
_options = options;
}
public override string NotificationType => TYPE;
public override (string identifier, string name)[] Meta
{
get
{
return new (string identifier, string name)[] {(TYPE, "All invoice updates"),}
.Concat(TextMapping.Select(pair => ($"{TYPE}_{pair.Key}", $"Invoice {pair.Value}"))).ToArray();
}
}
internal static Dictionary<string, string> TextMapping = new Dictionary<string, string>()
{
// {InvoiceEvent.PaidInFull, "was fully paid"},
{InvoiceEvent.PaidAfterExpiration, "was paid after expiration"},
{InvoiceEvent.ExpiredPaidPartial, "expired with partial payments"},
{InvoiceEvent.FailedToConfirm, "has payments that failed to confirm on time"},
// {InvoiceEvent.ReceivedPayment, "received a payment"},
{InvoiceEvent.Confirmed, "was confirmed paid"}
};
protected override void FillViewModel(InvoiceEventNotification notification,
NotificationViewModel vm)
{
var baseStr = $"Invoice {notification.InvoiceId.Substring(0, 5)}..";
if (TextMapping.ContainsKey(notification.Event))
{
vm.Body = $"{baseStr} {TextMapping[notification.Event]}";
}
vm.ActionLink = _linkGenerator.GetPathByAction(nameof(InvoiceController.Invoice),
"Invoice",
new { invoiceId = notification.InvoiceId }, _options.RootPath);
}
}
public InvoiceEventNotification()
{
}
public InvoiceEventNotification(string invoiceId, string invoiceEvent)
{
InvoiceId = invoiceId;
Event = invoiceEvent;
}
public static bool HandlesEvent(string invoiceEvent)
{
return Handler.TextMapping.Keys.Any(s => s == invoiceEvent);
}
public string InvoiceId { get; set; }
public string Event { get; set; }
public override string Identifier => $"{TYPE}_{Event}";
public override string NotificationType => TYPE;
}
}