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)