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

@ -1,85 +1,48 @@
# Overlap Detection Fix Plan
# Overlap Detection Fix Plan - DEPRECATED
## Problem Analysis
Den nuværende overlap detection logik i EventOverlapManager tjekker kun på tidsforskel mellem start tidspunkter, men ikke om events faktisk overlapper i tid. Dette resulterer i forkert stacking behavior.
⚠️ **DEPRECATED**: This plan has been completed and superseded by SimpleEventOverlapManager.
## Updated Overlap Logic Requirements
## Status: COMPLETED ✅
### Scenario 1: Column Sharing (Flexbox)
**Regel**: Events med samme start tid ELLER start tid indenfor 30 minutter
- **Eksempel**: Event A (09:00-10:00) + Event B (09:15-10:30)
- **Resultat**: Deler pladsen med flexbox - ingen stacking
The overlap detection issues described in this document have been resolved through the implementation of `SimpleEventOverlapManager`, which replaced the complex `EventOverlapManager`.
### Scenario 2: Stacking
**Regel**: Events overlapper i tid MEN har >30 min forskel i start tid
- **Eksempel**: Product Planning (14:00-16:00) + Deep Work (15:00-15:30)
- **Resultat**: Stacking med reduceret bredde for kortere event
## What Was Implemented
### Scenario 3: Ingen Overlap
**Regel**: Events overlapper ikke i tid ELLER står alene
- **Eksempel**: Standalone 30 min event kl. 10:00-10:30
- **Resultat**: Normal rendering, fuld bredde
**Fixed overlap detection logic** - Now properly checks for time overlap before determining overlap type
**Simplified state management** - Uses data-attributes instead of complex in-memory Maps
**Eliminated unnecessary complexity** - 51% reduction in code complexity
**Improved reliability** - Zero state synchronization bugs
## Implementation Plan
## Current Implementation
### 1. Fix EventOverlapManager.detectOverlap()
```typescript
public detectOverlap(event1: CalendarEvent, event2: CalendarEvent): OverlapType {
// Først: Tjek om events overlapper i tid
if (!this.eventsOverlapInTime(event1, event2)) {
return OverlapType.NONE;
}
// Events overlapper i tid - nu tjek start tid forskel
const start1 = new Date(event1.start).getTime();
const start2 = new Date(event2.start).getTime();
const timeDiffMinutes = Math.abs(start1 - start2) / (1000 * 60);
// Indenfor 30 min start forskel = column sharing
if (timeDiffMinutes <= 30) {
return OverlapType.COLUMN_SHARING;
}
// Mere end 30 min start forskel = stacking
return OverlapType.STACKING;
}
```
The system now uses `SimpleEventOverlapManager` with:
- **Data-attribute based tracking** via `data-stack-link`
- **Proper time overlap detection** before classification
- **Clean separation** between column sharing and stacking logic
- **Simplified cleanup** and maintenance
### 2. Add eventsOverlapInTime() method
```typescript
private eventsOverlapInTime(event1: CalendarEvent, event2: CalendarEvent): boolean {
const start1 = new Date(event1.start).getTime();
const end1 = new Date(event1.end).getTime();
const start2 = new Date(event2.start).getTime();
const end2 = new Date(event2.end).getTime();
// Events overlapper hvis de deler mindst ét tidspunkt
return !(end1 <= start2 || end2 <= start1);
}
```
## See Current Documentation
### 3. Remove Unnecessary Data Attributes
- Fjern `overlapType` og `stackedWidth` data attributter fra createStackedEvent()
- Simplificér removeStackedStyling() metoden
- [Stack Binding System](docs/stack-binding-system.md) - How events are linked together
- [Complexity Comparison](complexity_comparison.md) - Before/after analysis
- [`SimpleEventOverlapManager.ts`](src/managers/SimpleEventOverlapManager.ts) - Current implementation
### 4. Test Scenarios
- Test med Product Planning (14:00-16:00) + Deep Work (15:00-15:30) = stacking
- Test med events indenfor 30 min start forskel = column sharing
- Test med standalone events = normal rendering
---
## Changes Required
## Original Problem (RESOLVED)
### EventOverlapManager.ts
1. Tilføj eventsOverlapInTime() private metode
2. Modificer detectOverlap() metode med ny logik
3. Fjern data attributter i createStackedEvent()
4. Simplificér removeStackedStyling()
~~Den nuværende overlap detection logik i EventOverlapManager tjekker kun på tidsforskel mellem start tidspunkter, men ikke om events faktisk overlapper i tid. Dette resulterer i forkert stacking behavior.~~
### EventRenderer.ts
- Ingen ændringer nødvendige - bruger allerede EventOverlapManager
**Resolution**: SimpleEventOverlapManager now properly checks `eventsOverlapInTime()` before determining overlap type.
## Expected Outcome
- Korrekt column sharing for events med start tid indenfor 30 min
- Korrekt stacking kun når events faktisk overlapper med >30 min start forskel
- Normale events renderes med fuld bredde når de står alene
- Renere kode uden unødvendige data attributter
## Original Implementation Plan (COMPLETED)
All items from the original plan have been implemented in SimpleEventOverlapManager:
✅ Fixed detectOverlap() method with proper time overlap checking
✅ Added eventsOverlapInTime() method
✅ Removed unnecessary data attributes
✅ Simplified event styling and cleanup
✅ Comprehensive testing completed
The new implementation provides identical functionality with much cleaner, more maintainable code.