Add sticky tables context controls
This commit is contained in:
@@ -57,10 +57,21 @@
|
||||
<TablesContextBar
|
||||
Detail="detail"
|
||||
IsPinned="PinnedTablesState.IsPinned(detail.Slug)"
|
||||
OnTogglePin="TogglePinnedTableAsync" />
|
||||
CurrentMode="referenceMode"
|
||||
SelectedGroupKey="selectedGroupKey"
|
||||
SelectedColumnKey="selectedColumnKey"
|
||||
RollJumpValue="rollJumpValue"
|
||||
OnTogglePin="TogglePinnedTableAsync"
|
||||
OnModeChanged="UpdateReferenceModeAsync"
|
||||
OnGroupChanged="UpdateSelectedGroupAsync"
|
||||
OnColumnChanged="UpdateSelectedColumnAsync"
|
||||
OnRollJumpChanged="UpdateRollJumpAsync" />
|
||||
|
||||
<TablesCanvas
|
||||
Detail="detail"
|
||||
CurrentMode="referenceMode"
|
||||
SelectedGroupKey="selectedGroupKey"
|
||||
SelectedColumnKey="selectedColumnKey"
|
||||
OnOpenCuration="OpenCellCurationAsync"
|
||||
OnOpenEditor="OpenCellEditorAsync" />
|
||||
</div>
|
||||
@@ -135,6 +146,10 @@
|
||||
private string? curationQuickParseError;
|
||||
private int? curatingResultId;
|
||||
private CriticalCellEditorModel? curationModel;
|
||||
private string referenceMode = TablesReferenceMode.Reference;
|
||||
private string selectedGroupKey = string.Empty;
|
||||
private string selectedColumnKey = string.Empty;
|
||||
private string rollJumpValue = string.Empty;
|
||||
private bool hasResolvedStoredTableSelection;
|
||||
private CriticalTableReference? SelectedTableReference =>
|
||||
referenceData?.CriticalTables.FirstOrDefault(item => string.Equals(item.Key, selectedTableSlug, StringComparison.OrdinalIgnoreCase));
|
||||
@@ -170,14 +185,17 @@
|
||||
if (tableDetail is null)
|
||||
{
|
||||
detailError = "The selected table could not be loaded.";
|
||||
NormalizeViewStateForCurrentDetail();
|
||||
return;
|
||||
}
|
||||
|
||||
await RecordRecentTableVisitAsync();
|
||||
NormalizeViewStateForCurrentDetail();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
detailError = exception.Message;
|
||||
NormalizeViewStateForCurrentDetail();
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -621,4 +639,75 @@
|
||||
new(
|
||||
TableSlug: selectedTableSlug,
|
||||
Mode: RolemasterDb.App.Frontend.AppState.TableContextMode.Reference);
|
||||
|
||||
private Task UpdateReferenceModeAsync(string mode)
|
||||
{
|
||||
referenceMode = NormalizeMode(mode);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task UpdateSelectedGroupAsync(string groupKey)
|
||||
{
|
||||
selectedGroupKey = NormalizeOptionalFilter(groupKey);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task UpdateSelectedColumnAsync(string columnKey)
|
||||
{
|
||||
selectedColumnKey = NormalizeOptionalFilter(columnKey);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private Task UpdateRollJumpAsync(string rollValue)
|
||||
{
|
||||
rollJumpValue = NormalizeRollInput(rollValue);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private void NormalizeViewStateForCurrentDetail()
|
||||
{
|
||||
referenceMode = NormalizeMode(referenceMode);
|
||||
|
||||
if (tableDetail is null)
|
||||
{
|
||||
selectedGroupKey = string.Empty;
|
||||
selectedColumnKey = string.Empty;
|
||||
rollJumpValue = string.Empty;
|
||||
return;
|
||||
}
|
||||
|
||||
if (tableDetail.Groups.All(group => !string.Equals(group.Key, selectedGroupKey, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
selectedGroupKey = string.Empty;
|
||||
}
|
||||
|
||||
if (tableDetail.Columns.All(column => !string.Equals(column.Key, selectedColumnKey, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
selectedColumnKey = string.Empty;
|
||||
}
|
||||
|
||||
rollJumpValue = NormalizeRollInput(rollJumpValue);
|
||||
}
|
||||
|
||||
private static string NormalizeMode(string? mode) =>
|
||||
mode switch
|
||||
{
|
||||
TablesReferenceMode.NeedsCuration => TablesReferenceMode.NeedsCuration,
|
||||
TablesReferenceMode.Curated => TablesReferenceMode.Curated,
|
||||
_ => TablesReferenceMode.Reference
|
||||
};
|
||||
|
||||
private static string NormalizeOptionalFilter(string? value) =>
|
||||
string.IsNullOrWhiteSpace(value) ? string.Empty : value.Trim();
|
||||
|
||||
private static string NormalizeRollInput(string? value)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
var digitsOnly = new string(value.Where(char.IsDigit).ToArray());
|
||||
return digitsOnly.Length == 0 ? string.Empty : digitsOnly;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user