Add inline quick parse to curation dialog

This commit is contained in:
2026-03-21 10:32:28 +01:00
parent 4e735cfd3c
commit 4422cf8ba4
7 changed files with 526 additions and 299 deletions

View File

@@ -280,11 +280,17 @@
Model="curationModel"
IsLoading="isCurationLoading"
IsSaving="isCurationSaving"
IsReparsing="isCurationReparsing"
IsQuickParseMode="isCurationQuickParseMode"
ErrorMessage="@curationError"
QuickParseErrorMessage="@curationQuickParseError"
LegendEntries="@(tableDetail?.Legend ?? Array.Empty<CriticalTableLegendEntry>())"
OnClose="CloseCellCurationAsync"
OnMarkCurated="MarkCellCuratedAsync"
OnEdit="OpenEditorFromCurationAsync" />
OnEdit="OpenEditorFromCurationAsync"
OnEnterQuickParse="EnterCurationQuickParseMode"
OnCancelQuickParse="CancelCurationQuickParseMode"
OnReparse="ReparseCurationCellAsync" />
}
@if (isEditorOpen)
@@ -328,7 +334,10 @@
private bool isCurationOpen;
private bool isCurationLoading;
private bool isCurationSaving;
private bool isCurationReparsing;
private bool isCurationQuickParseMode;
private string? curationError;
private string? curationQuickParseError;
private int? curatingResultId;
private CriticalCellEditorModel? curationModel;
private bool isTableMenuOpen;
@@ -487,6 +496,8 @@
}
isCurationSaving = false;
isCurationReparsing = false;
isCurationQuickParseMode = false;
isCurationOpen = true;
await LoadCurationCellAsync(resultId, "The selected cell could not be loaded for curation.");
}
@@ -496,7 +507,10 @@
isCurationOpen = false;
isCurationLoading = false;
isCurationSaving = false;
isCurationReparsing = false;
isCurationQuickParseMode = false;
curationError = null;
curationQuickParseError = null;
curatingResultId = null;
curationModel = null;
await InvokeAsync(StateHasChanged);
@@ -555,12 +569,39 @@
await OpenCellEditorAsync(resultId);
}
private Task EnterCurationQuickParseMode()
{
if (curationModel is null)
{
return Task.CompletedTask;
}
curationQuickParseError = null;
isCurationQuickParseMode = true;
return Task.CompletedTask;
}
private Task CancelCurationQuickParseMode()
{
if (isCurationReparsing)
{
return Task.CompletedTask;
}
curationQuickParseError = null;
isCurationQuickParseMode = false;
return Task.CompletedTask;
}
private async Task LoadCurationCellAsync(int resultId, string loadFailureMessage)
{
curationError = null;
curationQuickParseError = null;
curationModel = null;
curatingResultId = resultId;
isCurationLoading = true;
isCurationQuickParseMode = false;
isCurationReparsing = false;
try
{
@@ -585,6 +626,39 @@
}
}
private async Task ReparseCurationCellAsync()
{
if (curationModel is null || string.IsNullOrWhiteSpace(selectedTableSlug) || curatingResultId is null)
{
return;
}
isCurationReparsing = true;
curationQuickParseError = null;
try
{
var response = await ReparseCriticalCellAsync(curationModel, curatingResultId.Value);
if (response is null)
{
curationQuickParseError = "The selected cell could not be re-parsed.";
return;
}
curationModel = CriticalCellEditorModel.FromResponse(response);
isCurationQuickParseMode = false;
await InvokeAsync(StateHasChanged);
}
catch (Exception exception)
{
curationQuickParseError = exception.Message;
}
finally
{
isCurationReparsing = false;
}
}
private int? FindNextUncuratedResultId(int currentResultId)
{
if (tableDetail?.Cells is null || tableDetail.Cells.Count == 0)
@@ -674,7 +748,7 @@
try
{
var comparisonBaseline = editorModel.Clone();
var response = await LookupService.ReparseCriticalCellAsync(selectedTableSlug, editingResultId.Value, editorModel.ToRequest());
var response = await ReparseCriticalCellAsync(editorModel, editingResultId.Value);
if (response is null)
{
editorReparseError = "The selected cell could not be re-parsed.";
@@ -695,6 +769,9 @@
}
}
private Task<CriticalCellEditorResponse?> ReparseCriticalCellAsync(CriticalCellEditorModel model, int resultId) =>
LookupService.ReparseCriticalCellAsync(selectedTableSlug, resultId, model.ToRequest());
private async Task SaveCellEditorAsync()
{
if (editorModel is null || string.IsNullOrWhiteSpace(selectedTableSlug) || editingResultId is null)