diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor index ea9d172a..1332b47b 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor @@ -223,215 +223,223 @@
- - - - @((cellContext.DataItem as EnvelopeDto)?.Id) - - - - - @((cellContext.DataItem as EnvelopeDto)?.Title) - - - - - - - - @{ - var envelope = cellContext.DataItem as EnvelopeDto; - if (envelope != null) - { - var statusInfo = GetStatusInfo(GetEffectiveEnvelopeStatus(envelope)); -
- - @statusInfo.Label -
- } - } -
-
- - - @{ - var envelope = cellContext.DataItem as EnvelopeDto; - if (envelope != null) - { - var receivers = envelope.EnvelopeReceivers?.ToList() ?? []; - var signed = GetSignedReceiverCount(envelope); - var total = receivers.Count; -
- - @signed / @total @L("Signed", "unterschrieben") - - @if (total > 0) - { -
-
-
- } -
- } - } -
-
- - - -
- -
-
@L("Receiver", "Empfänger")
+ Data="@CurrentGridData" + @ref="_grid" + KeyFieldName="Id" + ShowFilterRow="false" + FilterMenuButtonDisplayMode="GridFilterMenuButtonDisplayMode.Always" + ShowSearchBox="true" + AllowColumnReorder="true" + AllowSort="true" + ColumnResizeMode="GridColumnResizeMode.ColumnsContainer" + PageSize="20" + PagerVisible="true" + SelectionMode="GridSelectionMode.Single" + AllowSelectRowByClick="true" + SelectedDataItem="@_selectedEnvelope" + SelectedDataItemChanged="@((object o) => _selectedEnvelope = o as EnvelopeDto)" + RowClick="OnRowClick" + RowDoubleClick="OnRowDoubleClick" + CustomizeElement="OnCustomizeElement" + LayoutAutoLoading="OnGridLayoutAutoLoading" + LayoutAutoSaving="OnGridLayoutAutoSaving" + HighlightRowOnHover="true" + AutoCollapseDetailRow=true + DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Auto"> + + + + @((cellContext.DataItem as EnvelopeDto)?.Id) + + + + + @((cellContext.DataItem as EnvelopeDto)?.Title) + + + + + + + @{ - var envelope = detailContext.DataItem as EnvelopeDto; - if (envelope?.EnvelopeReceivers?.Any() == true) + var envelope = cellContext.DataItem as EnvelopeDto; + if (envelope != null) { -
- @foreach (var receiver in envelope.EnvelopeReceivers) - { -
- @{ - var isRejected = IsReceiverRejected(envelope, receiver); - var isSigned = IsReceiverSigned(envelope, receiver); - var accessCode = receiver.AccessCode; - var hasAccessCode = !string.IsNullOrWhiteSpace(accessCode); - var hasReceiverEnvelopeUrl = CanOpenReceiverEnvelopeUrl(envelope, receiver); - } - - @if (isRejected) - { - - - - @GetStatusLabel(EnvelopeStatus.DocumentRejected) - } - else if (isSigned) - { - - - - @L("Signed", "Unterschrieben") - } - else - { - - - - - @L("Pending", "Ausstehend") - } - -
- @receiver.Name - @receiver.Receiver?.EmailAddress -
-
- @L("AccessCode", "Access code") -
- - - @if (_canUseReceiverEnvelopeUrl) - { - - } -
-
-
- } -
- } - else - { -

@L("Sender_NoReceivers", "Keine Empfänger")

+ var statusInfo = GetStatusInfo(GetEffectiveEnvelopeStatus(envelope)); +
+ + @statusInfo.Label +
} } - -
@L("History", "Historie")
+
+
+ + @{ - var historyEntries = envelope is null - ? Enumerable.Empty() - : GetOrderedHistories(envelope); - if (historyEntries.Any()) + var envelope = cellContext.DataItem as EnvelopeDto; + if (envelope != null) { -
- @foreach (var history in historyEntries) + var receivers = envelope.EnvelopeReceivers?.ToList() ?? []; + var signed = GetSignedReceiverCount(envelope); + var total = receivers.Count; +
+ + @signed / @total @L("Signed", "unterschrieben") + + @if (total > 0) { - var statusInfo = GetStatusInfo(history.Status); -
-
-
- - @statusInfo.Label -
- @GetHistoryActor(history) -
-
- @GetHistoryDate(history).ToString("dd.MM.yyyy HH:mm") -
+
+
}
} - else - { -

@L("Sender_NoHistory", "Keine Historie vorhanden")

- } } -
- - + + + + + + + +
+
@L("Receiver", "Empfänger")
+ @{ + var envelope = detailContext.DataItem as EnvelopeDto; + if(envelope is not null && _grid is not null) + { + _grid.SelectDataItem(envelope); + // _grid!.SelectedDataItem = envelope!; + } + + if (envelope?.EnvelopeReceivers?.Any() == true) + { +
+ @foreach (var receiver in envelope.EnvelopeReceivers) + { +
+ @{ + var isRejected = IsReceiverRejected(envelope, receiver); + var isSigned = IsReceiverSigned(envelope, receiver); + var accessCode = receiver.AccessCode; + var hasAccessCode = !string.IsNullOrWhiteSpace(accessCode); + var hasReceiverEnvelopeUrl = CanOpenReceiverEnvelopeUrl(envelope, receiver); + } + + @if (isRejected) + { + + + + @GetStatusLabel(EnvelopeStatus.DocumentRejected) + } + else if (isSigned) + { + + + + @L("Signed", "Unterschrieben") + } + else + { + + + + + @L("Pending", "Ausstehend") + } + +
+ @receiver.Name + @receiver.Receiver?.EmailAddress +
+
+ @L("AccessCode", "Access code") +
+ + + @if (_canUseReceiverEnvelopeUrl) + { + + } +
+
+
+ } +
+ } + else + { +

@L("Sender_NoReceivers", "Keine Empfänger")

+ } + } + +
@L("History", "Historie")
+ @{ + var historyEntries = envelope is null + ? Enumerable.Empty() + : GetOrderedHistories(envelope); + if (historyEntries.Any()) + { +
+ @foreach (var history in historyEntries) + { + var statusInfo = GetStatusInfo(history.Status); +
+
+
+ + @statusInfo.Label +
+ @GetHistoryActor(history) +
+
+ @GetHistoryDate(history).ToString("dd.MM.yyyy HH:mm") +
+
+ } +
+ } + else + { +

@L("Sender_NoHistory", "Keine Historie vorhanden")

+ } + } +
+
+
} @@ -440,9 +448,9 @@
+ VisibleChanged="OnCreateWizardVisibleChangedAsync" + EnvelopeTypes="@_envelopeTypes" + StartEditorRequested="StartEditorFromWizardAsync" /> @* ── PDF Vorschau Popup ────────────────────────────────────────────────── *@ { - try { await ThemeService.LoadFromServerAsync(); } - catch { /* swallow — default theme remains active */ } + try { await ThemeService.LoadFromServerAsync(); } + catch { /* swallow — default theme remains active */ } }); var featureTask = EnvelopeReceiverService.GetReceiverEnvelopeUrlFeatureEnabledAsync(); @@ -1080,13 +1088,19 @@ var clicked = e.Grid.GetDataItem(e.VisibleIndex) as EnvelopeDto; if (clicked == null) return; - if (_selectedEnvelope?.Id == clicked.Id) + if (e.Grid.IsDetailRowExpanded(e.VisibleIndex)) { - // Same row clicked again → deselect + // Already expanded → collapse and deselect + e.Grid.CollapseDetailRow(e.VisibleIndex); _selectedEnvelope = null; e.Grid.DeselectDataItem(clicked); } - // Different row: @bind-SelectedDataItem already updated _selectedEnvelope + else + { + // Collapsed → expand and select + e.Grid.SelectDataItem(clicked); + e.Grid.ExpandDetailRow(e.VisibleIndex); + } } // Double-click: select the row and open preview popup