[verified] redesign trash with deadline groups
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user