Removes unnecessary destroy methods

This commit is contained in:
Janus C. H. Knudsen 2025-10-01 22:38:15 +02:00
parent 4e5077364e
commit a1e1c5d185
19 changed files with 34 additions and 214 deletions

View file

@ -174,17 +174,6 @@ export class EventBus implements IEventBus {
setDebug(enabled: boolean): void { setDebug(enabled: boolean): void {
this.debug = enabled; 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 // Create singleton instance

View file

@ -13,11 +13,6 @@ export interface IManager {
* Refresh the manager's state * Refresh the manager's state
*/ */
refresh?(): void; refresh?(): void;
/**
* Destroy the manager and clean up resources
*/
destroy?(): void;
} }
/** /**

View file

@ -130,7 +130,7 @@ export class AllDayManager {
let startDate = new Date(headerReadyEventPayload.headerElements.at(0)!.date); let startDate = new Date(headerReadyEventPayload.headerElements.at(0)!.date);
let endDate = new Date(headerReadyEventPayload.headerElements.at(-1)!.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 // Filter for all-day events
const allDayEvents = events.filter(event => event.allDay); const allDayEvents = events.filter(event => event.allDay);
@ -447,7 +447,7 @@ export class AllDayManager {
let changedCount = 0; let changedCount = 0;
this.newLayouts.forEach((layout) => { this.newLayouts.forEach((layout) => {
// Find current layout for this event // 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) { if (currentLayout?.gridArea !== layout.gridArea) {
changedCount++; changedCount++;
@ -524,8 +524,8 @@ export class AllDayManager {
* Count number of events in a specific column using ColumnBounds * Count number of events in a specific column using ColumnBounds
*/ */
private countEventsInColumn(columnBounds: ColumnBounds): number { private countEventsInColumn(columnBounds: ColumnBounds): number {
var columnIndex = columnBounds.index; let columnIndex = columnBounds.index;
var count = 0; let count = 0;
this.currentLayouts.forEach((layout) => { this.currentLayouts.forEach((layout) => {
// Check if event spans this column // Check if event spans this column
@ -544,15 +544,15 @@ export class AllDayManager {
if (!container) return; if (!container) return;
// Create overflow indicators for each column that needs them // Create overflow indicators for each column that needs them
var columns = ColumnDetectionUtils.getColumns(); let columns = ColumnDetectionUtils.getColumns();
columns.forEach((columnBounds) => { columns.forEach((columnBounds) => {
var totalEventsInColumn = this.countEventsInColumn(columnBounds); let totalEventsInColumn = this.countEventsInColumn(columnBounds);
var overflowCount = Math.max(0, totalEventsInColumn - 3); let overflowCount = Math.max(0, totalEventsInColumn - 3);
if (overflowCount > 0) { if (overflowCount > 0) {
// Create new overflow indicator element // Create new overflow indicator element
var overflowElement = document.createElement('swp-event'); let overflowElement = document.createElement('swp-event');
overflowElement.className = 'max-event-overflow'; overflowElement.className = 'max-event-overflow';
overflowElement.style.gridRow = '4'; overflowElement.style.gridRow = '4';
overflowElement.style.gridColumn = columnBounds.index.toString(); overflowElement.style.gridColumn = columnBounds.index.toString();

View file

@ -63,12 +63,6 @@ export class DragDropManager {
private snapIntervalMinutes = 15; // Default 15 minutes private snapIntervalMinutes = 15; // Default 15 minutes
private hourHeightPx: number; // Will be set from config 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 { private get snapDistancePx(): number {
return (this.snapIntervalMinutes / 60) * this.hourHeightPx; return (this.snapIntervalMinutes / 60) * this.hourHeightPx;
@ -95,10 +89,10 @@ export class DragDropManager {
* Initialize with optimized event listener setup * Initialize with optimized event listener setup
*/ */
private init(): void { private init(): void {
// Use bound handlers for proper cleanup // Add event listeners
document.body.addEventListener('mousemove', this.boundHandlers.mouseMove); document.body.addEventListener('mousemove', this.handleMouseMove.bind(this));
document.body.addEventListener('mousedown', this.boundHandlers.mouseDown); document.body.addEventListener('mousedown', this.handleMouseDown.bind(this));
document.body.addEventListener('mouseup', this.boundHandlers.mouseUp); document.body.addEventListener('mouseup', this.handleMouseUp.bind(this));
this.scrollContainer = document.querySelector('swp-scrollable-content') as HTMLElement; this.scrollContainer = document.querySelector('swp-scrollable-content') as HTMLElement;
const calendarContainer = document.querySelector('swp-calendar-container'); const calendarContainer = document.querySelector('swp-calendar-container');
@ -540,19 +534,4 @@ export class DragDropManager {
this.eventBus.emit('drag:mouseleave-header', dragMouseLeavePayload); 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();
}
} }

View file

@ -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);
}
}
} }

View file

@ -283,13 +283,4 @@ export class EventManager {
public async refresh(): Promise<void> { public async refresh(): Promise<void> {
await this.loadData(); await this.loadData();
} }
/**
* Clean up resources and clear caches
*/
public destroy(): void {
this.events = [];
this.rawData = null;
this.clearCache();
}
} }

View file

@ -21,7 +21,6 @@ export class GridManager {
private currentView: CalendarView = 'week'; private currentView: CalendarView = 'week';
private gridRenderer: GridRenderer; private gridRenderer: GridRenderer;
private styleManager: GridStyleManager; private styleManager: GridStyleManager;
private eventCleanup: (() => void)[] = [];
constructor() { constructor() {
// Initialize GridRenderer and StyleManager with config // Initialize GridRenderer and StyleManager with config
@ -42,26 +41,20 @@ export class GridManager {
private subscribeToEvents(): void { private subscribeToEvents(): void {
// Listen for view changes // Listen for view changes
this.eventCleanup.push( eventBus.on(CoreEvents.VIEW_CHANGED, (e: Event) => {
eventBus.on(CoreEvents.VIEW_CHANGED, (e: Event) => { const detail = (e as CustomEvent).detail;
const detail = (e as CustomEvent).detail; this.currentView = detail.currentView;
this.currentView = detail.currentView; this.render();
this.render(); });
})
);
// Listen for config changes that affect rendering // Listen for config changes that affect rendering
this.eventCleanup.push( eventBus.on(CoreEvents.REFRESH_REQUESTED, (e: Event) => {
eventBus.on(CoreEvents.REFRESH_REQUESTED, (e: Event) => { this.render();
this.render(); });
})
);
this.eventCleanup.push( eventBus.on(CoreEvents.WORKWEEK_CHANGED, () => {
eventBus.on(CoreEvents.WORKWEEK_CHANGED, () => { this.render();
this.render(); });
})
);
} }
/** /**
@ -289,19 +282,6 @@ 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 * Helper method to add months to a date
*/ */

View file

@ -20,7 +20,6 @@ export class HeaderManager {
constructor() { constructor() {
// Bind methods for event listeners // Bind methods for event listeners
this.setupHeaderDragListeners = this.setupHeaderDragListeners.bind(this); this.setupHeaderDragListeners = this.setupHeaderDragListeners.bind(this);
this.destroy = this.destroy.bind(this);
// Listen for navigation events to update header // Listen for navigation events to update header
this.setupNavigationListener(); this.setupNavigationListener();
@ -156,23 +155,4 @@ export class HeaderManager {
return calendarHeader; 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;
}
} }

View file

@ -256,13 +256,4 @@ export class ScrollManager {
} }
} }
/**
* Cleanup resources
*/
destroy(): void {
if (this.resizeObserver) {
this.resizeObserver.disconnect();
this.resizeObserver = null;
}
}
} }

View file

@ -10,7 +10,6 @@ import { CoreEvents } from '../constants/CoreEvents';
export class ViewManager { export class ViewManager {
private eventBus: IEventBus; private eventBus: IEventBus;
private currentView: CalendarView = 'week'; private currentView: CalendarView = 'week';
private eventCleanup: (() => void)[] = [];
private buttonListeners: Map<Element, EventListener> = new Map(); private buttonListeners: Map<Element, EventListener> = new Map();
// Cached DOM elements for performance // Cached DOM elements for performance
@ -39,20 +38,16 @@ export class ViewManager {
* Setup event bus listeners with proper cleanup tracking * Setup event bus listeners with proper cleanup tracking
*/ */
private setupEventBusListeners(): void { private setupEventBusListeners(): void {
this.eventCleanup.push( this.eventBus.on(CoreEvents.INITIALIZED, () => {
this.eventBus.on(CoreEvents.INITIALIZED, () => { this.initializeView();
this.initializeView(); });
})
);
// Remove redundant VIEW_CHANGED listener that causes circular calls // Remove redundant VIEW_CHANGED listener that causes circular calls
// changeView is called directly from button handlers // changeView is called directly from button handlers
this.eventCleanup.push( this.eventBus.on(CoreEvents.DATE_CHANGED, () => {
this.eventBus.on(CoreEvents.DATE_CHANGED, () => { this.refreshCurrentView();
this.refreshCurrentView(); });
})
);
} }
/** /**
@ -222,23 +217,4 @@ export class ViewManager {
this.refreshCurrentView(); 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;
}
} }

View file

@ -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 * Apply common drag styling to an element
*/ */

View file

@ -310,8 +310,4 @@ export class EventRenderingService {
public refresh(container?: HTMLElement): void { public refresh(container?: HTMLElement): void {
this.clearEvents(container); this.clearEvents(container);
} }
public destroy(): void {
this.clearEvents();
}
} }

View file

@ -229,22 +229,6 @@ export class GridRenderer {
(this as any).cachedColumnContainer = columnContainer; (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 * Create navigation grid container for slide animations
* Now uses same implementation as initial load for consistency * Now uses same implementation as initial load for consistency

View file

@ -112,11 +112,4 @@ export class NavigationRenderer {
}); });
} }
/**
* Public cleanup method for cached elements
*/
public destroy(): void {
this.clearCache();
}
} }

View file

@ -153,7 +153,4 @@ export class MonthViewStrategy implements ViewStrategy {
endDate endDate
}; };
} }
destroy(): void {
}
} }

View file

@ -62,9 +62,4 @@ export interface ViewStrategy {
* Get the period start and end dates for event filtering * Get the period start and end dates for event filtering
*/ */
getPeriodRange(baseDate: Date): { startDate: Date; endDate: Date }; getPeriodRange(baseDate: Date): { startDate: Date; endDate: Date };
/**
* Clean up any view-specific resources
*/
destroy(): void;
} }

View file

@ -71,8 +71,4 @@ export class WeekViewStrategy implements ViewStrategy {
endDate: weekEnd endDate: weekEnd
}; };
} }
destroy(): void {
// Clean up any week-specific resources
}
} }

View file

@ -97,7 +97,6 @@ export interface IEventBus {
emit(eventType: string, detail?: unknown): boolean; emit(eventType: string, detail?: unknown): boolean;
getEventLog(eventType?: string): EventLogEntry[]; getEventLog(eventType?: string): EventLogEntry[];
setDebug(enabled: boolean): void; setDebug(enabled: boolean): void;
destroy(): void;
} }
export interface GridPosition { export interface GridPosition {

View file

@ -76,10 +76,10 @@ export class ColumnDetectionUtils {
} }
// Convert Date to YYYY-MM-DD format // 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 // 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; return column || null;
} }