feat(ui): add Node column + filter to SiteCalls grid

This commit is contained in:
Joseph Doherty
2026-05-23 18:08:25 -04:00
parent b9c017136d
commit d18a6e6fa0
7 changed files with 74 additions and 6 deletions

View File

@@ -58,6 +58,17 @@
}
</select>
</div>
@* Task 17: free-text Node filter — exact match against the
SiteCall.SourceNode column. The Source site dropdown narrows
to a site; Node narrows further within that site (or across
sites if Source site is "Any"). *@
<div class="col-auto">
<label class="form-label small mb-1" for="sc-node">Node</label>
<input id="sc-node" type="text" class="form-control form-control-sm"
style="min-width: 150px;" placeholder="Any"
data-test="site-calls-filter-node"
@bind="_nodeFilter" />
</div>
<div class="col-auto">
<label class="form-label small mb-1" for="sc-from">From</label>
<input id="sc-from" type="datetime-local" class="form-control form-control-sm"
@@ -125,6 +136,7 @@
<tr>
<th>Tracked operation</th>
<th>Source site</th>
<th>Node</th>
<th>Channel</th>
<th>Target</th>
<th>Status</th>
@@ -143,6 +155,7 @@
title="Double-click for full detail">
<td><code class="small" title="@c.TrackedOperationId">@ShortId(c.TrackedOperationId)</code></td>
<td><span class="small">@SiteName(c.SourceSite)</span></td>
<td><span class="small">@(c.SourceNode ?? "—")</span></td>
<td>@c.Channel</td>
<td>@c.Target</td>
<td>
@@ -253,6 +266,9 @@
<dt class="col-sm-3">Source site</dt>
<dd class="col-sm-9">@SiteName(det.SourceSite)</dd>
<dt class="col-sm-3">Source node</dt>
<dd class="col-sm-9">@(string.IsNullOrEmpty(d.SourceNode) ? "—" : d.SourceNode)</dd>
<dt class="col-sm-3">Channel</dt>
<dd class="col-sm-9">@det.Channel</dd>

View File

@@ -82,6 +82,7 @@ public partial class SiteCallsReport
private string _channelFilter = string.Empty;
private string _siteFilter = string.Empty;
private string _targetFilter = string.Empty;
private string _nodeFilter = string.Empty;
private bool _stuckOnly;
private DateTime? _fromFilter;
private DateTime? _toFilter;
@@ -204,7 +205,8 @@ public partial class SiteCallsReport
ToUtc: ToUtc(_toFilter),
AfterCreatedAtUtc: cursor.AfterCreatedAtUtc,
AfterId: cursor.AfterId,
PageSize: PageSize);
PageSize: PageSize,
SourceNodeFilter: NullIfEmpty(_nodeFilter));
var response = await CommunicationService.QuerySiteCallsAsync(request);
if (response.Success)
@@ -393,6 +395,7 @@ public partial class SiteCallsReport
_channelFilter = string.Empty;
_siteFilter = string.Empty;
_targetFilter = string.Empty;
_nodeFilter = string.Empty;
_stuckOnly = false;
_fromFilter = null;
_toFilter = null;
@@ -403,6 +406,7 @@ public partial class SiteCallsReport
!string.IsNullOrEmpty(_channelFilter) ||
!string.IsNullOrEmpty(_siteFilter) ||
!string.IsNullOrEmpty(_targetFilter) ||
!string.IsNullOrEmpty(_nodeFilter) ||
_stuckOnly ||
_fromFilter != null ||
_toFilter != null;