From 6ad76fa4b00279a0e09d4a8834a8f62fb08eb5ba Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 11 Nov 2026 16:58:47 +0100 Subject: [PATCH] Improve PDF preview UX in SenderPage.razor Updated button labels and popup headers to reflect a change in functionality from "Preview" to "Show Original Document." Added an informational hint in the PDF preview viewer to notify users about the absence of signature fields, with auto-hide and dismiss functionality. Introduced state management for the hint display, including methods to show and dismiss it, and ensured proper reset on preview close. Enhanced localization and styling for better user clarity. --- .../Pages/SenderPage.razor | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor index 1332b47b..b154cbc6 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor @@ -113,12 +113,12 @@ } -
@@ -454,7 +454,7 @@ @* ── PDF Vorschau Popup ────────────────────────────────────────────────── *@ + @if (_showPreviewHint) + { +
+ @L("Sender_OriginalDocument_NoSignatureFieldsHint", "Hinweis: In dieser Ansicht werden keine Unterschriftsfelder angezeigt.") + +
+ } _previewFieldOverlays = []; + private bool _showPreviewHint = false; + private int _previewHintVersion = 0; + private const int PreviewHintAutoHideMs = 4000; private string? PreviewPdfDataUrl => _previewPdfBytes is { Length: > 0 } ? $"data:application/pdf;base64,{Convert.ToBase64String(_previewPdfBytes)}" @@ -1165,6 +1184,7 @@ // PDF ready — mount the viewer now _previewViewerMounted = true; + ShowPreviewHint(); } catch (HttpRequestException ex) when ((int?)ex.StatusCode == 404) { @@ -1189,6 +1209,9 @@ void OnPreviewClosed() { + _previewHintVersion++; + _showPreviewHint = false; + // Unmount the viewer first — prevent DevExpress async render from // accessing the already-disposed byte array _previewViewerMounted = false; @@ -1220,6 +1243,28 @@ return Task.CompletedTask; } + void DismissPreviewHint() + { + _previewHintVersion++; + _showPreviewHint = false; + } + + void ShowPreviewHint() + { + _showPreviewHint = true; + var currentVersion = ++_previewHintVersion; + + _ = Task.Run(async () => + { + await Task.Delay(PreviewHintAutoHideMs); + if (currentVersion != _previewHintVersion) + return; + + _showPreviewHint = false; + await InvokeAsync(StateHasChanged); + }); + } + static int? EstimatePdfPageCount(byte[]? documentBytes) { if (documentBytes is null || documentBytes.Length == 0)