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