From 9e568fbd8e6060ee5e1833e6b15bd229f53a7b2b Mon Sep 17 00:00:00 2001 From: "Janus C. H. Knudsen" Date: Thu, 11 Dec 2025 21:16:40 +0100 Subject: [PATCH] wip --- src/v2/features/event/EventRenderer.ts | 18 +++++++++++++++++- .../headerdrawer/HeaderDrawerRenderer.ts | 5 +++-- src/v2/managers/DragDropManager.ts | 3 ++- src/v2/types/DragTypes.ts | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/v2/features/event/EventRenderer.ts b/src/v2/features/event/EventRenderer.ts index b53a190..a6af2e1 100644 --- a/src/v2/features/event/EventRenderer.ts +++ b/src/v2/features/event/EventRenderer.ts @@ -4,7 +4,7 @@ import { DateService } from '../../core/DateService'; import { IGridConfig } from '../../core/IGridConfig'; import { calculateEventPosition, snapToGrid, pixelsToMinutes } from '../../utils/PositionUtils'; import { CoreEvents } from '../../constants/CoreEvents'; -import { IDragColumnChangePayload, IDragMovePayload } from '../../types/DragTypes'; +import { IDragColumnChangePayload, IDragMovePayload, IDragEndPayload } from '../../types/DragTypes'; import { calculateColumnLayout } from './EventLayoutEngine'; import { IGridGroupLayout } from './EventLayoutTypes'; @@ -46,6 +46,22 @@ export class EventRenderer { const payload = (e as CustomEvent).detail; this.handleEventUpdated(payload); }); + + this.eventBus.on(CoreEvents.EVENT_DRAG_END, (e) => { + const payload = (e as CustomEvent).detail; + this.handleDragEnd(payload); + }); + } + + /** + * Handle EVENT_DRAG_END - remove element if dropped in header + */ + private handleDragEnd(payload: IDragEndPayload): void { + if (payload.target === 'header') { + // Event was dropped in header drawer - remove from grid + const element = this.container?.querySelector(`swp-content-viewport swp-event[data-event-id="${payload.eventId}"]`); + element?.remove(); + } } /** diff --git a/src/v2/features/headerdrawer/HeaderDrawerRenderer.ts b/src/v2/features/headerdrawer/HeaderDrawerRenderer.ts index b0738f2..86e2609 100644 --- a/src/v2/features/headerdrawer/HeaderDrawerRenderer.ts +++ b/src/v2/features/headerdrawer/HeaderDrawerRenderer.ts @@ -128,6 +128,8 @@ export class HeaderDrawerRenderer { /** * Handle drag end - finalize the item (it stays in header) + * Note: EventRenderer handles removing the original element from the grid + * via EVENT_DRAG_END with target === 'header' */ private handleDragEnd(): void { if (!this.currentItem) return; @@ -135,10 +137,9 @@ export class HeaderDrawerRenderer { // Remove dragging state this.currentItem.classList.remove('dragging'); - // Item stays - it's now permanent // TODO: Emit event to persist allDay=true change - // Clear references but leave item in DOM + // Clear references this.currentItem = null; this.sourceElement = null; } diff --git a/src/v2/managers/DragDropManager.ts b/src/v2/managers/DragDropManager.ts index 0018af3..4fa732e 100644 --- a/src/v2/managers/DragDropManager.ts +++ b/src/v2/managers/DragDropManager.ts @@ -159,7 +159,8 @@ export class DragDropManager { dateKey, resourceId, sourceDateKey: this.dragState.sourceDateKey, - sourceResourceId: this.dragState.sourceResourceId + sourceResourceId: this.dragState.sourceResourceId, + target: this.inHeader ? 'header' : 'grid' }; this.eventBus.emit(CoreEvents.EVENT_DRAG_END, payload); diff --git a/src/v2/types/DragTypes.ts b/src/v2/types/DragTypes.ts index 45e157c..1549965 100644 --- a/src/v2/types/DragTypes.ts +++ b/src/v2/types/DragTypes.ts @@ -32,6 +32,7 @@ export interface IDragEndPayload { resourceId?: string; // Target column resource (resource mode) sourceDateKey: string; // Source column date (where drag started) sourceResourceId?: string; // Source column resource (where drag started) + target: 'grid' | 'header'; // Where the event was dropped } export interface IDragCancelPayload {