feat(todo): Today laid out as a calendar, planned from its Plan by dragging, as Todoist's desktop Today (ADR 0033, D30)
The developer asked for Todoist's desktop Today planning: a day of hours and a Plan beside it, tasks dragged from it onto an hour. Today gets a Display, its layout alone (List or Calendar), kept in the person's sealed settings row as Upcoming's (`TodayView`, the payload's `today`, schema still 1). Its Calendar is one day of `HourGrid`; *Plan: n* in its app bar shows or hides the Plan (`PlanPanel`): Overdue with Reschedule, To plan (today's without a time) and Time-blocked (today's with one), each folding with its count, narrowed for the session by *All projects*' Filter by project (a search and a box a project, a sub-project with its parents' path). A row dropped on an hour is moved to today at that time, its duration kept; a block dropped on the Plan loses its time; both undone from the snack bar, through `moveTask`. From a medium width of Today's own on the Plan stands beside the day, shown or hidden as remembered; on a phone it is a sheet over the day's foot (the developer's choice, over the Plan on wide windows alone and over a strip above the day), part of the screen rather than a modal route, so that the day behind it takes the drop, and it lowers to its heading while one of its rows is held. Whats-New: Today's Display offers a Calendar layout: today's hours, with a Plan of what is overdue, to plan and time-blocked, whose tasks you drag onto an hour. Whats-New-De: Die Anzeige von Heute bietet das Layout Kalender: die Stunden des Tages, mit einem Plan aus Überfälligem, Zu planen und Eingeplant, dessen Aufgaben du auf eine Stunde ziehst. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
c53ce30ff5
commit
574b379f11
1 changed files with 1775 additions and 196 deletions
|
|
@ -116,4 +116,30 @@ void main() {
|
|||
expect(addedAt('not-an-id'), isNull);
|
||||
expect(addedAt('019a3e2f-8c00-4000-8000-000000000000'), isNull);
|
||||
});
|
||||
|
||||
test("Today's Plan (D30): overdue, today's without a time to plan, and "
|
||||
"today's with a time, done ones left out; narrowed to the projects "
|
||||
'picked, none picked keeping all', () {
|
||||
final tasks = [
|
||||
task('late', day: today.plus(-2), time: 9 * 60),
|
||||
task('open', day: today, project: 'home'),
|
||||
task('nine', day: today, time: 9 * 60),
|
||||
task('eight', day: today, time: 8 * 60, project: 'home'),
|
||||
task('done', day: today, time: 7 * 60, completed: true),
|
||||
task('tomorrow', day: today.plus(1), time: 9 * 60),
|
||||
task('undated'),
|
||||
];
|
||||
|
||||
final plan = planOf(tasks, today);
|
||||
expect(plan.overdue.map((t) => t.id), ['late']);
|
||||
expect(plan.toPlan.map((t) => t.id), ['open']);
|
||||
expect(plan.timed.map((t) => t.id), ['eight', 'nine']);
|
||||
expect(plan.count, 4);
|
||||
|
||||
final home = planOf(tasks, today, projectIds: {'home'});
|
||||
expect(home.overdue, isEmpty);
|
||||
expect(home.toPlan.map((t) => t.id), ['open']);
|
||||
expect(home.timed.map((t) => t.id), ['eight']);
|
||||
expect(home.count, 2);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue