fix(web): prioritize Runs incident focus chain
All checks were successful
Code Review / ai-code-review (push) Successful in 14s
CD Pipeline / tests (push) Successful in 1m35s
CD Pipeline / build-and-deploy (push) Successful in 4m31s
CD Pipeline / post-deploy-checks (push) Successful in 1m47s

This commit is contained in:
Your Name
2026-06-25 22:59:54 +08:00
parent 5e21c734d1
commit 5ee68dc74c

View File

@@ -4539,14 +4539,17 @@ export default function RunsPage() {
).length,
};
}, [runs]);
const normalizedIncidentFocus = useMemo(() => {
const normalized = incidentFilter.trim().toUpperCase();
return INCIDENT_ID_FILTER_RE.test(normalized) ? normalized : null;
}, [incidentFilter]);
const runIncidentIds = useMemo(() => {
const normalizedIncidentFilter = incidentFilter.trim().toUpperCase();
const ids = runs.flatMap((run) => linkedIncidentIds(run.remediation_summary));
if (INCIDENT_ID_FILTER_RE.test(normalizedIncidentFilter)) {
ids.unshift(normalizedIncidentFilter);
if (normalizedIncidentFocus) {
ids.unshift(normalizedIncidentFocus);
}
return Array.from(new Set(ids));
}, [runs, incidentFilter]);
}, [runs, normalizedIncidentFocus]);
const {
statusChains: runStatusChains,
isLoading: runStatusChainsLoading,
@@ -4556,13 +4559,25 @@ export default function RunsPage() {
refreshKey: lastRefresh?.toISOString() ?? null,
limit: PER_PAGE,
});
const normalizedIncidentFocus = useMemo(() => {
const normalized = incidentFilter.trim().toUpperCase();
return INCIDENT_ID_FILTER_RE.test(normalized) ? normalized : null;
}, [incidentFilter]);
const {
statusChains: incidentFocusStatusChains,
isLoading: incidentFocusStatusChainsLoading,
} = useIncidentStatusChains({
incidentIds: normalizedIncidentFocus ? [normalizedIncidentFocus] : [],
projectId: projectFilter || "awoooi",
refreshKey: lastRefresh?.toISOString() ?? null,
limit: 1,
concurrency: 1,
timeoutMs: 8000,
});
const incidentFocusChain = normalizedIncidentFocus
? runStatusChains[normalizedIncidentFocus]
? incidentFocusStatusChains[normalizedIncidentFocus] ?? runStatusChains[normalizedIncidentFocus]
: null;
const incidentFocusLoading = Boolean(
normalizedIncidentFocus
&& !incidentFocusChain
&& (incidentFocusStatusChainsLoading || runStatusChainsLoading)
);
return (
<div className="space-y-6">
@@ -4714,7 +4729,7 @@ export default function RunsPage() {
<span className="border border-[#d8d3c7] bg-white px-2 py-1 text-xs font-semibold text-[#5f5b52]">
{incidentFocusChain
? tIncidentFocus("states.ready")
: runStatusChainsLoading
: incidentFocusLoading
? tIncidentFocus("states.loading")
: tIncidentFocus("states.missing")}
</span>
@@ -4733,7 +4748,7 @@ export default function RunsPage() {
</div>
) : (
<div className="px-4 py-5 text-sm text-[#5f5b52]">
{runStatusChainsLoading
{incidentFocusLoading
? tIncidentFocus("loading")
: tIncidentFocus("missing", { incidentId: normalizedIncidentFocus })}
</div>