diff --git a/src/renderer/src/pages/HomePage.tsx b/src/renderer/src/pages/HomePage.tsx index a99b9692..a9055fc1 100644 --- a/src/renderer/src/pages/HomePage.tsx +++ b/src/renderer/src/pages/HomePage.tsx @@ -1,3 +1,4 @@ +import { newestRuns } from "./runs/newest-runs"; import { isBusinessTask } from "./work/task-helpers"; import { useMemo, useState, type CSSProperties } from "react"; import { Avatar, Button, Icon, Pill } from "../shared/ui"; @@ -222,7 +223,7 @@ function RunActivityCard({ agents: AgentRecord[]; onViewAll: () => void; }) { - const recent = taskRuns.slice(0, 6); + const recent = newestRuns(taskRuns, 6); return (
diff --git a/src/renderer/src/pages/runs/newest-runs.ts b/src/renderer/src/pages/runs/newest-runs.ts new file mode 100644 index 00000000..44719c5f --- /dev/null +++ b/src/renderer/src/pages/runs/newest-runs.ts @@ -0,0 +1,4 @@ +/** The newest `count` runs, newest first; the snapshot lists runs oldest first (time, then insertion). */ +export function newestRuns(runs: T[], count: number): T[] { + return runs.slice(-count).reverse(); +} diff --git a/tests/unit/newest-runs.test.ts b/tests/unit/newest-runs.test.ts new file mode 100644 index 00000000..0b1bcb75 --- /dev/null +++ b/tests/unit/newest-runs.test.ts @@ -0,0 +1,10 @@ +import { describe, expect, test } from "vitest"; +import { newestRuns } from "../../src/renderer/src/pages/runs/newest-runs"; + +describe("the home page's recent runs", () => { + test("are the newest ones, newest first, from the snapshot's oldest-first list", () => { + const runs = Array.from({ length: 10 }, (_, index) => ({ id: `run_${index}` })); + expect(newestRuns(runs, 3).map((run) => run.id)).toEqual(["run_9", "run_8", "run_7"]); + expect(newestRuns(runs.slice(0, 2), 6).map((run) => run.id)).toEqual(["run_1", "run_0"]); + }); +});