50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
export class NativeDragSource {
|
|
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)=>{
|
|
const propertyFn = this.config.exposeProperties[property];
|
|
if (propertyFn != null) {
|
|
newProperties[property] = {
|
|
value: propertyFn(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
|
|
}
|
|
constructor(config){
|
|
this.config = config;
|
|
this.item = {};
|
|
this.initializeExposedProperties();
|
|
}
|
|
}
|
|
|
|
//# sourceMappingURL=NativeDragSource.js.map
|