Calendar/src/types/EventTypes.ts

132 lines
3.3 KiB
TypeScript
Raw Normal View History

/**
2025-10-06 21:55:52 +02:00
* Type definitions for calendar events and drag operations
*/
2025-11-03 21:30:50 +01:00
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
2025-11-03 21:30:50 +01:00
export interface IMousePosition {
x: number;
y: number;
}
// Drag start event payload
2025-11-03 21:30:50 +01:00
export interface IDragStartEventPayload {
originalElement: HTMLElement;
draggedClone: HTMLElement | null;
2025-11-03 21:30:50 +01:00
mousePosition: IMousePosition;
mouseOffset: IMousePosition;
columnBounds: IColumnBounds | null;
}
// Drag move event payload
2025-11-03 21:30:50 +01:00
export interface IDragMoveEventPayload {
originalElement: HTMLElement;
draggedClone: HTMLElement;
2025-11-03 21:30:50 +01:00
mousePosition: IMousePosition;
mouseOffset: IMousePosition;
columnBounds: IColumnBounds | null;
snappedY: number;
}
// Drag end event payload
2025-11-03 21:30:50 +01:00
export interface IDragEndEventPayload {
originalElement: HTMLElement;
draggedClone: HTMLElement | null;
2025-11-03 21:30:50 +01:00
mousePosition: IMousePosition;
originalSourceColumn: IColumnBounds; // Original column where drag started
finalPosition: {
2025-11-03 21:30:50 +01:00
column: IColumnBounds | null; // Where drag ended
snappedY: number;
};
target: 'swp-day-column' | 'swp-day-header' | null;
}
// Drag mouse enter header event payload
2025-11-03 21:30:50 +01:00
export interface IDragMouseEnterHeaderEventPayload {
targetColumn: IColumnBounds;
mousePosition: IMousePosition;
originalElement: HTMLElement | null;
draggedClone: HTMLElement;
2025-11-03 21:30:50 +01:00
calendarEvent: ICalendarEvent;
replaceClone: (newClone: HTMLElement) => void;
}
// Drag mouse leave header event payload
2025-11-03 21:30:50 +01:00
export interface IDragMouseLeaveHeaderEventPayload {
targetColumn: IColumnBounds | null;
2025-11-03 21:30:50 +01:00
mousePosition: IMousePosition;
originalElement: HTMLElement| null;
draggedClone: HTMLElement| null;
}
// Drag mouse enter column event payload
2025-11-03 21:30:50 +01:00
export interface IDragMouseEnterColumnEventPayload {
targetColumn: IColumnBounds;
mousePosition: IMousePosition;
snappedY: number;
originalElement: HTMLElement | null;
draggedClone: HTMLElement;
2025-11-03 21:30:50 +01:00
calendarEvent: ICalendarEvent;
replaceClone: (newClone: HTMLElement) => void;
}
// Drag column change event payload
2025-11-03 21:30:50 +01:00
export interface IDragColumnChangeEventPayload {
originalElement: HTMLElement;
draggedClone: HTMLElement;
2025-11-03 21:30:50 +01:00
previousColumn: IColumnBounds | null;
newColumn: IColumnBounds;
mousePosition: IMousePosition;
}
// Header ready event payload
2025-11-03 21:30:50 +01:00
export interface IHeaderReadyEventPayload {
headerElements: IColumnBounds[];
}
// Resize end event payload
2025-11-03 21:30:50 +01:00
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;
}