You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.4 KiB
46 lines
1.4 KiB
export class NativeDragSource {
|
|
constructor(config) {
|
|
this.config = config;
|
|
this.item = {};
|
|
this.initializeExposedProperties();
|
|
}
|
|
initializeExposedProperties() {
|
|
Object.keys(this.config.exposeProperties).forEach(property => {
|
|
Object.defineProperty(this.item, property, {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get() {
|
|
// eslint-disable-next-line no-console
|
|
console.warn(`Browser doesn't allow reading "${property}" until the drop event.`);
|
|
return null;
|
|
},
|
|
});
|
|
});
|
|
}
|
|
loadDataTransfer(dataTransfer) {
|
|
if (dataTransfer) {
|
|
const newProperties = {};
|
|
Object.keys(this.config.exposeProperties).forEach(property => {
|
|
newProperties[property] = {
|
|
value: this.config.exposeProperties[property](dataTransfer, this.config.matchesTypes),
|
|
configurable: true,
|
|
enumerable: true,
|
|
};
|
|
});
|
|
Object.defineProperties(this.item, newProperties);
|
|
}
|
|
}
|
|
canDrag() {
|
|
return true;
|
|
}
|
|
beginDrag() {
|
|
return this.item;
|
|
}
|
|
isDragging(monitor, handle) {
|
|
return handle === monitor.getSourceId();
|
|
}
|
|
endDrag() {
|
|
// empty
|
|
}
|
|
}
|