Expose imported critical data in web app

This commit is contained in:
2026-03-14 02:40:57 +01:00
parent c7467aad13
commit 73ce64e879
9 changed files with 331 additions and 44 deletions

View File

@@ -0,0 +1,94 @@
@using System.Text.Json
<div class="result-card">
<h3>@Result.CriticalTableName</h3>
<div class="result-stats">
<span class="stat-pill">Table: <code>@Result.CriticalType</code></span>
<span class="stat-pill">Column: @Result.ColumnLabel</span>
<span class="stat-pill">Role: @Result.ColumnRole</span>
<span class="stat-pill">Band: @Result.RollBand</span>
<span class="stat-pill">Roll: @Result.Roll</span>
<span class="stat-pill">Status: @Result.ParseStatus</span>
</div>
<div class="detail-grid">
<div class="detail-item">
<span class="detail-label">Family</span>
<span>@Result.CriticalFamily</span>
</div>
<div class="detail-item">
<span class="detail-label">Source</span>
<span>@Result.SourceDocument</span>
</div>
<div class="detail-item">
<span class="detail-label">Column Key</span>
<span><code>@Result.Column</code></span>
</div>
<div class="detail-item">
<span class="detail-label">Roll Range</span>
<span>@FormatRollRange(Result.RollBandMinRoll, Result.RollBandMaxRoll)</span>
</div>
@if (!string.IsNullOrWhiteSpace(Result.Group))
{
<div class="detail-item">
<span class="detail-label">Group</span>
<span>@(string.IsNullOrWhiteSpace(Result.GroupLabel) ? Result.Group : $"{Result.GroupLabel} ({Result.Group})")</span>
</div>
}
</div>
@if (!string.IsNullOrWhiteSpace(Result.TableNotes))
{
<p class="muted">@Result.TableNotes</p>
}
<p><strong>@Result.Description</strong></p>
@if (!string.IsNullOrWhiteSpace(Result.AffixText))
{
<div class="callout">
<h4>Affix Text</h4>
<p class="stacked-copy">@Result.AffixText</p>
</div>
}
<details class="details-block">
<summary>Raw Imported Cell</summary>
<pre class="code-block">@Result.RawCellText</pre>
</details>
<details class="details-block">
<summary>Parsed JSON</summary>
<pre class="code-block">@FormatJson(Result.ParsedJson)</pre>
</details>
</div>
@code {
[Parameter, EditorRequired]
public CriticalLookupResponse Result { get; set; } = null!;
private static string FormatRollRange(int minRoll, int? maxRoll) =>
maxRoll is null
? $"{minRoll}+"
: minRoll == maxRoll
? minRoll.ToString()
: $"{minRoll}-{maxRoll}";
private static string FormatJson(string value)
{
if (string.IsNullOrWhiteSpace(value))
{
return "{}";
}
try
{
using var document = JsonDocument.Parse(value);
return JsonSerializer.Serialize(document.RootElement, new JsonSerializerOptions { WriteIndented = true });
}
catch (JsonException)
{
return value;
}
}
}

View File

@@ -0,0 +1,73 @@
<div class="table-list-item">
<strong>@Table.Label</strong>
<div class="detail-grid">
<div class="detail-item">
<span class="detail-label">Key</span>
<span><code>@Table.Key</code></span>
</div>
<div class="detail-item">
<span class="detail-label">Family</span>
<span>@Table.Family</span>
</div>
<div class="detail-item">
<span class="detail-label">Source</span>
<span>@Table.SourceDocument</span>
</div>
<div class="detail-item">
<span class="detail-label">Columns</span>
<span>@Table.Columns.Count</span>
</div>
<div class="detail-item">
<span class="detail-label">Groups</span>
<span>@Table.Groups.Count</span>
</div>
<div class="detail-item">
<span class="detail-label">Roll Bands</span>
<span>@Table.RollBands.Count</span>
</div>
</div>
@if (!string.IsNullOrWhiteSpace(Table.Notes))
{
<p class="muted">@Table.Notes</p>
}
<div class="chip-row">
@foreach (var column in Table.Columns)
{
<span class="chip">@column.Label <small>(@column.Key, @column.Role, #@column.SortOrder)</small></span>
}
</div>
@if (Table.Groups.Count > 0)
{
<div class="chip-row">
@foreach (var group in Table.Groups)
{
<span class="chip">@group.Label <small>(@group.Key, #@group.SortOrder)</small></span>
}
</div>
}
<details class="details-block">
<summary>Roll Bands (@Table.RollBands.Count)</summary>
<div class="chip-row">
@foreach (var rollBand in Table.RollBands)
{
<span class="chip">@rollBand.Label <small>(@FormatRollRange(rollBand.MinRoll, rollBand.MaxRoll), #@rollBand.SortOrder)</small></span>
}
</div>
</details>
</div>
@code {
[Parameter, EditorRequired]
public CriticalTableReference Table { get; set; } = null!;
private static string FormatRollRange(int minRoll, int? maxRoll) =>
maxRoll is null
? $"{minRoll}+"
: minRoll == maxRoll
? minRoll.ToString()
: $"{minRoll}-{maxRoll}";
}