SafetyScreen-ui/node_modules/@interactjs/actions/drop/DropEvent.js

81 lines
2.4 KiB
JavaScript
Raw Normal View History

2025-03-29 19:33:58 +08:00
import { BaseEvent } from "../../core/BaseEvent.js";
import * as arr from "../../utils/arr.js";
export class DropEvent extends BaseEvent {
/**
* Class of events fired on dropzones during drags with acceptable targets.
*/
constructor(dropState, dragEvent, type) {
super(dragEvent._interaction);
this.target = void 0;
this.dropzone = void 0;
this.dragEvent = void 0;
this.relatedTarget = void 0;
this.draggable = void 0;
this.timeStamp = void 0;
this.propagationStopped = false;
this.immediatePropagationStopped = false;
const {
element,
dropzone
} = type === 'dragleave' ? dropState.prev : dropState.cur;
this.type = type;
this.target = element;
this.currentTarget = element;
this.dropzone = dropzone;
this.dragEvent = dragEvent;
this.relatedTarget = dragEvent.target;
this.draggable = dragEvent.interactable;
this.timeStamp = dragEvent.timeStamp;
}
/**
* If this is a `dropactivate` event, the dropzone element will be
* deactivated.
*
* If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the
* dropzone element and more.
*/
reject() {
const {
dropState
} = this._interaction;
if (this.type !== 'dropactivate' && (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)) {
return;
}
dropState.prev.dropzone = this.dropzone;
dropState.prev.element = this.target;
dropState.rejected = true;
dropState.events.enter = null;
this.stopImmediatePropagation();
if (this.type === 'dropactivate') {
const activeDrops = dropState.activeDrops;
const index = arr.findIndex(activeDrops, ({
dropzone,
element
}) => dropzone === this.dropzone && element === this.target);
dropState.activeDrops.splice(index, 1);
const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate');
deactivateEvent.dropzone = this.dropzone;
deactivateEvent.target = this.target;
this.dropzone.fire(deactivateEvent);
} else {
this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'));
}
}
preventDefault() {}
stopPropagation() {
this.propagationStopped = true;
}
stopImmediatePropagation() {
this.immediatePropagationStopped = this.propagationStopped = true;
}
}
//# sourceMappingURL=DropEvent.js.map