Skip to content

Commit 6530469

Browse files
committed
feat: sort targets
1 parent 1a6d2b2 commit 6530469

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

src/Terrabuild.UI/src/App.tsx

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,7 @@ const App = () => {
788788
setSelectedProject(project);
789789
setSelectedNodeId(project.id);
790790
setSelectedTargetKey(null);
791+
const freshResults: Record<string, TargetSummary> = {};
791792
await Promise.all(
792793
project.targets.map(async (node) => {
793794
const cacheKey = `${node.projectHash}/${node.target}/${node.targetHash}`;
@@ -801,14 +802,45 @@ const App = () => {
801802
return;
802803
}
803804
const summary = (await response.json()) as TargetSummary;
804-
setNodeResults((prev) => ({ ...prev, [cacheKey]: summary }));
805+
freshResults[cacheKey] = summary;
805806
})
806807
);
807-
if (project.targets.length > 0) {
808-
const first = project.targets[0];
809-
const cacheKey = `${first.projectHash}/${first.target}/${first.targetHash}`;
810-
await showTargetLog(cacheKey, first);
808+
if (Object.keys(freshResults).length > 0) {
809+
setNodeResults((prev) => ({ ...prev, ...freshResults }));
811810
}
811+
if (project.targets.length === 0) {
812+
return;
813+
}
814+
const resultsLookup = { ...nodeResults, ...freshResults };
815+
const newestTarget = project.targets.reduce((newest, candidate) => {
816+
if (!newest) {
817+
return candidate;
818+
}
819+
const newestKey =
820+
`${newest.projectHash}/${newest.target}/${newest.targetHash}`;
821+
const candidateKey =
822+
`${candidate.projectHash}/${candidate.target}/${candidate.targetHash}`;
823+
const newestSummary = resultsLookup[newestKey];
824+
const candidateSummary = resultsLookup[candidateKey];
825+
const newestTime = newestSummary
826+
? Date.parse(newestSummary.startedAt || newestSummary.endedAt)
827+
: Number.NEGATIVE_INFINITY;
828+
const candidateTime = candidateSummary
829+
? Date.parse(candidateSummary.startedAt || candidateSummary.endedAt)
830+
: Number.NEGATIVE_INFINITY;
831+
if (candidateTime === newestTime) {
832+
return candidate.target.localeCompare(newest.target) > 0
833+
? candidate
834+
: newest;
835+
}
836+
return candidateTime > newestTime ? candidate : newest;
837+
}, null as GraphNode | null);
838+
if (!newestTarget) {
839+
return;
840+
}
841+
const newestKey =
842+
`${newestTarget.projectHash}/${newestTarget.target}/${newestTarget.targetHash}`;
843+
await showTargetLog(newestKey, newestTarget);
812844
};
813845

814846
const loadTargetLog = async (key: string, target: GraphNode) => {

src/Terrabuild.UI/src/components/NodeDetailsPanel.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,24 @@ const NodeDetailsPanel = ({
1414
nodeResults,
1515
onSelectTarget,
1616
}: NodeDetailsPanelProps) => {
17+
const sortedTargets = selectedProject
18+
? [...selectedProject.targets].sort((left, right) => {
19+
const leftKey = `${left.projectHash}/${left.target}/${left.targetHash}`;
20+
const rightKey = `${right.projectHash}/${right.target}/${right.targetHash}`;
21+
const leftSummary = nodeResults[leftKey];
22+
const rightSummary = nodeResults[rightKey];
23+
const leftTime = leftSummary
24+
? Date.parse(leftSummary.startedAt || leftSummary.endedAt)
25+
: Number.POSITIVE_INFINITY;
26+
const rightTime = rightSummary
27+
? Date.parse(rightSummary.startedAt || rightSummary.endedAt)
28+
: Number.POSITIVE_INFINITY;
29+
if (leftTime !== rightTime) {
30+
return leftTime - rightTime;
31+
}
32+
return left.target.localeCompare(right.target);
33+
})
34+
: [];
1735
return (
1836
<Paper withBorder p="md" radius="md" shadow="md">
1937
<Stack spacing="xs">
@@ -22,7 +40,7 @@ const NodeDetailsPanel = ({
2240
<>
2341
<Text fw={600}>{selectedProject.directory}</Text>
2442
<Stack spacing="xs">
25-
{selectedProject.targets.map((target) => {
43+
{sortedTargets.map((target) => {
2644
const cacheKey =
2745
`${target.projectHash}/${target.target}/${target.targetHash}`;
2846
const summary = nodeResults[cacheKey];

0 commit comments

Comments
 (0)