diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor
index 62192a5b..be568019 100644
--- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor
+++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/Pages/EnvelopeSenderPage.razor
@@ -118,14 +118,21 @@
@@ -209,6 +216,7 @@
{
@((cellContext.DataItem as EnvelopeDto)?.Title)
-
+
@{
var envelope = cellContext.DataItem as EnvelopeDto;
@@ -253,7 +261,7 @@
}
-
+
@{
var envelope = cellContext.DataItem as EnvelopeDto;
@@ -333,6 +341,7 @@
{
@((cellContext.DataItem as EnvelopeDto)?.Title)
-
+
@{
var envelope = cellContext.DataItem as EnvelopeDto;
@@ -374,7 +383,7 @@
}
-
+
@{
var envelope = cellContext.DataItem as EnvelopeDto;
@@ -542,6 +551,7 @@
// Phase 6e (step 1): UI state only. Export logic is added in step 2.
private string _selectedExportFormat = "xlsx";
private bool _exportSelectedRowsOnly = false;
+ private bool _isExporting = false;
// Stable keys used to store/restore each grid's layout in UserPreferences.GridLayouts
private const string GridKeyActive = "sender.active-envelopes";
@@ -603,15 +613,62 @@
bool IsExportDisabled()
{
- if (_isLoading)
+ if (_isLoading || _isExporting)
return true;
return _exportSelectedRowsOnly && _selectedEnvelope is null;
}
- Task ExportSelectedFormatPlaceholderAsync()
+ async Task ExportSelectedFormatAsync()
{
- return Task.CompletedTask;
+ var grid = _activeTab == "active" ? _gridActive : _gridCompleted;
+ if (grid is null)
+ return;
+
+ _isExporting = true;
+ await InvokeAsync(StateHasChanged);
+
+ try
+ {
+ var tabToken = _activeTab == "completed" ? "abgeschlossen" : "aktiv";
+ var stamp = DateTime.Now.ToString("yyyy-MM-dd");
+ var exportBaseName = $"Umschlaege_{tabToken}_{stamp}";
+
+ switch (_selectedExportFormat)
+ {
+ case "csv":
+ await grid.ExportToCsvAsync(
+ exportBaseName,
+ new GridCsvExportOptions
+ {
+ ExportSelectedRowsOnly = _exportSelectedRowsOnly
+ });
+ break;
+ case "pdf":
+ await grid.ExportToPdfAsync(
+ exportBaseName,
+ new GridPdfExportOptions
+ {
+ ExportSelectedRowsOnly = _exportSelectedRowsOnly,
+ SelectedRowsExportMode = GridSelectedRowsExportMode.KeepGrouping
+ });
+ break;
+ default:
+ await grid.ExportToXlsxAsync(
+ exportBaseName,
+ new GridXlExportOptions
+ {
+ ExportSelectedRowsOnly = _exportSelectedRowsOnly,
+ SelectedRowsExportMode = GridSelectedRowsExportMode.KeepGrouping
+ });
+ break;
+ }
+ }
+ finally
+ {
+ _isExporting = false;
+ await InvokeAsync(StateHasChanged);
+ }
}
void CreateEnvelope()