Skip to content

Commit

Permalink
Expose @uppy/drop-target events (#3238)
Browse files Browse the repository at this point in the history
  • Loading branch information
Murderlon committed Oct 5, 2021
1 parent 9840127 commit 0ef42d1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 4 deletions.
11 changes: 8 additions & 3 deletions packages/@uppy/drop-target/src/index.js
Expand Up @@ -45,7 +45,7 @@ module.exports = class DropTarget extends BasePlugin {
}
}

handleDrop = (event) => {
handleDrop = async (event) => {
event.preventDefault()
event.stopPropagation()
clearTimeout(this.removeDragOverClassTimeout)
Expand All @@ -56,11 +56,14 @@ module.exports = class DropTarget extends BasePlugin {

// 3. Add all dropped files
this.uppy.log('[DropTarget] Files were dropped')

const logDropError = (error) => {
this.uppy.log(error, 'error')
}
getDroppedFiles(event.dataTransfer, { logDropError })
.then((files) => this.addFiles(files))

const files = await getDroppedFiles(event.dataTransfer, { logDropError })
this.addFiles(files)
this.opts.onDrop?.(event)
}

handleDragOver = (event) => {
Expand All @@ -75,6 +78,7 @@ module.exports = class DropTarget extends BasePlugin {
clearTimeout(this.removeDragOverClassTimeout)
event.currentTarget.classList.add('uppy-is-drag-over')
this.setPluginState({ isDraggingOver: true })
this.opts.onDragOver?.(event)
}

handleDragLeave = (event) => {
Expand All @@ -90,6 +94,7 @@ module.exports = class DropTarget extends BasePlugin {
currentTarget.classList.remove('uppy-is-drag-over')
this.setPluginState({ isDraggingOver: false })
}, 50)
this.opts.onDragLeave?.(event)
}

addListeners = () => {
Expand Down
5 changes: 4 additions & 1 deletion packages/@uppy/drop-target/types/index.d.ts
@@ -1,7 +1,10 @@
import type { PluginOptions, BasePlugin } from '@uppy/core'

interface DropTargetOptions extends PluginOptions {
target: string | Element
target: string | Element;
onDragOver?: (event: MouseEvent) => void;
onDrop?: (event: MouseEvent) => void;
onDragLeave?: (event: MouseEvent) => void;
}

declare class DropTarget extends BasePlugin<DropTargetOptions> {}
Expand Down
4 changes: 4 additions & 0 deletions packages/@uppy/drop-target/types/index.test-d.ts
Expand Up @@ -3,7 +3,11 @@ import DropTarget from '..'

{
const uppy = new Uppy()

uppy.use(DropTarget, {
target: 'body',
onDragOver: (event) => event.clientX,
onDrop: (event) => event.clientX,
onDragLeave: (event) => event.clientX,
})
}
21 changes: 21 additions & 0 deletions website/src/docs/drop-target.md
Expand Up @@ -57,9 +57,30 @@ The `@uppy/drop-target` plugin has the following configurable options:
```js
uppy.use(DropTarget, {
target: null,
onDragOver: (event) => {},
onDrop: (event) => {},
onDragLeave: (event) => {},
})
```

### `target: null`

DOM element or CSS selector to attach the drag and drop listeners to.

### `onDragOver(event)`

Callback for the [`ondragover`][ondragover] event handler.

### `onDrop(event)`

Callback for the [`ondrop`][ondrop] event handler.

### `onDragLeave(event)`

Callback for the [`ondragleave`][ondragleave] event handler.

<!-- definitions -->

[ondragover]: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ondragover
[ondragleave]: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ondragleave
[ondrop]: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/ondrop

0 comments on commit 0ef42d1

Please sign in to comment.