Skip to content

Commit

Permalink
fix: removing the classes from the container after not dragging over …
Browse files Browse the repository at this point in the history
…anymore
  • Loading branch information
builtbybengt committed Nov 11, 2024
1 parent 25cfa65 commit bbb2460
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 8 deletions.
19 changes: 14 additions & 5 deletions src/lib/actions/droppable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ export function droppable<T>(node: HTMLElement, options: DragDropOptions<T>) {
if (options.disabled) return;
event.preventDefault();

const target = event.target as HTMLElement;

dndState.targetContainer = options.container;
dndState.targetElement = target;

node.classList.add(...dragOverClass);
options.callbacks?.onDragEnter?.(dndState as DragDropState<T>);
}
Expand All @@ -19,11 +23,16 @@ export function droppable<T>(node: HTMLElement, options: DragDropOptions<T>) {
if (options.disabled) return;

const target = event.target as HTMLElement;
if (!node.contains(target)) {
dndState.targetContainer = null;
node.classList.remove(...dragOverClass);
options.callbacks?.onDragLeave?.(dndState as DragDropState<T>);
}

// check if element is still being dragged over
if (!dndState.targetElement?.isSameNode(target)) return;

node.classList.remove(...dragOverClass);

options.callbacks?.onDragLeave?.(dndState as DragDropState<T>);

dndState.targetContainer = null;
dndState.targetElement = null;
}

function handleDragOver(event: DragEvent) {
Expand Down
3 changes: 2 additions & 1 deletion src/lib/stores/dnd.svelte.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ export const dndState = $state<DragDropState>({
isDragging: false,
draggedItem: null,
sourceContainer: '',
targetContainer: null
targetContainer: null,
targetElement: null
});
1 change: 1 addition & 0 deletions src/lib/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ export interface DragDropState<T = unknown> {
draggedItem: T;
sourceContainer: string;
targetContainer: string | null;
targetElement: HTMLElement | null;
}

export interface DragDropCallbacks<T = unknown> {
Expand Down
4 changes: 2 additions & 2 deletions src/routes/custom-classes/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@
container: index.toString(),
callbacks: { onDrop: handleDrop },
attributes: {
draggingClass: 'custom-dragging ring-1 ring-blue-500',
dragOverClass: 'custom-drag-over ring-1 ring-red-500'
draggingClass: 'border border-blue-500',
dragOverClass: 'border border-red-500'
}
}}
animate:flip={{ duration: 200 }}
Expand Down

0 comments on commit bbb2460

Please sign in to comment.