First successfull build

This commit is contained in:
OlgunR
2026-03-19 12:35:23 +01:00
parent 7271a92d32
commit 4f3c66b4f7
30 changed files with 767 additions and 105 deletions

View File

@@ -1,5 +1,60 @@
<h3>AccessCodeForm</h3>
@* DUMB COMPONENT: Kennt keine Services, nur Parameter und Events *@
<div class="access-code-container">
<h2>Zugangscode eingeben</h2>
<p>Ein Zugangscode wurde an Ihre E-Mail-Adresse gesendet.</p>
<EditForm Model="_model" OnValidSubmit="Submit">
<DataAnnotationsValidator />
<div class="form-group">
<InputText @bind-Value="_model.Code"
class="form-control code-input"
placeholder="000000"
maxlength="6" />
<ValidationMessage For="() => _model.Code" />
</div>
@if (!string.IsNullOrEmpty(ErrorMessage))
{
<div class="alert alert-danger mt-2">@ErrorMessage</div>
}
<button type="submit" class="btn btn-primary mt-3" disabled="@_isSubmitting">
@if (_isSubmitting)
{
<LoadingIndicator Small="true" />
}
else
{
<span>Bestätigen</span>
}
</button>
</EditForm>
</div>
@code {
// Parameter von der Eltern-Page
[Parameter] public required string EnvelopeKey { get; set; }
[Parameter] public string? ErrorMessage { get; set; }
}
// EventCallback: Informiert die Page, dass ein Code eingegeben wurde
[Parameter] public EventCallback<string> OnSubmit { get; set; }
private AccessCodeModel _model = new();
private bool _isSubmitting;
private async Task Submit()
{
_isSubmitting = true;
await OnSubmit.InvokeAsync(_model.Code);
_isSubmitting = false;
}
private class AccessCodeModel
{
[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Bitte Zugangscode eingeben")]
[System.ComponentModel.DataAnnotations.StringLength(6, MinimumLength = 4)]
public string Code { get; set; } = string.Empty;
}
}

View File

@@ -1,5 +1,23 @@
<h3>PdfViewer</h3>
@inject IJSRuntime JS
@implements IAsyncDisposable
<div id="pspdfkit-container" class="pdf-container" style="width: 100%; height: 80vh;"></div>
@code {
[Parameter] public byte[]? DocumentBytes { get; set; }
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender && DocumentBytes is not null)
{
// TODO: PSPDFKit JS-Interop implementieren (Phase 6)
// await JS.InvokeVoidAsync("initPdfViewer", DocumentBytes);
}
}
public async ValueTask DisposeAsync()
{
// TODO: PSPDFKit aufräumen
// await JS.InvokeVoidAsync("destroyPdfViewer");
}
}