@page "/" @inject IJSRuntime JSRuntime @using QRPay.Models @using QRPay.Services @implements IDisposable QRPay - QR Payment Generator
@if (!_showQRCode) {

QRPay

Generate QR payment codes instantly

} else {

Payment QR Code

Scan this code with your banking app

Payment QR Code
To: @(string.IsNullOrWhiteSpace(paymentModel.Name) ? "Not provided" : paymentModel.Name)
Amount: €@paymentModel.Amount?.ToString("F2")
@if (!string.IsNullOrWhiteSpace(paymentModel.Remark)) {
Reference: @paymentModel.Remark
}
}
@code { private PaymentRequest paymentModel = new(); private string QRCodeStr = string.Empty; private bool _showQRCode; private bool _isGenerating; private bool _isCopying; private bool _copySuccess; private System.Threading.Timer? _copySuccessTimer; public async Task GenerateQRCode() { _isGenerating = true; StateHasChanged(); await Task.Delay(500); try { QRCodeStr = string.Empty; if (!string.IsNullOrWhiteSpace(paymentModel.IBAN)) { QRCodeStr = PaymentQrCodeService.GenerateDataUri(paymentModel); _showQRCode = true; } } finally { _isGenerating = false; StateHasChanged(); } } public async Task CopyQRCodeToClipboard() { try { _isCopying = true; _copySuccess = false; StateHasChanged(); var success = await JSRuntime.InvokeAsync("copyImageToClipboardSmall", "qrcode-image"); _isCopying = false; if (success) { _copySuccess = true; StateHasChanged(); _copySuccessTimer?.Dispose(); _copySuccessTimer = new System.Threading.Timer(_ => { InvokeAsync(() => { _copySuccess = false; StateHasChanged(); }); }, null, TimeSpan.FromSeconds(3), Timeout.InfiniteTimeSpan); } else { StateHasChanged(); } } catch (Exception) { _isCopying = false; StateHasChanged(); } } public void GoBack() { _showQRCode = false; QRCodeStr = string.Empty; paymentModel = new PaymentRequest(); _copySuccess = false; _copySuccessTimer?.Dispose(); StateHasChanged(); } public void Dispose() { _copySuccessTimer?.Dispose(); } }