import { eventBus } from '../core/EventBus'; import { CoreEvents } from '../constants/CoreEvents'; import { ColumnDetectionUtils } from '../utils/ColumnDetectionUtils'; /** * HeaderManager - Handles all header-related event logic * Separates event handling from rendering concerns * Uses dependency injection for renderer strategy */ export class HeaderManager { constructor(headerRenderer, config) { this.headerRenderer = headerRenderer; this.config = config; // Bind handler methods for event listeners this.handleDragMouseEnterHeader = this.handleDragMouseEnterHeader.bind(this); this.handleDragMouseLeaveHeader = this.handleDragMouseLeaveHeader.bind(this); // Listen for navigation events to update header this.setupNavigationListener(); } /** * Setup header drag event listeners - Listen to DragDropManager events */ setupHeaderDragListeners() { console.log('🎯 HeaderManager: Setting up drag event listeners'); // Subscribe to drag events from DragDropManager eventBus.on('drag:mouseenter-header', this.handleDragMouseEnterHeader); eventBus.on('drag:mouseleave-header', this.handleDragMouseLeaveHeader); console.log('✅ HeaderManager: Drag event listeners attached'); } /** * Handle drag mouse enter header event */ handleDragMouseEnterHeader(event) { const { targetColumn: targetDate, mousePosition, originalElement, draggedClone: cloneElement } = event.detail; console.log('🎯 HeaderManager: Received drag:mouseenter-header', { targetDate, originalElement: !!originalElement, cloneElement: !!cloneElement }); } /** * Handle drag mouse leave header event */ handleDragMouseLeaveHeader(event) { const { targetDate, mousePosition, originalElement, draggedClone: cloneElement } = event.detail; console.log('🚪 HeaderManager: Received drag:mouseleave-header', { targetDate, originalElement: !!originalElement, cloneElement: !!cloneElement }); } /** * Setup navigation event listener */ setupNavigationListener() { eventBus.on(CoreEvents.NAVIGATION_COMPLETED, (event) => { const { currentDate } = event.detail; this.updateHeader(currentDate); }); // Also listen for date changes (including initial setup) eventBus.on(CoreEvents.DATE_CHANGED, (event) => { const { currentDate } = event.detail; this.updateHeader(currentDate); }); // 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.detail; this.updateHeader(currentDate); }); } /** * Update header content for navigation */ updateHeader(currentDate) { console.log('🎯 HeaderManager.updateHeader called', { currentDate, rendererType: this.headerRenderer.constructor.name }); const calendarHeader = document.querySelector('swp-calendar-header'); if (!calendarHeader) { console.warn('❌ HeaderManager: No calendar header found!'); return; } // Clear existing content calendarHeader.innerHTML = ''; // Render new header content using injected renderer const context = { currentWeek: currentDate, config: this.config }; this.headerRenderer.render(calendarHeader, context); // Setup event listeners on the new content this.setupHeaderDragListeners(); // Notify other managers that header is ready with period data const payload = { headerElements: ColumnDetectionUtils.getHeaderColumns(), }; eventBus.emit('header:ready', payload); } } //# sourceMappingURL=HeaderManager.js.map