From 696cd1b623ca0516064388d4ed80d1dcc7d0b78e Mon Sep 17 00:00:00 2001 From: TekH Date: Tue, 29 Sep 2026 22:18:25 +0200 Subject: [PATCH] Enhance PDF upload UX with progress and state handling Refactor the PDF upload button to dynamically adjust its appearance and behavior based on `_isPageReady` and `_isPdfUploadInProgress` states. Add a spinner to indicate upload progress and disable the `` component during uploads or when the page is not ready. Introduce `_isPdfUploadInProgress` state to prevent multiple uploads and ensure consistent UI updates. Update the `OnPdfFileSelectedAsync` method to handle this state, including a `finally` block to reset it and trigger UI updates. Consolidate redundant code for disabled states and improve conditional rendering for better maintainability. Enhance visual feedback for loading states and make minor style adjustments for consistency. --- .../Pages/SenderEditorPage.razor | 106 +++++++++++++----- 1 file changed, 75 insertions(+), 31 deletions(-) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderEditorPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderEditorPage.razor index 8900b5a6..70dc8a0e 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderEditorPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderEditorPage.razor @@ -159,29 +159,43 @@ @* PDF Upload *@ - @if (_isPageReady) - { - @if (_pdfLoaded && _signatureFields.Count > 0) { @@ -267,24 +281,42 @@

@L("SenderEditor_UploadPdfToPlaceFields", "Laden Sie eine PDF-Datei hoch, um Signaturfelder zu platzieren.")

- @if (_isPageReady) - { - } @@ -490,6 +522,7 @@ // ── State ── bool _pdfLoaded = false; bool _isPageReady; + bool _isPdfUploadInProgress; string _fileName = string.Empty; string? _errorMessage; byte[]? _originalPdfBytes; // Pristine upload — never modified, used as base for redraw @@ -658,6 +691,9 @@ if (!_isPageReady) return; + if (_isPdfUploadInProgress) + return; + _errorMessage = null; var file = e.File; if (file is null) return; @@ -670,6 +706,9 @@ try { + _isPdfUploadInProgress = true; + await InvokeAsync(StateHasChanged); + const long maxBytes = 50 * 1024 * 1024; using var ms = new System.IO.MemoryStream(); await file.OpenReadStream(maxBytes).CopyToAsync(ms); @@ -695,6 +734,11 @@ ex.Message); Logger.LogError(ex, "Failed to load PDF file"); } + finally + { + _isPdfUploadInProgress = false; + await InvokeAsync(StateHasChanged); + } } // ── Placement mode ──