This commit is contained in:
2026-04-02 14:29:36 +02:00
parent a270deb2db
commit 039fa0bc80
54 changed files with 4944 additions and 170 deletions

View File

@@ -0,0 +1,108 @@
---
phase: 02-dashboard-charts-and-layout
plan: 01
subsystem: ui
tags: [react-router, useSearchParams, select, lucide-react, i18n]
# Dependency graph
requires:
- phase: 01-design-foundation-and-primitives
provides: "Design tokens, PageShell, SummaryStrip, ChartEmptyState component"
provides:
- "useMonthParam hook for URL-based month state"
- "MonthNavigator component with prev/next arrows and month dropdown"
- "i18n keys for chart labels and month navigation (EN + DE)"
affects: [02-02, 02-03, dashboard-page-refactor]
# Tech tracking
tech-stack:
added: []
patterns: [URL search param state via useMonthParam, locale-aware month formatting]
key-files:
created:
- src/hooks/useMonthParam.ts
- src/components/dashboard/MonthNavigator.tsx
modified:
- src/i18n/en.json
- src/i18n/de.json
key-decisions:
- "MonthNavigator uses Select dropdown (not popover) for month jump -- consistent with existing form patterns"
- "formatMonthLabel uses Date.toLocaleDateString for locale-aware month display"
- "ChartEmptyState already existed from Phase 1 -- no changes needed"
patterns-established:
- "useMonthParam: URL state hook pattern using useSearchParams callback form to preserve other params"
- "MonthNavigator accepts t() prop for presentational i18n (Phase 1 pattern continued)"
requirements-completed: [UI-DASH-01]
# Metrics
duration: 2min
completed: 2026-03-16
---
# Phase 2 Plan 1: Month Navigation and Chart Infrastructure Summary
**URL-based month navigation hook with MonthNavigator dropdown/arrows and chart i18n keys in EN/DE**
## Performance
- **Duration:** 2 min
- **Started:** 2026-03-16T12:01:18Z
- **Completed:** 2026-03-16T12:03:21Z
- **Tasks:** 2
- **Files modified:** 4
## Accomplishments
- useMonthParam hook reads/writes `?month=YYYY-MM` from URL with current month fallback and year-rollover-safe navigation
- MonthNavigator renders prev/next chevron buttons and a Select dropdown listing available budget months with locale-aware formatting
- Added 10 new i18n keys under `dashboard.*` for chart labels, month navigation, and empty states in both English and German
## Task Commits
Each task was committed atomically:
1. **Task 1: Create useMonthParam hook and MonthNavigator component** - `4481950` (feat)
2. **Task 2: Add chart and month navigation i18n keys** - `42bf1f9` (feat)
## Files Created/Modified
- `src/hooks/useMonthParam.ts` - Custom hook wrapping useSearchParams for month URL state with setMonth and navigateMonth
- `src/components/dashboard/MonthNavigator.tsx` - Prev/next arrow buttons + Select dropdown for month selection
- `src/i18n/en.json` - Added monthNav, noData, expenseDonut, incomeChart, spendChart, budgeted, actual, noBudgetForMonth, createBudget, generateFromTemplate keys
- `src/i18n/de.json` - German translations for all 10 new dashboard keys
## Decisions Made
- MonthNavigator uses the shadcn Select component (not a popover or custom dropdown) for month selection -- consistent with existing form patterns in the project
- formatMonthLabel uses `Date.toLocaleDateString(undefined, { month: "long", year: "numeric" })` for locale-aware month display rather than manual string formatting
- ChartEmptyState component was already created during Phase 1 scaffolding -- verified it matches the plan specification exactly, so no changes were needed
## Deviations from Plan
None - plan executed exactly as written. ChartEmptyState already existed from Phase 1, which is expected since the charts directory was scaffolded earlier.
## Issues Encountered
None
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- useMonthParam hook ready for consumption by DashboardPage refactor (Plan 03)
- MonthNavigator ready to be placed in PageShell action slot (Plan 03)
- ChartEmptyState ready for use in chart components (Plans 02)
- All chart i18n keys available for chart components (Plan 02)
## Self-Check: PASSED
- FOUND: src/hooks/useMonthParam.ts
- FOUND: src/components/dashboard/MonthNavigator.tsx
- FOUND: src/components/dashboard/charts/ChartEmptyState.tsx
- FOUND: .planning/phases/02-dashboard-charts-and-layout/02-01-SUMMARY.md
- FOUND: commit 4481950
- FOUND: commit 42bf1f9
---
*Phase: 02-dashboard-charts-and-layout*
*Completed: 2026-03-16*