From a2b3a049b8c629d90037f3421a53be32aeb83562 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Sat, 14 Mar 2026 10:54:52 +0100 Subject: [PATCH] Show critical branch details in web lookup --- .gitignore | 1 + .../Shared/CriticalLookupResultCard.razor | 25 ++++++++++++++++++ .../Features/LookupContracts.cs | 10 +++++++ .../Features/LookupService.cs | 12 +++++++++ src/RolemasterDb.App/wwwroot/app.css | 26 +++++++++++++++++++ 5 files changed, 74 insertions(+) diff --git a/.gitignore b/.gitignore index f0203f0..21e843d 100644 --- a/.gitignore +++ b/.gitignore @@ -277,6 +277,7 @@ ServiceFabricBackup/ # SQLite transient sidecars *.db-shm *.db-wal +/rolemaster.db # Business Intelligence projects *.rdl.data diff --git a/src/RolemasterDb.App/Components/Shared/CriticalLookupResultCard.razor b/src/RolemasterDb.App/Components/Shared/CriticalLookupResultCard.razor index 14f4d6f..3b6672f 100644 --- a/src/RolemasterDb.App/Components/Shared/CriticalLookupResultCard.razor +++ b/src/RolemasterDb.App/Components/Shared/CriticalLookupResultCard.razor @@ -52,6 +52,31 @@ } + @if (Result.Branches.Count > 0) + { +
+

Conditional Branches

+
+ @foreach (var branch in Result.Branches) + { +
+
@branch.ConditionText
+ + @if (!string.IsNullOrWhiteSpace(branch.Description)) + { +

@branch.Description

+ } + + @if (!string.IsNullOrWhiteSpace(branch.AffixText)) + { +

@branch.AffixText

+ } +
+ } +
+
+ } +
Raw Imported Cell
@Result.RawCellText
diff --git a/src/RolemasterDb.App/Features/LookupContracts.cs b/src/RolemasterDb.App/Features/LookupContracts.cs index 51c7e14..657f8db 100644 --- a/src/RolemasterDb.App/Features/LookupContracts.cs +++ b/src/RolemasterDb.App/Features/LookupContracts.cs @@ -46,6 +46,15 @@ public sealed record CriticalLookupRequest( int Roll, string? Group); +public sealed record CriticalBranchLookupResponse( + string BranchKind, + string? ConditionKey, + string ConditionText, + string Description, + string? AffixText, + string RawText, + int SortOrder); + public sealed record CriticalLookupResponse( string CriticalType, string CriticalTableName, @@ -64,6 +73,7 @@ public sealed record CriticalLookupResponse( string RawCellText, string Description, string? AffixText, + IReadOnlyList Branches, string ParseStatus, string ParsedJson); diff --git a/src/RolemasterDb.App/Features/LookupService.cs b/src/RolemasterDb.App/Features/LookupService.cs index a2f380d..8bb2217 100644 --- a/src/RolemasterDb.App/Features/LookupService.cs +++ b/src/RolemasterDb.App/Features/LookupService.cs @@ -105,6 +105,7 @@ public sealed class LookupService(IDbContextFactory dbConte return await dbContext.CriticalResults .AsNoTracking() + .AsSplitQuery() .Where(item => item.CriticalTable.Slug == criticalType && item.CriticalColumn.ColumnKey == column && @@ -131,6 +132,17 @@ public sealed class LookupService(IDbContextFactory dbConte item.RawCellText, item.DescriptionText, item.RawAffixText, + item.Branches + .OrderBy(branch => branch.SortOrder) + .Select(branch => new CriticalBranchLookupResponse( + branch.BranchKind, + branch.ConditionKey, + branch.ConditionText, + branch.DescriptionText, + branch.RawAffixText, + branch.RawText, + branch.SortOrder)) + .ToList(), item.ParseStatus, item.ParsedJson)) .SingleOrDefaultAsync(cancellationToken); diff --git a/src/RolemasterDb.App/wwwroot/app.css b/src/RolemasterDb.App/wwwroot/app.css index 69a8c87..9d4d3a9 100644 --- a/src/RolemasterDb.App/wwwroot/app.css +++ b/src/RolemasterDb.App/wwwroot/app.css @@ -229,6 +229,32 @@ textarea { color: #5b4327; } +.branch-list { + display: grid; + gap: 0.75rem; +} + +.branch-card { + padding: 0.8rem 0.85rem; + border-radius: 14px; + background: rgba(255, 252, 244, 0.75); + border: 1px solid rgba(127, 96, 55, 0.14); +} + +.branch-condition { + font-size: 0.82rem; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; + color: #75562f; +} + +.branch-copy, +.branch-affix { + margin-top: 0.55rem; + margin-bottom: 0; +} + .error-text { color: #8d2b1e; }