dnd-core
Version:
Drag and drop sans the GUI
29 lines (24 loc) • 750 B
text/typescript
import { invariant } from '@react-dnd/invariant'
import type {
DragDropManager,
DragDropMonitor,
SentinelAction,
} from '../../interfaces.js'
import { END_DRAG } from './types.js'
export function createEndDrag(manager: DragDropManager) {
return function endDrag(): SentinelAction {
const monitor = manager.getMonitor()
const registry = manager.getRegistry()
verifyIsDragging(monitor)
const sourceId = monitor.getSourceId()
if (sourceId != null) {
const source = registry.getSource(sourceId, true)
source.endDrag(monitor, sourceId)
registry.unpinSource()
}
return { type: END_DRAG }
}
}
function verifyIsDragging(monitor: DragDropMonitor) {
invariant(monitor.isDragging(), 'Cannot call endDrag while not dragging.')
}