[Debt] Split monolithic calendar page into focused components #10

Closed
opened 2026-07-11 11:39:44 +02:00 by zemion · 2 comments
Owner

The calendar WebUI page is monolithic and contains views, agenda, modals, drag/drop, resize, sync controls, and form logic in one file. This makes continued calendar work risky.

Hotspot: webui/src/features/calendar/CalendarPage.tsx is close to 3,000 lines.

Acceptance: extract view-specific components and shared layout helpers, keep behavior stable across continuous/month/week/workweek/day views, and add focused component or interaction smoke tests.

The calendar WebUI page is monolithic and contains views, agenda, modals, drag/drop, resize, sync controls, and form logic in one file. This makes continued calendar work risky. Hotspot: `webui/src/features/calendar/CalendarPage.tsx` is close to 3,000 lines. Acceptance: extract view-specific components and shared layout helpers, keep behavior stable across continuous/month/week/workweek/day views, and add focused component or interaction smoke tests. <!-- codex-audit-2026-07-11:calendar-page-split -->
Author
Owner

Codex State: reviewed

Reviewed against the published current state (2cb3aca). This remains open: CalendarPage.tsx is still 3,084 lines and still owns view rendering, agenda, drag/resize, forms, modals, and sync controls. The required physical component split and focused interaction coverage are not complete.

## Codex State: reviewed Reviewed against the published current state (`2cb3aca`). This remains open: `CalendarPage.tsx` is still 3,084 lines and still owns view rendering, agenda, drag/resize, forms, modals, and sync controls. The required physical component split and focused interaction coverage are not complete.
Author
Owner

Implemented and pushed in 56b387a. CalendarPage.tsx is reduced from 3,084 to 869 lines. Month/continuous/time views live in CalendarViews, date/layout/virtualization/drag calculations in calendarViewModel, source/delete dialogs in CalendarCollectionDialogs, and event form logic in CalendarEventDialog. Added strict page-specific TypeScript checking, interaction tests for ranges/virtualization/parallel layout/all-day movement/resize safety, and structure guards. Calendar page/picker tests and the full production WebUI build pass.

Implemented and pushed in 56b387a. CalendarPage.tsx is reduced from 3,084 to 869 lines. Month/continuous/time views live in CalendarViews, date/layout/virtualization/drag calculations in calendarViewModel, source/delete dialogs in CalendarCollectionDialogs, and event form logic in CalendarEventDialog. Added strict page-specific TypeScript checking, interaction tests for ranges/virtualization/parallel layout/all-day movement/resize safety, and structure guards. Calendar page/picker tests and the full production WebUI build pass.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GovOPlaN/govoplan-calendar#10