From 01c1283622a572f8bc1310c8ea6da6731179003b Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 1 Oct 2026 10:08:47 +0200 Subject: [PATCH] Refactor ReceiverPage and update AGENTS.md TODOs Updated AGENTS.md to add a technical debt TODO for modularizing server pages by splitting large components, reducing duplication, and centralizing shared logic. Enhanced ReceiverPage.razor with new state variables and logic to support a "Reject" popup feature, including state management for visibility, submission, and validation. Improved sharing functionality in ReceiverPage.razor by adding error handling, user feedback, and proper state updates during asynchronous operations to enhance maintainability and UX. --- AGENTS.md | 1 + .../Components/Pages/ReceiverPage.razor | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 49d4d4db..a9502f67 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -241,6 +241,7 @@ Manual testing workflow: - Refactor `EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor` to reduce complexity. - Move sender dashboard business/status logic into dedicated services and extension methods (for example effective status resolution, tab classification, receiver signed/rejected detection, and grid-layout filter sanitation). - Keep `EnvelopeSenderPage.razor` focused on UI composition/state orchestration; avoid embedding heavy domain logic directly in the Razor component. +- Apply a modular page architecture across Server pages (starting with `EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor`): split large pages into smaller subcomponents/partial modules, eliminate duplicated code paths, and centralize shared UI/domain logic for maintainability. ## Database diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverPage.razor index 04cae322..e6279a5f 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/ReceiverPage.razor @@ -404,6 +404,12 @@ string? _shareMessage; bool _shareMessageIsError = false; + // ----- Reject popup state ----- + bool _rejectPopupVisible = false; + bool _isRejectSubmitting = false; + string _rejectReason = string.Empty; + string? _rejectValidationMessage; + async Task LogoutAsync() { if (_isLoggingOut || string.IsNullOrWhiteSpace(EnvelopeKey)) @@ -469,6 +475,29 @@ return; } + _isSharing = true; + _shareMessage = null; + _shareMessageIsError = false; + await InvokeAsync(StateHasChanged); + + try + { + _shareMessage = "Freigabe ist in dieser Ansicht derzeit nicht verfugbar."; + _shareMessageIsError = false; + } + catch (Exception ex) + { + Logger.LogError(ex, "Failed to share envelope {EnvelopeKey}", EnvelopeKey); + _shareMessage = "Freigabe fehlgeschlagen. Bitte versuchen Sie es erneut."; + _shareMessageIsError = true; + } + finally + { + _isSharing = false; + await InvokeAsync(StateHasChanged); + } + } + // ----- Lifecycle ----- protected override async Task OnInitializedAsync() {