Files
EnvelopeGenerator/EnvelopeGenerator.ReceiverUI/EnvelopeGenerator.ReceiverUI.Client/Pages/Envelope/EnvelopePage.razor
2026-03-19 12:35:23 +01:00

84 lines
2.5 KiB
Plaintext

@page "/envelope/{EnvelopeKey}"
@rendermode InteractiveAuto
@inject IEnvelopeService EnvelopeService
@inject EnvelopeState State
@implements IDisposable
<PageTitle>Dokument</PageTitle>
@switch (State.Status)
{
case EnvelopePageStatus.Loading:
<LoadingIndicator Message="Dokument wird geladen..." />
break;
case EnvelopePageStatus.NotFound:
<ErrorDisplay Title="Nicht gefunden"
Message="Dieses Dokument existiert nicht oder ist nicht mehr verfügbar." />
break;
case EnvelopePageStatus.AlreadySigned:
<ErrorDisplay Title="Bereits unterschrieben"
Message="Dieses Dokument wurde bereits unterschrieben."
Icon="check-circle" />
break;
case EnvelopePageStatus.RequiresAccessCode:
<AccessCodeForm EnvelopeKey="@EnvelopeKey"
ErrorMessage="@State.ErrorMessage"
OnSubmit="HandleAccessCodeSubmit" />
break;
case EnvelopePageStatus.ShowDocument:
<PdfViewer DocumentBytes="@_documentBytes" />
break;
case EnvelopePageStatus.Error:
<ErrorDisplay Title="Fehler" Message="@State.ErrorMessage" />
break;
}
@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();
// Die genaue API-Logik hängt von den verfügbaren Endpunkten ab.
// Dies ist die Struktur — die konkreten Endpoints implementierst du
// basierend auf den vorhandenen API-Controllern.
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;
}
// Daten verarbeiten und Status setzen
State.SetDocument();
}
private async Task HandleAccessCodeSubmit(string code)
{
// AccessCode an API senden
// Bei Erfolg: State.SetDocument() oder State.SetTwoFactorRequired()
// Bei Fehler: State.SetError(...)
}
public void Dispose() => State.OnChange -= StateHasChanged;
}