timetracker/.tasks/done/TT-009-reports-feature-ui.md
2026-08-03 21:51:48 +02:00

82 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TT-009 — Reports Feature UI
**Type:** Story
**Priority:** High
**Labels:** ui, feature, reports, charts
**Depends on:** TT-005
**Blocks:**
---
## Summary
Implement the Reports screen with day / week / month views and bar charts
powered by `fl_chart`. Users can navigate between periods and filter by project.
## UI Specification
### ReportsScreen layout
```
┌──────────────────────────────┐
│ AppBar: "Reports" [export] │
│ [Day] [Week] [Month] tabs │
├──────────────────────────────┤
│ ◀ Mon 7 Jul Sun 13 Jul ▶ │
│ │
│ Total: 22h 15m │
│ │
│ ┌────────────────────────┐ │
│ │ Bar chart (fl_chart) │ │
│ │ Mon Tue Wed Thu Fri │ │
│ └────────────────────────┘ │
│ │
│ By project: │
│ 🟦 My Project 14h (63%) │
│ 🟩 Backend 8h (36%) │
└──────────────────────────────┘
```
### Views
| Tab | X-axis | Bar value |
|-------|-----------------|-------------------|
| Day | Hours (023) | Minutes per hour |
| Week | Weekdays (MoSu)| Hours per day |
| Month | Weeks 15 | Hours per week |
### Widgets to build
| Widget | File | Description |
|--------|------|-------------|
| `ReportsScreen` | `reports_screen.dart` | Tabbed screen + period navigator |
| `PeriodNavigator` | `widgets/period_navigator.dart` | ◀ Period label ▶ |
| `DurationBarChart` | `widgets/duration_bar_chart.dart` | fl_chart BarChart wrapper |
| `ProjectBreakdownList` | `widgets/project_breakdown_list.dart` | Per-project totals + % |
| `SummaryHeader` | `widgets/summary_header.dart` | Total duration + avg daily |
### Period Navigation
- "Previous" / "Next" arrows call `reportsNotifier.goToPrevious()` / `.goToNext()`
- Tapping the period label opens a `DateRangePicker` (week/month snapped)
### Project Filter
- Optional `DropdownButton` in AppBar actions to filter by project
- Default: all projects
## Acceptance Criteria
- [ ] Three tabs: Day / Week / Month with distinct chart shapes
- [ ] Period navigator updates charts and summary reactively
- [ ] `DurationBarChart` renders correct number of bars per period
- [ ] Y-axis labeled in hours; bars show duration for that bucket
- [ ] Project breakdown list sorted by duration descending
- [ ] Export button in AppBar triggers export flow (see TT-010)
- [ ] Widget test: week view renders 7 bars
- [ ] Widget test: navigating period changes displayed label
## Files to create / modify
- `lib/features/reports/presentation/reports_screen.dart` (replace stub)
- `lib/features/reports/presentation/widgets/period_navigator.dart`
- `lib/features/reports/presentation/widgets/duration_bar_chart.dart`
- `lib/features/reports/presentation/widgets/project_breakdown_list.dart`
- `lib/features/reports/presentation/widgets/summary_header.dart`
- `test/features/reports/reports_screen_test.dart`
## Notes
- See `.ai/features/reports.md` for Drift query details and chart data format
- `fl_chart` docs: https://pub.dev/packages/fl_chart