Removes unnecessary destroy methods
This commit is contained in:
parent
4e5077364e
commit
a1e1c5d185
19 changed files with 34 additions and 214 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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();
|
});
|
||||||
})
|
|
||||||
);
|
eventBus.on(CoreEvents.WORKWEEK_CHANGED, () => {
|
||||||
|
this.render();
|
||||||
this.eventCleanup.push(
|
});
|
||||||
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
|
* Helper method to add months to a date
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -256,13 +256,4 @@ export class ScrollManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Cleanup resources
|
|
||||||
*/
|
|
||||||
destroy(): void {
|
|
||||||
if (this.resizeObserver) {
|
|
||||||
this.resizeObserver.disconnect();
|
|
||||||
this.resizeObserver = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -112,11 +112,4 @@ export class NavigationRenderer {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Public cleanup method for cached elements
|
|
||||||
*/
|
|
||||||
public destroy(): void {
|
|
||||||
this.clearCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -153,7 +153,4 @@ export class MonthViewStrategy implements ViewStrategy {
|
||||||
endDate
|
endDate
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy(): void {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
@ -71,8 +71,4 @@ export class WeekViewStrategy implements ViewStrategy {
|
||||||
endDate: weekEnd
|
endDate: weekEnd
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy(): void {
|
|
||||||
// Clean up any week-specific resources
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue