Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.
import { dayOfWeek } from "./dates_day_of_week.ts"; ← from dates.day-of-week ^1.0.0 · built alongside by fune
import { roundDiv } from "./math_round_div.ts"; ← from math.round-div ^1.0.0 · built alongside by fune
import { dueStatus } from "./todo_due_status.ts"; ← from todo.due-status ^1.0.0 · built alongside by fune
import { type Todo } from "./todo_item.ts"; ← from todo.item ^1.0.0 · built alongside by fune
import { type TodoSummary } from "./todo_summary_types.ts";
/**
* Counts for a todo list. percentDone rounds down so 100 means everything is
* done; overdue and dueToday agree with dueStatus and todo.group-by-due.
*/
export function summariseTodos(todos: readonly Todo[], today: string): TodoSummary {
dayOfWeek(today); // a bad today is an error even for an empty list
let done = 0;
let overdue = 0;
let dueToday = 0;
for (const todo of todos) {
const status = dueStatus(todo, today);
if (todo.done) done += 1;
if (status === "overdue") overdue += 1;
if (status === "today") dueToday += 1;
}
const total = todos.length;
const active = total - done;
return {
total,
active,
done,
overdue,
dueToday,
percentDone: total === 0 ? 0 : roundDiv(done * 100, total, "down"),
itemsLeft: active === 1 ? "1 item left" : `${active} items left`,
};
}