Add reusable UI components and toast notification system
- Introduce ActionPanel, EnvelopeInfoCard, TfaForm, ConfirmDialog, StatusPage, and Toast components for modular, presentational UI - Add ToastService for pub/sub toast notifications; register in DI - Refactor AccessCodeForm for improved UX and parameterization - Enhance MainLayout with Toast integration and better error handling - Standardize and extend app.css for new components and responsive design - All new components are "dumb" (no service/API knowledge), using EventCallbacks for parent interaction - ConfirmDialog supports awaitable user confirmation via TaskCompletionSource
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
@* StatusPage: Wiederverwendbare Status-Seite für alle Endzustände.
|
||||
Ersetzt EnvelopeSigned.cshtml, EnvelopeRejected.cshtml, Error-Views und Expired.
|
||||
"Dumme" Komponente: Keine Services, keine API-Calls, nur Parameter → Anzeige. *@
|
||||
|
||||
<div class="page">
|
||||
<header class="text-center">
|
||||
@switch (Type)
|
||||
{
|
||||
case "signed":
|
||||
<div class="status-icon signed">
|
||||
<i class="bi bi-check-circle"></i>
|
||||
</div>
|
||||
<h1>Dokument erfolgreich unterschrieben</h1>
|
||||
<p class="text-muted">
|
||||
Sie erhalten eine Bestätigung per E-Mail, sobald alle Empfänger unterschrieben haben.
|
||||
</p>
|
||||
break;
|
||||
|
||||
case "rejected":
|
||||
<div class="status-icon rejected">
|
||||
<i class="bi bi-x-circle"></i>
|
||||
</div>
|
||||
<h1>Dokument wurde abgelehnt</h1>
|
||||
<p class="text-muted">
|
||||
@if (!string.IsNullOrEmpty(Title) && !string.IsNullOrEmpty(SenderEmail))
|
||||
{
|
||||
<span>
|
||||
Das Dokument «@Title» wurde abgelehnt.
|
||||
Bei Fragen wenden Sie sich an
|
||||
<a href="mailto:@SenderEmail">@SenderEmail</a>.
|
||||
</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>Dieses Dokument wurde von einem Empfänger abgelehnt.</span>
|
||||
}
|
||||
</p>
|
||||
break;
|
||||
|
||||
case "not_found":
|
||||
<div class="status-icon locked">
|
||||
<i class="bi bi-question-circle"></i>
|
||||
</div>
|
||||
<h1>Dokument nicht gefunden</h1>
|
||||
<p class="text-muted">
|
||||
Dieses Dokument existiert nicht oder ist nicht mehr verfügbar.
|
||||
Wenn Sie diese URL per E-Mail erhalten haben, wenden Sie sich bitte an das IT-Team.
|
||||
</p>
|
||||
break;
|
||||
|
||||
case "expired":
|
||||
<div class="status-icon locked">
|
||||
<i class="bi bi-clock-history"></i>
|
||||
</div>
|
||||
<h1>Link abgelaufen</h1>
|
||||
<p class="text-muted">
|
||||
Der Zugang zu diesem Dokument ist abgelaufen.
|
||||
</p>
|
||||
break;
|
||||
}
|
||||
</header>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
/// <summary>
|
||||
/// Bestimmt welche Status-Variante angezeigt wird.
|
||||
/// Erlaubte Werte: "signed", "rejected", "not_found", "expired"
|
||||
/// </summary>
|
||||
[Parameter, EditorRequired]
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>E-Mail des Absenders — nur bei "rejected" relevant.</summary>
|
||||
[Parameter]
|
||||
public string? SenderEmail { get; set; }
|
||||
|
||||
/// <summary>Titel des Umschlags — nur bei "rejected" relevant.</summary>
|
||||
[Parameter]
|
||||
public string? Title { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user