@page "/envelope/{EnvelopeKey}" @rendermode InteractiveAuto @inject IEnvelopeService EnvelopeService @inject EnvelopeState State @implements IDisposable Dokument @switch (State.Status) { case EnvelopePageStatus.Loading: break; case EnvelopePageStatus.NotFound: break; case EnvelopePageStatus.AlreadySigned: break; case EnvelopePageStatus.RequiresAccessCode: break; case EnvelopePageStatus.ShowDocument: break; case EnvelopePageStatus.Error: 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; }