This commit is contained in:
Janus Knudsen 2025-09-09 14:35:21 +02:00
parent 727a6ec53a
commit 72019a3d9a
15 changed files with 1056 additions and 1230 deletions

View file

@ -176,27 +176,32 @@ private detectPixelOverlap(element1: HTMLElement, element2: HTMLElement): Overla
- Proper separation of rendering logic from positioning
- Clean drag state management
### EventOverlapManager (`src/managers/EventOverlapManager.ts`)
### SimpleEventOverlapManager (`src/managers/SimpleEventOverlapManager.ts`)
**Brilliant Overlap Algorithm:**
**Clean, Data-Attribute Based Overlap System:**
```typescript
public detectOverlap(event1: CalendarEvent, event2: CalendarEvent): OverlapType {
if (!this.eventsOverlapInTime(event1, event2)) {
return OverlapType.NONE;
}
const start1 = new Date(event1.start).getTime();
const start2 = new Date(event2.start).getTime();
const timeDiffMinutes = Math.abs(start1 - start2) / (1000 * 60);
const timeDiffMinutes = Math.abs(
new Date(event1.start).getTime() - new Date(event2.start).getTime()
) / (1000 * 60);
// Over 30 min start difference = stacking, within 30 min = column sharing
return timeDiffMinutes > 30 ? OverlapType.STACKING : OverlapType.COLUMN_SHARING;
}
```
**Key Improvements Over Legacy System:**
- **Data-Attribute Tracking**: Uses `data-stack-link` instead of in-memory Maps
- **Simplified State Management**: DOM is the single source of truth
- **51% Less Code**: Eliminated complex linked list management
- **Zero State Sync Bugs**: No memory/DOM synchronization issues
**Visual Layout Strategies:**
- **Column Sharing**: Flexbox layout for concurrent events
- **Stacking**: Margin-left offsets with z-index management
- **Stacking**: Margin-left offsets with z-index management via data attributes
- **Dynamic Grouping**: Real-time group creation and cleanup
---