Enhances calendar flexibility by introducing group-based column spanning and improving cross-mode event handling Adds support for: - Dynamic column grouping in date and resource modes - Consistent event drag-and-drop across different calendar views - More robust all-day event layout calculations Improves event management logic to handle resource and date mode transitions more elegantly
134 lines
No EOL
3.4 KiB
TypeScript
134 lines
No EOL
3.4 KiB
TypeScript
/**
|
|
* 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;
|
|
} |