import type { TaskRun, TaskRunPage } from "../../shared/tasks"; export const emptyTaskHistory: TaskRunPage = { runs: [], nextCursor: null }; export const activeRun = (run: TaskRun) => ["dispatching", "pending", "running"].includes(run.status); export function retainedRuns(latest: TaskRunPage, previous: TaskRunPage) { const overlap = latest.runs.some((run) => previous.runs.some((item) => item.id === run.id), ); return { overlap, runs: (overlap ? previous.runs : []).filter( (run) => !latest.runs.some((item) => item.id === run.id), ), }; } export function unsettledCursor(retained: TaskRun[], previous: TaskRunPage) { const unfinished = retained.find(activeRun) ?? retained.find((run) => run.status === "dispatch_error"); const before = unfinished && previous.runs[ previous.runs.findIndex((run) => run.id === unfinished.id) - 1 ]; return before ? { id: before.id, createdAt: before.createdAt } : null; }