Introduces dedicated TypeScript interfaces for all drag-and-drop event payloads, enhancing type safety and developer experience. Centralizes drag event detection and emission within `DragDropManager`. Refactors `AllDayManager`, `HeaderManager`, and `EventRendererManager` to subscribe to these typed events, improving decoupling and clarifying responsibilities. Resolves known inconsistencies in drag event payloads, especially for all-day event conversions. Adds a comprehensive analysis document (`docs/EventSystem-Analysis.md`) detailing the event system and planned improvements.
5 KiB
5 KiB
Calendar Event System Analysis
Overview
Analysis of all events used in the Calendar Plantempus system, categorized by type and usage.
Core Events (25 events)
Defined in src/constants/CoreEvents.ts
Lifecycle Events (3)
core:initialized- Calendar initialization completecore:ready- Calendar ready for usecore:destroyed- Calendar cleanup complete
View Events (3)
view:changed- Calendar view changed (day/week/month)view:rendered- View rendering completeworkweek:changed- Work week configuration changed
Navigation Events (4)
nav:date-changed- Current date changednav:navigation-completed- Navigation animation/transition completenav:period-info-update- Week/period information updatednav:navigate-to-event- Request to navigate to specific event
Data Events (4)
data:loading- Data fetch starteddata:loaded- Data fetch completeddata:error- Data fetch errordata:events-filtered- Events filtered
Grid Events (3)
grid:rendered- Grid rendering completegrid:clicked- Grid cell clickedgrid:cell-selected- Grid cell selected
Event Management (4)
event:created- New event createdevent:updated- Event updatedevent:deleted- Event deletedevent:selected- Event selected
System Events (2)
system:error- System error occurredsystem:refresh- Refresh requested
Filter Events (1)
filter:changed- Event filter changed
Rendering Events (1)
events:rendered- Events rendering complete
Custom Events (22 events)
Used throughout the system for specific functionality
Drag & Drop Events (12)
drag:start- Drag operation starteddrag:move- Drag operation in progressdrag:end- Drag operation endeddrag:auto-scroll- Auto-scroll during dragdrag:column-change- Dragged to different columndrag:mouseenter-header- Mouse entered header during dragdrag:mouseleave-header- Mouse left header during dragdrag:convert-to-time_event- Convert all-day to timed event
Event Interaction (2)
event:click- Event clicked (no drag)event:clicked- Event clicked (legacy)
Header Events (3)
header:mouseleave- Mouse left header areaheader:height-changed- Header height changedheader:rebuilt- Header DOM rebuilt
All-Day Events (1)
allday:ensure-container- Ensure all-day container exists
Column Events (1)
column:mouseover- Mouse over column
Scroll Events (1)
scroll:to-event-time- Scroll to specific event time
Workweek Events (1)
workweek:header-update- Update header after workweek change
Navigation Events (1)
navigation:completed- Navigation completed (different from core event)
Event Payload Analysis
Type Safety Issues Found
1. AllDayManager Event Mismatch
File: src/managers/AllDayManager.ts:33-34
// Expected payload:
const { targetDate, originalElement } = (event as CustomEvent).detail;
// Actual payload from DragDropManager:
{
targetDate: string,
mousePosition: { x: number, y: number },
originalElement: HTMLElement,
cloneElement: HTMLElement | null
}
2. Inconsistent Event Signatures
Multiple events have different payload structures across different emitters/listeners.
3. No Type Safety
All events use (event as CustomEvent).detail without proper TypeScript interfaces.
Event Usage Statistics
Most Used Events
- Drag Events - 12 different types, used heavily in drag-drop system
- Core Navigation - 4 types, used across all managers
- Grid Events - 3 types, fundamental to calendar rendering
- Header Events - 3 types, critical for all-day functionality
Critical Events (High Impact)
drag:mouseenter-header/drag:mouseleave-header- Core drag functionalitynav:navigation-completed- Synchronizes multiple managersgrid:rendered- Triggers event renderingevents:rendered- Triggers filtering system
Simple Events (Low Impact)
header:height-changed- Simple notificationallday:ensure-container- Simple requestsystem:refresh- Simple trigger
Recommendations
Priority 1: Fix Critical Issues
- Fix AllDayManager event signature mismatch
- Standardize drag event payloads
- Document current event contracts
Priority 2: Type Safety Implementation
- Create TypeScript interfaces for all event payloads
- Implement type-safe EventBus
- Migrate drag events first (highest complexity)
Priority 3: System Cleanup
- Consolidate duplicate events (
event:clickvsevent:clicked) - Standardize event naming conventions
- Remove unused events
Total Event Count
- Core Events: 25
- Custom Events: 22
- Total: 47 unique event types
Files Analyzed
src/constants/CoreEvents.tssrc/managers/*.ts(8 files)src/renderers/*.ts(4 files)src/core/CalendarConfig.ts
Analysis completed: 2025-09-20