Persist selected table on tables page
This commit is contained in:
@@ -311,6 +311,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
private const string SelectedTableStorageKey = "rolemaster.tables.selectedTable";
|
||||||
private LookupReferenceData? referenceData;
|
private LookupReferenceData? referenceData;
|
||||||
private CriticalTableDetail? tableDetail;
|
private CriticalTableDetail? tableDetail;
|
||||||
private string selectedTableSlug = string.Empty;
|
private string selectedTableSlug = string.Empty;
|
||||||
@@ -341,6 +342,7 @@
|
|||||||
private int? curatingResultId;
|
private int? curatingResultId;
|
||||||
private CriticalCellEditorModel? curationModel;
|
private CriticalCellEditorModel? curationModel;
|
||||||
private bool isTableMenuOpen;
|
private bool isTableMenuOpen;
|
||||||
|
private bool hasResolvedStoredTableSelection;
|
||||||
private CriticalTableReference? SelectedTableReference =>
|
private CriticalTableReference? SelectedTableReference =>
|
||||||
referenceData?.CriticalTables.FirstOrDefault(item => string.Equals(item.Key, selectedTableSlug, StringComparison.OrdinalIgnoreCase));
|
referenceData?.CriticalTables.FirstOrDefault(item => string.Equals(item.Key, selectedTableSlug, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
@@ -372,6 +374,7 @@
|
|||||||
{
|
{
|
||||||
selectedTableSlug = tableSlug;
|
selectedTableSlug = tableSlug;
|
||||||
isTableMenuOpen = false;
|
isTableMenuOpen = false;
|
||||||
|
await PersistSelectedTableAsync(tableSlug);
|
||||||
await LoadTableDetailAsync();
|
await LoadTableDetailAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,6 +415,34 @@
|
|||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
|
if (!hasResolvedStoredTableSelection && referenceData?.CriticalTables.Count > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var storedTableSlug = await JSRuntime.InvokeAsync<string?>("localStorage.getItem", SelectedTableStorageKey);
|
||||||
|
hasResolvedStoredTableSelection = true;
|
||||||
|
|
||||||
|
var resolvedTableSlug = ResolveSelectedTableSlug(storedTableSlug);
|
||||||
|
if (!string.Equals(resolvedTableSlug, selectedTableSlug, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
selectedTableSlug = resolvedTableSlug;
|
||||||
|
await LoadTableDetailAsync();
|
||||||
|
await PersistSelectedTableAsync(selectedTableSlug);
|
||||||
|
await InvokeAsync(StateHasChanged);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.Equals(storedTableSlug, selectedTableSlug, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
await PersistSelectedTableAsync(selectedTableSlug);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException)
|
||||||
|
{
|
||||||
|
// During prerender localStorage is unavailable. Retry after interactive render.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (tableDetail is null || appliedLayoutVersion == tableLayoutVersion)
|
if (tableDetail is null || appliedLayoutVersion == tableLayoutVersion)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -812,6 +843,25 @@
|
|||||||
private string GetSelectedTableLabel() =>
|
private string GetSelectedTableLabel() =>
|
||||||
SelectedTableReference?.Label ?? "Select a table";
|
SelectedTableReference?.Label ?? "Select a table";
|
||||||
|
|
||||||
|
private string ResolveSelectedTableSlug(string? storedTableSlug)
|
||||||
|
{
|
||||||
|
if (referenceData is null || referenceData.CriticalTables.Count == 0)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(storedTableSlug) &&
|
||||||
|
referenceData.CriticalTables.Any(item => string.Equals(item.Key, storedTableSlug, StringComparison.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
return storedTableSlug;
|
||||||
|
}
|
||||||
|
|
||||||
|
return referenceData.CriticalTables.First().Key;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task PersistSelectedTableAsync(string tableSlug) =>
|
||||||
|
JSRuntime.InvokeVoidAsync("localStorage.setItem", SelectedTableStorageKey, tableSlug).AsTask();
|
||||||
|
|
||||||
private string GetTableOptionCssClass(CriticalTableReference table)
|
private string GetTableOptionCssClass(CriticalTableReference table)
|
||||||
{
|
{
|
||||||
var classes = new List<string>();
|
var classes = new List<string>();
|
||||||
|
|||||||
Reference in New Issue
Block a user