Refactors drag and drop logic
Improves drag and drop initialization and handling by extracting methods for clarity. This enhances code readability and maintainability.
This commit is contained in:
parent
b6f2aba398
commit
5d406201b8
2 changed files with 125 additions and 96 deletions
|
|
@ -106,30 +106,16 @@ export class EventRenderingService {
|
|||
* Handle GRID_RENDERED event - render events in the current grid
|
||||
*/
|
||||
private handleGridRendered(event: CustomEvent): void {
|
||||
const { container, startDate, endDate, currentDate, isNavigation } = event.detail;
|
||||
const { container, startDate, endDate } = event.detail;
|
||||
|
||||
if (!container) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
let periodStart: Date;
|
||||
let periodEnd: Date;
|
||||
|
||||
if (startDate && endDate) {
|
||||
// Direct date format - use as provided
|
||||
periodStart = startDate;
|
||||
periodEnd = endDate;
|
||||
} else if (currentDate) {
|
||||
return;
|
||||
} else {
|
||||
if (!container || !startDate || !endDate) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.renderEvents({
|
||||
container: container,
|
||||
startDate: periodStart,
|
||||
endDate: periodEnd
|
||||
container,
|
||||
startDate,
|
||||
endDate
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -149,29 +135,44 @@ export class EventRenderingService {
|
|||
* Setup all drag event listeners - moved from EventRenderer for better separation of concerns
|
||||
*/
|
||||
private setupDragEventListeners(): void {
|
||||
this.setupDragStartListener();
|
||||
this.setupDragMoveListener();
|
||||
this.setupDragAutoScrollListener();
|
||||
this.setupDragEndListener();
|
||||
this.setupDragColumnChangeListener();
|
||||
this.setupDragMouseLeaveHeaderListener();
|
||||
this.setupResizeEndListener();
|
||||
this.setupNavigationCompletedListener();
|
||||
}
|
||||
|
||||
private setupDragStartListener(): void {
|
||||
this.eventBus.on('drag:start', (event: Event) => {
|
||||
const dragStartPayload = (event as CustomEvent<DragStartEventPayload>).detail;
|
||||
|
||||
|
||||
if (dragStartPayload.draggedElement.hasAttribute('data-allday')) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
if (dragStartPayload.draggedElement && this.strategy.handleDragStart && dragStartPayload.columnBounds) {
|
||||
this.strategy.handleDragStart(dragStartPayload);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private setupDragMoveListener(): void {
|
||||
this.eventBus.on('drag:move', (event: Event) => {
|
||||
let dragEvent = (event as CustomEvent<DragMoveEventPayload>).detail;
|
||||
|
||||
if (dragEvent.draggedElement.hasAttribute('data-allday')) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
if (this.strategy.handleDragMove) {
|
||||
this.strategy.handleDragMove(dragEvent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private setupDragAutoScrollListener(): void {
|
||||
this.eventBus.on('drag:auto-scroll', (event: Event) => {
|
||||
const { draggedElement, snappedY } = (event as CustomEvent).detail;
|
||||
if (this.strategy.handleDragAutoScroll) {
|
||||
|
|
@ -179,8 +180,9 @@ export class EventRenderingService {
|
|||
this.strategy.handleDragAutoScroll(eventId, snappedY);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Handle drag end events and delegate to appropriate renderer
|
||||
private setupDragEndListener(): void {
|
||||
this.eventBus.on('drag:end', (event: Event) => {
|
||||
const { originalElement: draggedElement, sourceColumn, finalPosition, target } = (event as CustomEvent<DragEndEventPayload>).detail;
|
||||
const finalColumn = finalPosition.column;
|
||||
|
|
@ -224,8 +226,9 @@ export class EventRenderingService {
|
|||
dayEventClone.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Handle column change
|
||||
private setupDragColumnChangeListener(): void {
|
||||
this.eventBus.on('drag:column-change', (event: Event) => {
|
||||
let columnChangeEvent = (event as CustomEvent<DragColumnChangeEventPayload>).detail;
|
||||
|
||||
|
|
@ -238,8 +241,9 @@ export class EventRenderingService {
|
|||
this.strategy.handleColumnChange(columnChangeEvent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private setupDragMouseLeaveHeaderListener(): void {
|
||||
this.dragMouseLeaveHeaderListener = (event: Event) => {
|
||||
const { targetDate, mousePosition, originalElement, draggedClone: cloneElement } = (event as CustomEvent<DragMouseLeaveHeaderEventPayload>).detail;
|
||||
|
||||
|
|
@ -255,8 +259,9 @@ export class EventRenderingService {
|
|||
};
|
||||
|
||||
this.eventBus.on('drag:mouseleave-header', this.dragMouseLeaveHeaderListener);
|
||||
}
|
||||
|
||||
// Handle resize end events
|
||||
private setupResizeEndListener(): void {
|
||||
this.eventBus.on('resize:end', (event: Event) => {
|
||||
const { eventId, element } = (event as CustomEvent<ResizeEndEventPayload>).detail;
|
||||
|
||||
|
|
@ -286,8 +291,9 @@ export class EventRenderingService {
|
|||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Handle navigation period change
|
||||
private setupNavigationCompletedListener(): void {
|
||||
this.eventBus.on(CoreEvents.NAVIGATION_COMPLETED, () => {
|
||||
// Delegate to strategy if it handles navigation
|
||||
if (this.strategy.handleNavigationCompleted) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue