This project is a Drag’n’Drop backend compatible with DnD Core. It enables your application to use different DnD backends depending on the situation. This package is completely frontend-agnostic, you can refer to this page for frontend-specific packages. This means if your front-end is not yet supported, you’ll have to roll out your own.
npm install dnd-multi-backend
You should only use this package if your framework is not in the supported list: - React - Angular
In this case, you will need to write a custom
pipeline including as many dnd-core
backends as you
wish. See also the examples for more
information.
import { createDragDropManager } from 'dnd-core';
import MultiBackend from 'dnd-multi-backend';
// Define the backend and pipeline
class HTML5Backend {
constructor(manager) {
this.manager = manager;
}
setup() {}
teardown() {}
connectDragSource(sourceId, node, options) {
...
return () => {};
}
connectDragPreview(previewId, node, options) {
...
return () => {};
}
connectDropTarget(targetId, node, options) {
...
return () => {};
}
}
...
const pipeline = {
backends: [
{backend: HTML5Backend,
transition: MouseTransition,
,
}
{backend: TouchBackend,
preview: true,
transition: TouchTransition,
,
},
];
}
// Setup the manager
const manager = createDragDropManager(MultiBackend, {}, pipeline);
const registry = manager.getRegistry();
// Setup your DnD logic
class Source {
...
canDrag() {}
beginDrag() {}
isDragging() {}
endDrag() {}
}
class Target {
...
canDrop() {}
hover() {}
drop() {}
}
// Define the DnD logic on the manager
const Item = 'item';
const src = new Source();
const dst = new Target();
const srcId = registry.addSource(Item, src);
const dstId = registry.addTarget(Item, dst);
// Link the DOM with the logic
const srcP = document.createElement('p');
const srcTxt = document.createTextNode('Source');
.appendChild(srcTxt);
srcPdocument.body.appendChild(srcP);
.getBackend().connectDragSource(srcId, srcP);
manager
const dstP = document.createElement('p');
const dstTxt = document.createTextNode('Target');
.appendChild(dstTxt);
dstPdocument.body.appendChild(dstP);
.getBackend().connectDropTarget(dstId, dstP); manager
MIT, Copyright (c) 2016-2020 Louis Brunner