33 lines
857 B
TypeScript
33 lines
857 B
TypeScript
import { Task } from "@/model/task";
|
|
import { filterTasks, type TaskFilter } from "./filterTasks";
|
|
import { GroupBy } from "./groupBy";
|
|
import { groupTasks, type TaskGroup } from "./groupTasks";
|
|
|
|
export type DashboardViewOptions = {
|
|
filter?: TaskFilter;
|
|
groupBy?: GroupBy;
|
|
selectedId?: string;
|
|
};
|
|
|
|
export type DashboardView = {
|
|
visibleTasks: Task[];
|
|
groups: TaskGroup[];
|
|
selected: Task | undefined;
|
|
};
|
|
|
|
export function buildDashboardView(
|
|
tasks: Task[],
|
|
options: DashboardViewOptions = {},
|
|
): DashboardView {
|
|
const filter = options.filter ?? {};
|
|
const groupBy = options.groupBy ?? GroupBy.NONE;
|
|
|
|
const visibleTasks = filterTasks(tasks, filter);
|
|
const groups = groupTasks(visibleTasks, groupBy);
|
|
const selected = options.selectedId
|
|
? tasks.find((t) => t.id === options.selectedId)
|
|
: undefined;
|
|
|
|
return { visibleTasks, groups, selected };
|
|
}
|