From 40c95100ff8feaa8cdc5902ea35ee4d06469a299 Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 2 Jul 2026 02:00:14 +0200 Subject: [PATCH] Add Title and Message fields to Envelope editor Introduced input fields for "Title" and "Message" in the EnvelopeSenderEditorPage, allowing users to specify metadata for envelopes. The "Title" field is required and validated, while the "Message" field is optional with a default value. Updated the save logic to validate the title and display appropriate error messages. Persisted the "Title" and "Message" fields in the session cache via the `EditorSessionData` record. Modified the `CreateEnvelopeReceiverCommand` to use the user-provided "Title" and "Message" values. Adjusted the UI layout and styling to accommodate the new fields, ensuring a seamless user experience. --- .../Pages/EnvelopeSenderEditorPage.razor | 98 +++++++++++++++---- 1 file changed, 80 insertions(+), 18 deletions(-) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor index 53ec6e0b..eb4bf201 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderEditorPage.razor @@ -28,23 +28,65 @@
- @* Left: Title *@ -
-
-
- Neues Dokument + @* Left: Title + meta inputs + receivers *@ +
+ + @* ── Title & Message inputs ── *@ +
+ + @* Titel *@ +
+ + + @if (_titleTouched && string.IsNullOrWhiteSpace(_envelopeTitle)) + { + Pflichtfeld + }
+ + @* Nachricht *@ +
+ + +
+ + @* PDF filename badge *@ @if (_pdfLoaded) { - @_fileName - @if (_signatureFields.Count > 0) - { - - @_signatureFields.Count Signaturfeld@(_signatureFields.Count != 1 ? "er" : "") - - } +
+ @_fileName + @if (_signatureFields.Count > 0) + { + + @_signatureFields.Count Signaturfeld@(_signatureFields.Count != 1 ? "er" : "") + + } +
}
@@ -419,6 +461,11 @@ bool _savePopupVisible = false; string? _saveErrorMessage = null; + // ── Envelope metadata ── + string _envelopeTitle = string.Empty; + string _envelopeMessage = string.Empty; + bool _titleTouched = false; + List _receivers = []; bool _receiverPopupVisible; string _receiverDraftName = string.Empty; @@ -469,6 +516,8 @@ _fileName = cached.FileName; _pdfLoaded = _originalPdfBytes is { Length: > 0 }; _receivers = cached.Receivers; + _envelopeTitle = cached.Title; + _envelopeMessage = cached.Message; // Redraw placeholders onto the original PDF if (_pdfLoaded) @@ -625,12 +674,19 @@ async Task SaveAsync() { // ── Validation ── + _titleTouched = true; if (!_pdfLoaded || _originalPdfBytes is null) { _saveErrorMessage = "Bitte laden Sie zuerst ein PDF-Dokument hoch."; _savePopupVisible = true; return; } + if (string.IsNullOrWhiteSpace(_envelopeTitle)) + { + _saveErrorMessage = "Bitte geben Sie einen Titel ein."; + _savePopupVisible = true; + return; + } if (_receivers.Count == 0) { _saveErrorMessage = "Bitte fügen Sie mindestens einen Empfänger hinzu."; @@ -690,8 +746,10 @@ var command = new CreateEnvelopeReceiverCommand { - Title = "Neuer Umschlag", // placeholder — dedicated field will be added later - Message = "Bitte unterzeichnen Sie das beigefügte Dokument.", + Title = _envelopeTitle.Trim(), + Message = string.IsNullOrWhiteSpace(_envelopeMessage) + ? "Bitte unterzeichnen Sie das beigefügte Dokument." + : _envelopeMessage.Trim(), TFAEnabled = false, Document = new DocumentCreateCommand { DataAsBase64 = docBase64 }, Receivers = receiversCmd, @@ -728,7 +786,9 @@ OriginalPdfBytes: _originalPdfBytes ?? [], Fields: [.. _signatureFields], FileName: _fileName, - Receivers: [.. _receivers]); + Receivers: [.. _receivers], + Title: _envelopeTitle, + Message: _envelopeMessage); MemoryCache.Set(SessionKey, data, SessionTtl); } @@ -977,7 +1037,9 @@ byte[] OriginalPdfBytes, List Fields, string FileName, - List Receivers); + List Receivers, + string Title, + string Message); // ── Receiver colour palette (cycles when > 8 receivers) ── static readonly string[] ReceiverPalette =