diff --git a/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Models/ReceiverAuthModel.cs b/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Models/ReceiverAuthModel.cs
new file mode 100644
index 00000000..cc397e19
--- /dev/null
+++ b/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Models/ReceiverAuthModel.cs
@@ -0,0 +1,31 @@
+namespace EnvelopeGenerator.ReceiverUI.Client.Models;
+
+///
+/// Client-seitiges DTO für die Antwort des ReceiverAuthControllers.
+/// Wird 1:1 aus dem JSON deserialisiert.
+///
+/// WARUM ein eigenes Client-Model statt das API-Model zu referenzieren?
+/// - Das API-Projekt hat Server-Abhängigkeiten (EF Core, SqlClient, etc.)
+/// - Diese Pakete existieren nicht für browser-wasm → Build-Fehler
+/// - Die Property-Namen müssen nur zum JSON passen (case-insensitive)
+///
+public record ReceiverAuthModel
+{
+ ///
+ /// Aktueller Status des Empfänger-Flows.
+ /// Werte: "requires_access_code", "requires_tfa", "show_document",
+ /// "already_signed", "rejected", "not_found", "expired", "error"
+ ///
+ public string Status { get; init; } = string.Empty;
+
+ public string? Title { get; init; }
+ public string? Message { get; init; }
+ public string? SenderEmail { get; init; }
+ public string? ReceiverName { get; init; }
+ public bool TfaEnabled { get; init; }
+ public bool HasPhoneNumber { get; init; }
+ public bool ReadOnly { get; init; }
+ public string? TfaType { get; init; }
+ public DateTime? TfaExpiration { get; init; }
+ public string? ErrorMessage { get; init; }
+}
\ No newline at end of file
diff --git a/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Pages/Envelope/EnvelopePage.razor b/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Pages/Envelope/EnvelopePage.razor
index 3923a713..5b09f32b 100644
--- a/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Pages/Envelope/EnvelopePage.razor
+++ b/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Pages/Envelope/EnvelopePage.razor
@@ -1,6 +1,6 @@
@page "/envelope/{EnvelopeKey}"
@rendermode InteractiveAuto
-@inject IEnvelopeService EnvelopeService
+@inject IReceiverAuthService ReceiverAuthService
@inject EnvelopeState State
@implements IDisposable
@@ -13,24 +13,59 @@
break;
case EnvelopePageStatus.NotFound:
-
+
break;
case EnvelopePageStatus.AlreadySigned:
-
+
+ break;
+
+ case EnvelopePageStatus.Rejected:
+
+ break;
+
+ case EnvelopePageStatus.Expired:
+
break;
case EnvelopePageStatus.RequiresAccessCode:
break;
+ case EnvelopePageStatus.RequiresTwoFactor:
+
+ break;
+
case EnvelopePageStatus.ShowDocument:
-
+ @* Phase 4 (PSPDFKit) kommt später — vorerst Platzhalter *@
+
+
+
+
+
Dokument bereit
+
+ «@State.Title» — PDF-Viewer wird in Phase 4 integriert.
+
+ @if (State.ReadOnly)
+ {
+
Nur Lesen
+ }
+
break;
case EnvelopePageStatus.Error:
@@ -41,44 +76,83 @@
@code {
[Parameter] public string EnvelopeKey { get; set; } = default!;
- private byte[]? _documentBytes;
-
protected override async Task OnInitializedAsync()
{
State.OnChange += StateHasChanged;
- await LoadEnvelopeAsync();
- }
-
- private async Task LoadEnvelopeAsync()
- {
- State.SetLoading();
-
- var result = await EnvelopeService.GetEnvelopeReceiversAsync();
-
- if (!result.IsSuccess)
- {
- if (result.StatusCode == 401)
- State.SetAccessCodeRequired();
- else if (result.StatusCode == 404)
- State.SetNotFound();
- else
- State.SetError(result.ErrorMessage ?? "Unbekannter Fehler");
- return;
- }
-
- State.SetDocument();
+ await LoadStatusAsync();
}
///