Harden tables selection interactions
This commit is contained in:
@@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user