96 lines
3.8 KiB
TypeScript
96 lines
3.8 KiB
TypeScript
import { ICalendarEvent } from '../types/CalendarTypes';
|
|
import { Configuration } from '../configurations/CalendarConfig';
|
|
import { PositionUtils } from '../utils/PositionUtils';
|
|
import { IColumnBounds } from '../utils/ColumnDetectionUtils';
|
|
import { IDragColumnChangeEventPayload, IDragMoveEventPayload, IDragStartEventPayload, IDragMouseEnterColumnEventPayload } from '../types/EventTypes';
|
|
import { DateService } from '../utils/DateService';
|
|
import { EventStackManager } from '../managers/EventStackManager';
|
|
import { EventLayoutCoordinator } from '../managers/EventLayoutCoordinator';
|
|
/**
|
|
* Interface for event rendering strategies
|
|
*/
|
|
export interface IEventRenderer {
|
|
renderEvents(events: ICalendarEvent[], container: HTMLElement): void;
|
|
clearEvents(container?: HTMLElement): void;
|
|
renderSingleColumnEvents?(column: IColumnBounds, events: ICalendarEvent[]): void;
|
|
handleDragStart?(payload: IDragStartEventPayload): void;
|
|
handleDragMove?(payload: IDragMoveEventPayload): void;
|
|
handleDragAutoScroll?(eventId: string, snappedY: number): void;
|
|
handleDragEnd?(originalElement: HTMLElement, draggedClone: HTMLElement, finalColumn: IColumnBounds, finalY: number): void;
|
|
handleEventClick?(eventId: string, originalElement: HTMLElement): void;
|
|
handleColumnChange?(payload: IDragColumnChangeEventPayload): void;
|
|
handleNavigationCompleted?(): void;
|
|
handleConvertAllDayToTimed?(payload: IDragMouseEnterColumnEventPayload): void;
|
|
}
|
|
/**
|
|
* Date-based event renderer
|
|
*/
|
|
export declare class DateEventRenderer implements IEventRenderer {
|
|
private dateService;
|
|
private stackManager;
|
|
private layoutCoordinator;
|
|
private config;
|
|
private positionUtils;
|
|
private draggedClone;
|
|
private originalEvent;
|
|
constructor(dateService: DateService, stackManager: EventStackManager, layoutCoordinator: EventLayoutCoordinator, config: Configuration, positionUtils: PositionUtils);
|
|
private applyDragStyling;
|
|
/**
|
|
* Handle drag start event
|
|
*/
|
|
handleDragStart(payload: IDragStartEventPayload): void;
|
|
/**
|
|
* Handle drag move event
|
|
*/
|
|
handleDragMove(payload: IDragMoveEventPayload): void;
|
|
/**
|
|
* Handle column change during drag
|
|
*/
|
|
handleColumnChange(payload: IDragColumnChangeEventPayload): void;
|
|
/**
|
|
* Handle conversion of all-day event to timed event
|
|
*/
|
|
handleConvertAllDayToTimed(payload: IDragMouseEnterColumnEventPayload): void;
|
|
/**
|
|
* Handle drag end event
|
|
*/
|
|
handleDragEnd(originalElement: HTMLElement, draggedClone: HTMLElement, finalColumn: IColumnBounds, finalY: number): void;
|
|
/**
|
|
* Handle navigation completed event
|
|
*/
|
|
handleNavigationCompleted(): void;
|
|
/**
|
|
* Fade out and remove element
|
|
*/
|
|
private fadeOutAndRemove;
|
|
renderEvents(events: ICalendarEvent[], container: HTMLElement): void;
|
|
/**
|
|
* Render events for a single column
|
|
*/
|
|
renderSingleColumnEvents(column: IColumnBounds, events: ICalendarEvent[]): void;
|
|
/**
|
|
* Render events in a column using combined stacking + grid algorithm
|
|
*/
|
|
private renderColumnEvents;
|
|
/**
|
|
* Render events in a grid container (side-by-side with column sharing)
|
|
*/
|
|
private renderGridGroup;
|
|
/**
|
|
* Render a single column within a grid group
|
|
* Column may contain multiple events that don't overlap
|
|
*/
|
|
private renderGridColumn;
|
|
/**
|
|
* Render event within a grid container (absolute positioning within column)
|
|
*/
|
|
private renderEventInGrid;
|
|
private renderEvent;
|
|
protected calculateEventPosition(event: ICalendarEvent): {
|
|
top: number;
|
|
height: number;
|
|
};
|
|
clearEvents(container?: HTMLElement): void;
|
|
protected getColumns(container: HTMLElement): HTMLElement[];
|
|
protected getEventsForColumn(column: HTMLElement, events: ICalendarEvent[]): ICalendarEvent[];
|
|
}
|