[verified] redesign trash with deadline groups
ci / gitleaks (push) Successful in 11s
ci / docker (push) Successful in 8m0s

This commit is contained in:
2026-09-21 09:00:07 +08:00
parent c7bb9742f1
commit 740eae8a59
11 changed files with 234 additions and 55 deletions
+21
View File
@@ -85,6 +85,27 @@ export function groupTaskTree<T extends MinimalTask>(tasks: T[]) {
}))
}
export type TrashTaskGroup<T extends MinimalTask> = {
key: 'overdue' | 'upcoming' | 'undated'
label: '已过期' | '未来截止' | '无截止日期'
nodes: Array<{ task: T; subtasks: T[] }>
}
export function groupTrashTaskTree<T extends MinimalTask>(tasks: T[], now = new Date()): TrashTaskGroup<T>[] {
const nodes = groupTaskTree(tasks)
const groups: TrashTaskGroup<T>[] = [
{ key: 'overdue', label: '已过期', nodes: [] },
{ key: 'upcoming', label: '未来截止', nodes: [] },
{ key: 'undated', label: '无截止日期', nodes: [] },
]
for (const node of nodes) {
const due = node.task.due_at ? Date.parse(node.task.due_at) : Number.NaN
const key = Number.isFinite(due) ? (due < now.valueOf() ? 'overdue' : 'upcoming') : 'undated'
groups.find((group) => group.key === key)!.nodes.push(node)
}
return groups.filter((group) => group.nodes.length)
}
export function classifyTaskForToday(
task: Pick<MinimalTask, 'completed' | 'due_at'>,
start: Date,