Files
xboct-flow/src/dashboard/filterTasks.ts
T

39 lines
1021 B
TypeScript

import { Task, TaskPriority, TaskStatus } from "@/model/task";
export type TaskFilter = {
statuses?: TaskStatus[];
priorities?: TaskPriority[];
query?: string;
tags?: string[];
};
export function filterTasks(tasks: Task[], filter: TaskFilter): Task[] {
const statuses = filter.statuses;
const priorities = filter.priorities;
const tags = filter.tags;
const query = filter.query?.trim().toLowerCase() ?? "";
return tasks.filter((task) => {
if (statuses && statuses.length > 0 && !statuses.includes(task.status)) {
return false;
}
if (
priorities &&
priorities.length > 0 &&
!priorities.includes(task.priority)
) {
return false;
}
if (tags && tags.length > 0) {
const hasAll = tags.every((tag) => task.tags.includes(tag));
if (!hasAll) return false;
}
if (query) {
const inTitle = task.title.toLowerCase().includes(query);
const inDescription = task.description.toLowerCase().includes(query);
if (!inTitle && !inDescription) return false;
}
return true;
});
}