From a1e1c5d185760c96af357567447e0411cc4c60c8 Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Wed, 1 Oct 2025 22:38:15 +0200 Subject: [PATCH] Removes unnecessary destroy methods --- src/core/EventBus.ts | 11 ------ src/interfaces/IManager.ts | 5 --- src/managers/AllDayManager.ts | 16 ++++----- src/managers/DragDropManager.ts | 29 +++------------- src/managers/EventFilterManager.ts | 12 ------- src/managers/EventManager.ts | 9 ----- src/managers/GridManager.ts | 48 ++++++++------------------- src/managers/HeaderManager.ts | 20 ----------- src/managers/ScrollManager.ts | 9 ----- src/managers/ViewManager.ts | 36 ++++---------------- src/renderers/EventRenderer.ts | 9 ----- src/renderers/EventRendererManager.ts | 4 --- src/renderers/GridRenderer.ts | 16 --------- src/renderers/NavigationRenderer.ts | 7 ---- src/strategies/MonthViewStrategy.ts | 3 -- src/strategies/ViewStrategy.ts | 5 --- src/strategies/WeekViewStrategy.ts | 4 --- src/types/CalendarTypes.ts | 1 - src/utils/ColumnDetectionUtils.ts | 4 +-- 19 files changed, 34 insertions(+), 214 deletions(-) diff --git a/src/core/EventBus.ts b/src/core/EventBus.ts index 41b49a0..02a02eb 100644 --- a/src/core/EventBus.ts +++ b/src/core/EventBus.ts @@ -174,17 +174,6 @@ export class EventBus implements IEventBus { setDebug(enabled: boolean): void { this.debug = enabled; } - - /** - * Clean up all tracked listeners - */ - destroy(): void { - for (const listener of this.listeners) { - document.removeEventListener(listener.eventType, listener.handler); - } - this.listeners.clear(); - this.eventLog = []; - } } // Create singleton instance diff --git a/src/interfaces/IManager.ts b/src/interfaces/IManager.ts index 37dd4f0..caa3fd6 100644 --- a/src/interfaces/IManager.ts +++ b/src/interfaces/IManager.ts @@ -13,11 +13,6 @@ export interface IManager { * Refresh the manager's state */ refresh?(): void; - - /** - * Destroy the manager and clean up resources - */ - destroy?(): void; } /** diff --git a/src/managers/AllDayManager.ts b/src/managers/AllDayManager.ts index bf11c70..50b2cbb 100644 --- a/src/managers/AllDayManager.ts +++ b/src/managers/AllDayManager.ts @@ -130,7 +130,7 @@ export class AllDayManager { let startDate = new Date(headerReadyEventPayload.headerElements.at(0)!.date); let endDate = new Date(headerReadyEventPayload.headerElements.at(-1)!.date); - var events: CalendarEvent[] = this.eventManager.getEventsForPeriod(startDate, endDate); + let events: CalendarEvent[] = this.eventManager.getEventsForPeriod(startDate, endDate); // Filter for all-day events const allDayEvents = events.filter(event => event.allDay); @@ -447,7 +447,7 @@ export class AllDayManager { let changedCount = 0; this.newLayouts.forEach((layout) => { // Find current layout for this event - var currentLayout = this.currentLayouts.find(old => old.calenderEvent.id === layout.calenderEvent.id); + let currentLayout = this.currentLayouts.find(old => old.calenderEvent.id === layout.calenderEvent.id); if (currentLayout?.gridArea !== layout.gridArea) { changedCount++; @@ -524,8 +524,8 @@ export class AllDayManager { * Count number of events in a specific column using ColumnBounds */ private countEventsInColumn(columnBounds: ColumnBounds): number { - var columnIndex = columnBounds.index; - var count = 0; + let columnIndex = columnBounds.index; + let count = 0; this.currentLayouts.forEach((layout) => { // Check if event spans this column @@ -544,15 +544,15 @@ export class AllDayManager { if (!container) return; // Create overflow indicators for each column that needs them - var columns = ColumnDetectionUtils.getColumns(); + let columns = ColumnDetectionUtils.getColumns(); columns.forEach((columnBounds) => { - var totalEventsInColumn = this.countEventsInColumn(columnBounds); - var overflowCount = Math.max(0, totalEventsInColumn - 3); + let totalEventsInColumn = this.countEventsInColumn(columnBounds); + let overflowCount = Math.max(0, totalEventsInColumn - 3); if (overflowCount > 0) { // Create new overflow indicator element - var overflowElement = document.createElement('swp-event'); + let overflowElement = document.createElement('swp-event'); overflowElement.className = 'max-event-overflow'; overflowElement.style.gridRow = '4'; overflowElement.style.gridColumn = columnBounds.index.toString(); diff --git a/src/managers/DragDropManager.ts b/src/managers/DragDropManager.ts index 52df166..d1679af 100644 --- a/src/managers/DragDropManager.ts +++ b/src/managers/DragDropManager.ts @@ -63,12 +63,6 @@ export class DragDropManager { private snapIntervalMinutes = 15; // Default 15 minutes private hourHeightPx: number; // Will be set from config - // Event listener references for proper cleanup - private boundHandlers = { - mouseMove: this.handleMouseMove.bind(this), - mouseDown: this.handleMouseDown.bind(this), - mouseUp: this.handleMouseUp.bind(this) - }; private get snapDistancePx(): number { return (this.snapIntervalMinutes / 60) * this.hourHeightPx; @@ -95,10 +89,10 @@ export class DragDropManager { * Initialize with optimized event listener setup */ private init(): void { - // Use bound handlers for proper cleanup - document.body.addEventListener('mousemove', this.boundHandlers.mouseMove); - document.body.addEventListener('mousedown', this.boundHandlers.mouseDown); - document.body.addEventListener('mouseup', this.boundHandlers.mouseUp); + // Add event listeners + document.body.addEventListener('mousemove', this.handleMouseMove.bind(this)); + document.body.addEventListener('mousedown', this.handleMouseDown.bind(this)); + document.body.addEventListener('mouseup', this.handleMouseUp.bind(this)); this.scrollContainer = document.querySelector('swp-scrollable-content') as HTMLElement; const calendarContainer = document.querySelector('swp-calendar-container'); @@ -540,19 +534,4 @@ export class DragDropManager { this.eventBus.emit('drag:mouseleave-header', dragMouseLeavePayload); } } - - /** - * Clean up all resources and event listeners - */ - public destroy(): void { - this.stopAutoScroll(); - - // Remove event listeners using bound references - document.body.removeEventListener('mousemove', this.boundHandlers.mouseMove); - document.body.removeEventListener('mousedown', this.boundHandlers.mouseDown); - document.body.removeEventListener('mouseup', this.boundHandlers.mouseUp); - - // Clean up drag state - this.cleanupDragState(); - } } diff --git a/src/managers/EventFilterManager.ts b/src/managers/EventFilterManager.ts index 5845186..71663af 100644 --- a/src/managers/EventFilterManager.ts +++ b/src/managers/EventFilterManager.ts @@ -226,16 +226,4 @@ export class EventFilterManager { }; } - /** - * Clean up - */ - public destroy(): void { - // Note: We can't easily remove anonymous event listeners - // In production, we'd store references to the bound functions - - if (this.frameRequest) { - cancelAnimationFrame(this.frameRequest); - } - - } } \ No newline at end of file diff --git a/src/managers/EventManager.ts b/src/managers/EventManager.ts index d014954..42d193c 100644 --- a/src/managers/EventManager.ts +++ b/src/managers/EventManager.ts @@ -283,13 +283,4 @@ export class EventManager { public async refresh(): Promise { await this.loadData(); } - - /** - * Clean up resources and clear caches - */ - public destroy(): void { - this.events = []; - this.rawData = null; - this.clearCache(); - } } \ No newline at end of file diff --git a/src/managers/GridManager.ts b/src/managers/GridManager.ts index c0bac0b..7e84cd8 100644 --- a/src/managers/GridManager.ts +++ b/src/managers/GridManager.ts @@ -21,7 +21,6 @@ export class GridManager { private currentView: CalendarView = 'week'; private gridRenderer: GridRenderer; private styleManager: GridStyleManager; - private eventCleanup: (() => void)[] = []; constructor() { // Initialize GridRenderer and StyleManager with config @@ -42,26 +41,20 @@ export class GridManager { private subscribeToEvents(): void { // Listen for view changes - this.eventCleanup.push( - eventBus.on(CoreEvents.VIEW_CHANGED, (e: Event) => { - const detail = (e as CustomEvent).detail; - this.currentView = detail.currentView; - this.render(); - }) - ); - + eventBus.on(CoreEvents.VIEW_CHANGED, (e: Event) => { + const detail = (e as CustomEvent).detail; + this.currentView = detail.currentView; + this.render(); + }); + // Listen for config changes that affect rendering - this.eventCleanup.push( - eventBus.on(CoreEvents.REFRESH_REQUESTED, (e: Event) => { - this.render(); - }) - ); - - this.eventCleanup.push( - eventBus.on(CoreEvents.WORKWEEK_CHANGED, () => { - this.render(); - }) - ); + eventBus.on(CoreEvents.REFRESH_REQUESTED, (e: Event) => { + this.render(); + }); + + eventBus.on(CoreEvents.WORKWEEK_CHANGED, () => { + this.render(); + }); } /** @@ -288,20 +281,7 @@ export class GridManager { }; } } - - /** - * Clean up all resources - */ - public destroy(): void { - // Clean up event listeners - this.eventCleanup.forEach(cleanup => cleanup()); - this.eventCleanup = []; - - // Clear references - this.container = null; - this.resourceData = null; - } - + /** * Helper method to add months to a date */ diff --git a/src/managers/HeaderManager.ts b/src/managers/HeaderManager.ts index b884979..e2c5f3f 100644 --- a/src/managers/HeaderManager.ts +++ b/src/managers/HeaderManager.ts @@ -20,7 +20,6 @@ export class HeaderManager { constructor() { // Bind methods for event listeners this.setupHeaderDragListeners = this.setupHeaderDragListeners.bind(this); - this.destroy = this.destroy.bind(this); // Listen for navigation events to update header this.setupNavigationListener(); @@ -156,23 +155,4 @@ export class HeaderManager { return calendarHeader; } - - /** - * Clean up resources and event listeners - */ - public destroy(): void { - - // Remove eventBus listeners - if (this.dragMouseEnterHeaderListener) { - eventBus.off('drag:mouseenter-header', this.dragMouseEnterHeaderListener); - } - if (this.dragMouseLeaveHeaderListener) { - eventBus.off('drag:mouseleave-header', this.dragMouseLeaveHeaderListener); - } - - // Clear references - this.dragMouseEnterHeaderListener = null; - this.dragMouseLeaveHeaderListener = null; - - } } \ No newline at end of file diff --git a/src/managers/ScrollManager.ts b/src/managers/ScrollManager.ts index b399c92..1f30107 100644 --- a/src/managers/ScrollManager.ts +++ b/src/managers/ScrollManager.ts @@ -256,13 +256,4 @@ export class ScrollManager { } } - /** - * Cleanup resources - */ - destroy(): void { - if (this.resizeObserver) { - this.resizeObserver.disconnect(); - this.resizeObserver = null; - } - } } \ No newline at end of file diff --git a/src/managers/ViewManager.ts b/src/managers/ViewManager.ts index 0b21c70..489cfae 100644 --- a/src/managers/ViewManager.ts +++ b/src/managers/ViewManager.ts @@ -10,7 +10,6 @@ import { CoreEvents } from '../constants/CoreEvents'; export class ViewManager { private eventBus: IEventBus; private currentView: CalendarView = 'week'; - private eventCleanup: (() => void)[] = []; private buttonListeners: Map = new Map(); // Cached DOM elements for performance @@ -39,20 +38,16 @@ export class ViewManager { * Setup event bus listeners with proper cleanup tracking */ private setupEventBusListeners(): void { - this.eventCleanup.push( - this.eventBus.on(CoreEvents.INITIALIZED, () => { - this.initializeView(); - }) - ); + this.eventBus.on(CoreEvents.INITIALIZED, () => { + this.initializeView(); + }); // Remove redundant VIEW_CHANGED listener that causes circular calls // changeView is called directly from button handlers - this.eventCleanup.push( - this.eventBus.on(CoreEvents.DATE_CHANGED, () => { - this.refreshCurrentView(); - }) - ); + this.eventBus.on(CoreEvents.DATE_CHANGED, () => { + this.refreshCurrentView(); + }); } /** @@ -222,23 +217,4 @@ export class ViewManager { this.refreshCurrentView(); } - /** - * Clean up all resources and cached elements - */ - public destroy(): void { - // Clean up event bus listeners - this.eventCleanup.forEach(cleanup => cleanup()); - this.eventCleanup = []; - - // Clean up button listeners - this.buttonListeners.forEach((handler, button) => { - button.removeEventListener('click', handler); - }); - this.buttonListeners.clear(); - - // Clear cached elements - this.cachedViewButtons = null; - this.cachedWorkweekButtons = null; - this.lastButtonCacheTime = 0; - } } \ No newline at end of file diff --git a/src/renderers/EventRenderer.ts b/src/renderers/EventRenderer.ts index e337aca..2ad8833 100644 --- a/src/renderers/EventRenderer.ts +++ b/src/renderers/EventRenderer.ts @@ -97,15 +97,6 @@ export abstract class BaseEventRenderer implements EventRendererStrategy { } - /** - * Cleanup method for proper resource management - */ - public destroy(): void { - this.draggedClone = null; - this.originalEvent = null; - } - - /** * Apply common drag styling to an element */ diff --git a/src/renderers/EventRendererManager.ts b/src/renderers/EventRendererManager.ts index 558568d..b15b254 100644 --- a/src/renderers/EventRendererManager.ts +++ b/src/renderers/EventRendererManager.ts @@ -310,8 +310,4 @@ export class EventRenderingService { public refresh(container?: HTMLElement): void { this.clearEvents(container); } - - public destroy(): void { - this.clearEvents(); - } } \ No newline at end of file diff --git a/src/renderers/GridRenderer.ts b/src/renderers/GridRenderer.ts index a0fff58..2e4d32a 100644 --- a/src/renderers/GridRenderer.ts +++ b/src/renderers/GridRenderer.ts @@ -229,22 +229,6 @@ export class GridRenderer { (this as any).cachedColumnContainer = columnContainer; } */ - /** - * Clean up cached elements and event listeners - */ - public destroy(): void { - // Clean up grid-only event listeners - // if ((this as any).gridBodyEventListener && (this as any).cachedColumnContainer) { - // (this as any).cachedColumnContainer.removeEventListener('mouseover', (this as any).gridBodyEventListener); - //} - - // Clear cached references - this.cachedGridContainer = null; - this.cachedTimeAxis = null; - (this as any).gridBodyEventListener = null; - (this as any).cachedColumnContainer = null; - } - /** * Create navigation grid container for slide animations * Now uses same implementation as initial load for consistency diff --git a/src/renderers/NavigationRenderer.ts b/src/renderers/NavigationRenderer.ts index 5cadaaa..0bf09a8 100644 --- a/src/renderers/NavigationRenderer.ts +++ b/src/renderers/NavigationRenderer.ts @@ -112,11 +112,4 @@ export class NavigationRenderer { }); } - /** - * Public cleanup method for cached elements - */ - public destroy(): void { - this.clearCache(); - } - } \ No newline at end of file diff --git a/src/strategies/MonthViewStrategy.ts b/src/strategies/MonthViewStrategy.ts index 944503b..7585ecb 100644 --- a/src/strategies/MonthViewStrategy.ts +++ b/src/strategies/MonthViewStrategy.ts @@ -153,7 +153,4 @@ export class MonthViewStrategy implements ViewStrategy { endDate }; } - - destroy(): void { - } } \ No newline at end of file diff --git a/src/strategies/ViewStrategy.ts b/src/strategies/ViewStrategy.ts index 578364c..7ce1ade 100644 --- a/src/strategies/ViewStrategy.ts +++ b/src/strategies/ViewStrategy.ts @@ -62,9 +62,4 @@ export interface ViewStrategy { * Get the period start and end dates for event filtering */ getPeriodRange(baseDate: Date): { startDate: Date; endDate: Date }; - - /** - * Clean up any view-specific resources - */ - destroy(): void; } \ No newline at end of file diff --git a/src/strategies/WeekViewStrategy.ts b/src/strategies/WeekViewStrategy.ts index fddb9ae..5366afd 100644 --- a/src/strategies/WeekViewStrategy.ts +++ b/src/strategies/WeekViewStrategy.ts @@ -71,8 +71,4 @@ export class WeekViewStrategy implements ViewStrategy { endDate: weekEnd }; } - - destroy(): void { - // Clean up any week-specific resources - } } \ No newline at end of file diff --git a/src/types/CalendarTypes.ts b/src/types/CalendarTypes.ts index 7ae63b5..82d7f94 100644 --- a/src/types/CalendarTypes.ts +++ b/src/types/CalendarTypes.ts @@ -97,7 +97,6 @@ export interface IEventBus { emit(eventType: string, detail?: unknown): boolean; getEventLog(eventType?: string): EventLogEntry[]; setDebug(enabled: boolean): void; - destroy(): void; } export interface GridPosition { diff --git a/src/utils/ColumnDetectionUtils.ts b/src/utils/ColumnDetectionUtils.ts index e717f44..1024dd3 100644 --- a/src/utils/ColumnDetectionUtils.ts +++ b/src/utils/ColumnDetectionUtils.ts @@ -76,10 +76,10 @@ export class ColumnDetectionUtils { } // Convert Date to YYYY-MM-DD format - var dateString = date.toISOString().split('T')[0]; + let dateString = date.toISOString().split('T')[0]; // Find column that matches the date - var column = this.columnBoundsCache.find(col => col.date === dateString); + let column = this.columnBoundsCache.find(col => col.date === dateString); return column || null; }