Skip to content

Commit

Permalink
fix(ui): card drag'n'drop not working in some browser
Browse files Browse the repository at this point in the history
Fixes #21.
  • Loading branch information
kleinfreund committed Feb 24, 2025
1 parent 5457e8e commit e803939
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/ui/components/DraggableCard.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const registeredContainers = new Set<Element>()
let isDragging = false
const FORMAT_PREFIX = 'dragged-element-id:'

export class DraggableCard extends HTMLElement {
container: HTMLElement | undefined
Expand Down Expand Up @@ -48,7 +49,8 @@ export class DraggableCard extends HTMLElement {
isDragging = true
event.dataTransfer.effectAllowed = 'move'
event.dataTransfer.dropEffect = 'move'
event.dataTransfer.setData('text/plain', draggedEl.id)
// Dirty workaround: Store the drag'n'drop data in the format to get around browser security measures that prevent reading the data in event types other than `drop`.
event.dataTransfer.setData(`${FORMAT_PREFIX}${draggedEl.id}`, draggedEl.id)
}
}

Expand Down Expand Up @@ -87,7 +89,9 @@ function getDragEventData (event: DragEvent, container: Element): Element | null
return null
}

const draggedElId = event.dataTransfer.getData('text/plain')
// Dirty workaround: Read data from the format key instead of using `getData`.
const format = event.dataTransfer.types.find((format) => format.startsWith(FORMAT_PREFIX))
const draggedElId = format ? format.substring(FORMAT_PREFIX.length) : undefined
if (draggedElId && container) {
const draggedEl = Array.from(container.children).find((el) => el.id === draggedElId)

Expand Down

0 comments on commit e803939

Please sign in to comment.