@ng-dnd/core
Version:
Drag and Drop for Angular
43 lines • 4.38 kB
JavaScript
export class Target {
constructor(spec, monitor) {
this.spec = spec;
this.monitor = monitor;
this.monitor = monitor;
}
withChangeDetection(fn) {
const x = fn();
return x;
}
receiveMonitor(monitor) {
this.monitor = monitor;
}
canDrop() {
if (!this.spec.canDrop) {
return true;
}
// Don't run isDragging in the zone. Should be a pure function of `this`.
return this.spec.canDrop(this.monitor);
}
hover() {
if (!this.spec.hover) {
return;
}
this.withChangeDetection(() => {
this.spec.hover?.(this.monitor);
});
}
drop() {
if (!this.spec.drop) {
return undefined;
}
return this.withChangeDetection(() => {
return this.spec.drop?.(this.monitor);
});
}
}
export function createTargetFactory(spec) {
return function createTarget(monitor) {
return new Target(spec, monitor);
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVGFyZ2V0RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbnRlcm5hbC9jcmVhdGVUYXJnZXRGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyxNQUFNO0lBQ2pCLFlBQ1UsSUFBb0IsRUFDcEIsT0FBMEI7UUFEMUIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFFbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELG1CQUFtQixDQUFJLEVBQVc7UUFDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBWTtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQW9CO0lBQ3RELE9BQU8sU0FBUyxZQUFZLENBQUMsT0FBWTtRQUN2QyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJvcFRhcmdldCB9IGZyb20gJ2RuZC1jb3JlJztcbmltcG9ydCB7IERyb3BUYXJnZXRTcGVjIH0gZnJvbSAnLi4vZHJvcC10YXJnZXQtc3BlY2lmaWNhdGlvbic7XG5pbXBvcnQgeyBEcm9wVGFyZ2V0TW9uaXRvciB9IGZyb20gJy4uL3RhcmdldC1tb25pdG9yJztcblxuZXhwb3J0IGNsYXNzIFRhcmdldCBpbXBsZW1lbnRzIERyb3BUYXJnZXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNwZWM6IERyb3BUYXJnZXRTcGVjLFxuICAgIHByaXZhdGUgbW9uaXRvcjogRHJvcFRhcmdldE1vbml0b3JcbiAgKSB7XG4gICAgdGhpcy5tb25pdG9yID0gbW9uaXRvcjtcbiAgfVxuXG4gIHdpdGhDaGFuZ2VEZXRlY3Rpb248VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICBjb25zdCB4ID0gZm4oKTtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIHJlY2VpdmVNb25pdG9yKG1vbml0b3I6IGFueSkge1xuICAgIHRoaXMubW9uaXRvciA9IG1vbml0b3I7XG4gIH1cblxuICBjYW5Ecm9wKCkge1xuICAgIGlmICghdGhpcy5zcGVjLmNhbkRyb3ApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIERvbid0IHJ1biBpc0RyYWdnaW5nIGluIHRoZSB6b25lLiBTaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIGB0aGlzYC5cbiAgICByZXR1cm4gdGhpcy5zcGVjLmNhbkRyb3AodGhpcy5tb25pdG9yKTtcbiAgfVxuXG4gIGhvdmVyKCkge1xuICAgIGlmICghdGhpcy5zcGVjLmhvdmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMud2l0aENoYW5nZURldGVjdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnNwZWMuaG92ZXI/Lih0aGlzLm1vbml0b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgZHJvcCgpIHtcbiAgICBpZiAoIXRoaXMuc3BlYy5kcm9wKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLndpdGhDaGFuZ2VEZXRlY3Rpb24oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc3BlYy5kcm9wPy4odGhpcy5tb25pdG9yKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFyZ2V0RmFjdG9yeShzcGVjOiBEcm9wVGFyZ2V0U3BlYykge1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlVGFyZ2V0KG1vbml0b3I6IGFueSk6IERyb3BUYXJnZXQge1xuICAgIHJldHVybiBuZXcgVGFyZ2V0KHNwZWMsIG1vbml0b3IpO1xuICB9O1xufVxuIl19