@model StoryIntelligenceProgressViewModel @{ ViewData["Title"] = "Review locations"; var locationCandidates = Model.LocationReview.Candidates.ToList(); } Story Intelligence Review Locations Review place suggestions that need a create, link, alias, or ignore decision. @if (TempData["OnboardingStoryIntelligenceError"] is string error) { @error } @if (TempData["OnboardingStoryIntelligenceMessage"] is string message) { @message } @if (Model.LocationReview.Candidates.Count == 0) { No location decisions are waiting. Locations are already up to date, or there were no location suggestions ready to import. Back to Review Centre } else { Link existing matches Expand all Collapse all Search Filter Needs review Existing matches New locations All visible candidates Showing @Math.Min(locationCandidates.Count, 24).ToString("N0") of @locationCandidates.Count.ToString("N0") Previous Next @for (var i = 0; i < locationCandidates.Count; i++) { var candidate = locationCandidates[i]; var status = candidate.IsExistingMatch ? "existing" : "new"; var searchText = string.Join(" ", new[] { candidate.LocationName, candidate.ExistingLocationName, candidate.Category, candidate.ParentLocationHint }); @candidate.LocationName @candidate.Category · @candidate.AppearsInScenes.ToString("N0") scene@(candidate.AppearsInScenes == 1 ? string.Empty : "s") @candidate.Confidence First appearance@Display(candidate.ExampleFirstAppearance) Parent hint@Display(candidate.ParentLocationHint) Existing match@(candidate.ExistingLocationName ?? "None") @if (!string.IsNullOrWhiteSpace(candidate.ExampleContext)) { Scene context @candidate.ExampleContext } @if (candidate.EvidenceSummaries.Any()) { Evidence from @candidate.AppearsInScenes.ToString("N0") scene@(candidate.AppearsInScenes == 1 ? string.Empty : "s") @foreach (var evidence in candidate.EvidenceSummaries) { @evidence } } @if (candidate.IsExistingMatch) { Possible existing location @candidate.LocationName may already be @candidate.ExistingLocationName. Choose whether to link them or create a separate location. } Decision Create new location Link existing location Alias of another location Ignore Import name Alias/variant target Choose location... @foreach (var target in Model.LocationReview.Candidates.Where(target => !string.Equals(target.Key, candidate.Key, StringComparison.OrdinalIgnoreCase))) { @target.LocationName@(target.IsExistingMatch ? $" -> {target.ExistingLocationName}" : string.Empty) } } Back to Review Centre Save location decisions } @section Scripts { } @functions { private static string Display(string? value) => string.IsNullOrWhiteSpace(value) ? "Not detected" : value; }
Story Intelligence
Review place suggestions that need a create, link, alias, or ignore decision.
Locations are already up to date, or there were no location suggestions ready to import.
@candidate.ExampleContext
@candidate.LocationName may already be @candidate.ExistingLocationName. Choose whether to link them or create a separate location.