From 284c85b2f86995292e6f32a122047479006323bb Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Thu, 13 Nov 2025 21:33:53 +0100 Subject: [PATCH] Simplify navigation event handling and week info rendering Removes redundant period info update event and consolidates week information calculation Streamlines navigation event flow by using navigation completed event for week info updates Removes separate week info update method and moves calculation into renderer Reduces complexity of event management and improves code efficiency --- src/constants/CoreEvents.ts | 3 +-- src/managers/NavigationManager.ts | 25 ++----------------------- src/renderers/WeekInfoRenderer.ts | 19 ++++++++++++++++--- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/constants/CoreEvents.ts b/src/constants/CoreEvents.ts index 06d4b6f..52b285d 100644 --- a/src/constants/CoreEvents.ts +++ b/src/constants/CoreEvents.ts @@ -13,11 +13,10 @@ export const CoreEvents = { VIEW_RENDERED: 'view:rendered', WORKWEEK_CHANGED: 'workweek:changed', - // Navigation events (5) + // Navigation events (4) NAV_BUTTON_CLICKED: 'nav:button-clicked', DATE_CHANGED: 'nav:date-changed', NAVIGATION_COMPLETED: 'nav:navigation-completed', - PERIOD_INFO_UPDATE: 'nav:period-info-update', NAVIGATE_TO_EVENT: 'nav:navigate-to-event', // Data events (5) diff --git a/src/managers/NavigationManager.ts b/src/managers/NavigationManager.ts index da415eb..5f9693f 100644 --- a/src/managers/NavigationManager.ts +++ b/src/managers/NavigationManager.ts @@ -47,10 +47,6 @@ export class NavigationManager { private setupEventListeners(): void { - // Initial DOM update when calendar is initialized - this.eventBus.on(CoreEvents.INITIALIZED, () => { - this.updateWeekInfo(); - }); // Listen for filter changes and apply to pre-rendered grids this.eventBus.on(CoreEvents.FILTER_CHANGED, (e: Event) => { @@ -239,29 +235,12 @@ export class NavigationManager { this.currentWeek = new Date(this.targetWeek); } - // Update week info and notify other managers - this.updateWeekInfo(); - - // Emit period change event for ScrollManager + // Emit navigation completed event this.eventBus.emit(CoreEvents.NAVIGATION_COMPLETED, { direction, - currentDate: this.currentWeek + newDate: this.currentWeek }); }); } - - private updateWeekInfo(): void { - const weekNumber = this.dateService.getWeekNumber(this.currentWeek); - const weekEnd = this.dateService.addDays(this.currentWeek, 6); - const dateRange = this.dateService.formatDateRange(this.currentWeek, weekEnd); - - // Notify other managers about week info update - DOM manipulation should happen via events - this.eventBus.emit(CoreEvents.PERIOD_INFO_UPDATE, { - weekNumber, - dateRange, - weekStart: this.currentWeek, - weekEnd - }); - } } \ No newline at end of file diff --git a/src/renderers/WeekInfoRenderer.ts b/src/renderers/WeekInfoRenderer.ts index 5ee6149..bcf516a 100644 --- a/src/renderers/WeekInfoRenderer.ts +++ b/src/renderers/WeekInfoRenderer.ts @@ -1,6 +1,7 @@ import { IEventBus } from '../types/CalendarTypes'; import { CoreEvents } from '../constants/CoreEvents'; import { EventRenderingService } from './EventRendererManager'; +import { DateService } from '../utils/DateService'; /** * WeekInfoRenderer - Handles DOM rendering for week info display @@ -11,9 +12,15 @@ import { EventRenderingService } from './EventRendererManager'; export class WeekInfoRenderer { private eventBus: IEventBus; + private dateService: DateService; - constructor(eventBus: IEventBus, eventRenderer: EventRenderingService) { + constructor( + eventBus: IEventBus, + eventRenderer: EventRenderingService, + dateService: DateService + ) { this.eventBus = eventBus; + this.dateService = dateService; this.setupEventListeners(); } @@ -23,9 +30,15 @@ export class WeekInfoRenderer { * Setup event listeners for DOM updates */ private setupEventListeners(): void { - this.eventBus.on(CoreEvents.PERIOD_INFO_UPDATE, (event: Event) => { + this.eventBus.on(CoreEvents.NAVIGATION_COMPLETED, (event: Event) => { const customEvent = event as CustomEvent; - const { weekNumber, dateRange } = customEvent.detail; + const { newDate } = customEvent.detail; + + // Calculate week number and date range from the new date + const weekNumber = this.dateService.getWeekNumber(newDate); + const weekEnd = this.dateService.addDays(newDate, 6); + const dateRange = this.dateService.formatDateRange(newDate, weekEnd); + this.updateWeekInfoInDOM(weekNumber, dateRange); }); }