@ng-dnd/core
Version:
Drag and Drop for Angular
43 lines • 4.67 kB
JavaScript
export class Source {
constructor(spec, monitor) {
this.spec = spec;
this.monitor = monitor;
}
withChangeDetection(fn) {
const x = fn();
return x;
}
canDrag() {
if (!this.spec.canDrag) {
return true;
}
return this.withChangeDetection(() => {
return this.spec.canDrag?.(this.monitor) || false;
});
}
isDragging(globalMonitor, sourceId) {
if (!this.spec.isDragging) {
return sourceId === globalMonitor.getSourceId();
}
return this.spec.isDragging(this.monitor);
}
beginDrag() {
return this.withChangeDetection(() => {
return this.spec.beginDrag(this.monitor);
});
}
endDrag() {
if (!this.spec.endDrag) {
return;
}
return this.withChangeDetection(() => {
this.spec.endDrag?.(this.monitor);
});
}
}
export function createSourceFactory(spec) {
return function createSource(monitor) {
return new Source(spec, monitor);
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlU291cmNlRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbnRlcm5hbC9jcmVhdGVTb3VyY2VGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyxNQUFNO0lBQ2pCLFlBQ1UsSUFBeUIsRUFDekIsT0FBb0M7UUFEcEMsU0FBSSxHQUFKLElBQUksQ0FBcUI7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7SUFDM0MsQ0FBQztJQUVKLG1CQUFtQixDQUFJLEVBQVc7UUFDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxhQUFrQixFQUFFLFFBQWE7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUIsT0FBTyxRQUFRLEtBQUssYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBeUI7SUFDM0QsT0FBTyxTQUFTLFlBQVksQ0FBQyxPQUEwQjtRQUNyRCxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJhZ1NvdXJjZSB9IGZyb20gJ2RuZC1jb3JlJztcbmltcG9ydCB7IERyYWdTb3VyY2VTcGVjIH0gZnJvbSAnLi4vZHJhZy1zb3VyY2Utc3BlY2lmaWNhdGlvbic7XG5pbXBvcnQgeyBEcmFnU291cmNlTW9uaXRvciB9IGZyb20gJy4uL3NvdXJjZS1tb25pdG9yJztcblxuZXhwb3J0IGNsYXNzIFNvdXJjZSBpbXBsZW1lbnRzIERyYWdTb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNwZWM6IERyYWdTb3VyY2VTcGVjPGFueT4sXG4gICAgcHJpdmF0ZSBtb25pdG9yOiBEcmFnU291cmNlTW9uaXRvcjxhbnksIGFueT5cbiAgKSB7fVxuXG4gIHdpdGhDaGFuZ2VEZXRlY3Rpb248VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICBjb25zdCB4ID0gZm4oKTtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGNhbkRyYWcoKSB7XG4gICAgaWYgKCF0aGlzLnNwZWMuY2FuRHJhZykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMud2l0aENoYW5nZURldGVjdGlvbigoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zcGVjLmNhbkRyYWc/Lih0aGlzLm1vbml0b3IpIHx8IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNEcmFnZ2luZyhnbG9iYWxNb25pdG9yOiBhbnksIHNvdXJjZUlkOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc3BlYy5pc0RyYWdnaW5nKSB7XG4gICAgICByZXR1cm4gc291cmNlSWQgPT09IGdsb2JhbE1vbml0b3IuZ2V0U291cmNlSWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zcGVjLmlzRHJhZ2dpbmcodGhpcy5tb25pdG9yKTtcbiAgfVxuXG4gIGJlZ2luRHJhZygpIHtcbiAgICByZXR1cm4gdGhpcy53aXRoQ2hhbmdlRGV0ZWN0aW9uKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnNwZWMuYmVnaW5EcmFnKHRoaXMubW9uaXRvcik7XG4gICAgfSk7XG4gIH1cblxuICBlbmREcmFnKCkge1xuICAgIGlmICghdGhpcy5zcGVjLmVuZERyYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy53aXRoQ2hhbmdlRGV0ZWN0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuc3BlYy5lbmREcmFnPy4odGhpcy5tb25pdG9yKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU291cmNlRmFjdG9yeShzcGVjOiBEcmFnU291cmNlU3BlYzxhbnk+KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVTb3VyY2UobW9uaXRvcjogRHJhZ1NvdXJjZU1vbml0b3IpOiBEcmFnU291cmNlIHtcbiAgICByZXR1cm4gbmV3IFNvdXJjZShzcGVjLCBtb25pdG9yKTtcbiAgfTtcbn1cbiJdfQ==