/** * Type definitions for calendar events and drag operations */ import { IColumnBounds } from "../utils/ColumnDetectionUtils"; import { ICalendarEvent, EntityType } from "./CalendarTypes"; /** * Drag Event Payload Interfaces * Type-safe interfaces for drag and drop events */ // Common position interface export interface IMousePosition { x: number; y: number; } // Drag start event payload export interface IDragStartEventPayload { originalElement: HTMLElement; draggedClone: HTMLElement | null; mousePosition: IMousePosition; mouseOffset: IMousePosition; columnBounds: IColumnBounds | null; } // Drag move event payload export interface IDragMoveEventPayload { originalElement: HTMLElement; draggedClone: HTMLElement; mousePosition: IMousePosition; mouseOffset: IMousePosition; columnBounds: IColumnBounds | null; snappedY: number; } // Drag end event payload export interface IDragEndEventPayload { originalElement: HTMLElement; draggedClone: HTMLElement | null; mousePosition: IMousePosition; originalSourceColumn: IColumnBounds; // Original column where drag started finalPosition: { column: IColumnBounds | null; // Where drag ended date: Date; // Always present - the date for this position resourceId?: string; // Only in resource mode snappedY: number; }; target: 'swp-day-column' | 'swp-day-header' | null; } // Drag mouse enter header event payload export interface IDragMouseEnterHeaderEventPayload { targetColumn: IColumnBounds; mousePosition: IMousePosition; originalElement: HTMLElement | null; draggedClone: HTMLElement; calendarEvent: ICalendarEvent; replaceClone: (newClone: HTMLElement) => void; } // Drag mouse leave header event payload export interface IDragMouseLeaveHeaderEventPayload { targetColumn: IColumnBounds | null; mousePosition: IMousePosition; originalElement: HTMLElement| null; draggedClone: HTMLElement| null; } // Drag mouse enter column event payload export interface IDragMouseEnterColumnEventPayload { targetColumn: IColumnBounds; mousePosition: IMousePosition; snappedY: number; originalElement: HTMLElement | null; draggedClone: HTMLElement; calendarEvent: ICalendarEvent; replaceClone: (newClone: HTMLElement) => void; } // Drag column change event payload export interface IDragColumnChangeEventPayload { originalElement: HTMLElement; draggedClone: HTMLElement; previousColumn: IColumnBounds | null; newColumn: IColumnBounds; mousePosition: IMousePosition; } // Header ready event payload export interface IHeaderReadyEventPayload { headerElements: IColumnBounds[]; } // Resize end event payload export interface IResizeEndEventPayload { eventId: string; element: HTMLElement; finalHeight: number; } // Navigation button clicked event payload export interface INavButtonClickedEventPayload { direction: 'next' | 'previous' | 'today'; newDate: Date; } // Entity saved event payload export interface IEntitySavedPayload { entityType: EntityType; entityId: string; operation: 'create' | 'update'; changes: any; timestamp: number; } // Entity deleted event payload export interface IEntityDeletedPayload { entityType: EntityType; entityId: string; operation: 'delete'; timestamp: number; } // Audit logged event payload export interface IAuditLoggedPayload { auditId: string; entityType: EntityType; entityId: string; operation: 'create' | 'update' | 'delete'; timestamp: number; }