Harden tables selection interactions

This commit is contained in:
2026-03-21 15:20:05 +01:00
parent fb6e5a4e86
commit 7a0ce00429
4 changed files with 69 additions and 4 deletions

View File

@@ -677,18 +677,21 @@
private Task UpdateReferenceModeAsync(string mode)
{
referenceMode = NormalizeMode(mode);
NormalizeSelectedCellForCurrentView();
return Task.CompletedTask;
}
private Task UpdateSelectedGroupAsync(string groupKey)
{
selectedGroupKey = NormalizeOptionalFilter(groupKey);
NormalizeSelectedCellForCurrentView();
return Task.CompletedTask;
}
private Task UpdateSelectedColumnAsync(string columnKey)
{
selectedColumnKey = NormalizeOptionalFilter(columnKey);
NormalizeSelectedCellForCurrentView();
return Task.CompletedTask;
}
@@ -768,6 +771,8 @@
{
selectedCell = null;
}
NormalizeSelectedCellForCurrentView();
}
private static string NormalizeMode(string? mode) =>
@@ -796,4 +801,40 @@
var digitsOnly = new string(value.Where(char.IsDigit).ToArray());
return digitsOnly.Length == 0 ? string.Empty : digitsOnly;
}
private void NormalizeSelectedCellForCurrentView()
{
if (selectedCell is null || tableDetail is null)
{
return;
}
var cell = tableDetail.Cells.FirstOrDefault(item => item.ResultId == selectedCell.ResultId);
if (cell is null || !MatchesCurrentView(cell))
{
selectedCell = null;
}
}
private bool MatchesCurrentView(CriticalTableCellDetail cell)
{
if (!string.IsNullOrWhiteSpace(selectedGroupKey) &&
!string.Equals(cell.GroupKey, selectedGroupKey, StringComparison.OrdinalIgnoreCase))
{
return false;
}
if (!string.IsNullOrWhiteSpace(selectedColumnKey) &&
!string.Equals(cell.ColumnKey, selectedColumnKey, StringComparison.OrdinalIgnoreCase))
{
return false;
}
return referenceMode switch
{
TablesReferenceMode.NeedsCuration => !cell.IsCurated,
TablesReferenceMode.Curated => cell.IsCurated,
_ => true
};
}
}