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()