Refactor workweek preset change handling

Simplifies workweek change event propagation across managers

Removes redundant grid rerendering logic and focuses on clean event communication
Prepares infrastructure for more flexible workweek configuration updates

Relates to debug-gridstyle branch
This commit is contained in:
Janus C. H. Knudsen 2025-11-07 15:12:05 +01:00
parent 1fa7aa26e5
commit 024ad45bfd
5 changed files with 300 additions and 39 deletions

View file

@ -111,7 +111,7 @@ export class CalendarManager {
/**
* Setup event listeners for at håndtere events fra andre managers
*/
*/
private setupEventListeners(): void {
// Listen for workweek changes only
this.eventBus.on(CoreEvents.WORKWEEK_CHANGED, (event: Event) => {
@ -185,22 +185,6 @@ export class CalendarManager {
*/
private handleWorkweekChange(): void {
// Force a complete grid rebuild by clearing existing structure
const container = document.querySelector('swp-calendar-container');
if (container) {
container.innerHTML = ''; // Clear everything to force full rebuild
}
// Re-render the grid with new workweek settings (will now rebuild everything)
this.gridManager.render();
// Re-initialize scroll manager after grid rebuild
this.scrollManager.initialize();
// Re-render events in the new grid structure
this.rerenderEvents();
// Notify HeaderManager with correct current date after grid rebuild
this.eventBus.emit('workweek:header-update', {
currentDate: this.currentDate,
currentView: this.currentView,
@ -208,26 +192,4 @@ export class CalendarManager {
});
}
/**
* Re-render events after grid structure changes
*/
private async rerenderEvents(): Promise<void> {
// Get current period data to determine date range
const periodData = this.calculateCurrentPeriod();
// Find the grid container to render events in
const container = document.querySelector('swp-calendar-container');
if (!container) {
return;
}
// Trigger event rendering for the current date range using correct method
await this.eventRenderer.renderEvents({
container: container as HTMLElement,
startDate: new Date(periodData.start),
endDate: new Date(periodData.end)
});
}
}

View file

@ -83,6 +83,9 @@ export class HeaderManager {
});
// Listen for workweek header updates after grid rebuild
//currentDate: this.currentDate,
//currentView: this.currentView,
//workweek: this.config.currentWorkWeek
eventBus.on('workweek:header-update', (event) => {
const { currentDate } = (event as CustomEvent).detail;
this.updateHeader(currentDate);

View file

@ -102,6 +102,11 @@ export class ViewManager {
this.updateAllButtons();
const settings = this.config.getWorkWeekSettings();
//currentDate: this.currentDate,
//currentView: this.currentView,
//workweek: this.config.currentWorkWeek
this.eventBus.emit(CoreEvents.WORKWEEK_CHANGED, {
workWeekId: workweekId,
settings: settings