Files
ueblueprint/js/element/ISelectableDraggableElement.js
2023-04-23 10:26:48 +02:00

60 lines
1.7 KiB
JavaScript

import Configuration from "../Configuration.js"
import IDraggableElement from "./IDraggableElement.js"
import Utility from "../Utility.js"
/**
* @typedef {import("../element/IDraggableElement.js").DragEvent} DragEvent
* @typedef {import("../entity/IEntity.js").default} IEntity
* @typedef {import("../template/ISelectableDraggableTemplate.js").default} ISelectableDraggableTemplate
*/
/**
* @template {IEntity} T
* @template {ISelectableDraggableTemplate} U
* @extends {IDraggableElement<T, U>}
*/
export default class ISelectableDraggableElement extends IDraggableElement {
static properties = {
...super.properties,
selected: {
type: Boolean,
attribute: "data-selected",
reflect: true,
converter: Utility.booleanConverter,
},
}
/** @param {DragEvent} e */
dragHandler = e => this.addLocation(...e.detail.value)
constructor() {
super()
this.selected = false
this.listeningDrag = false
}
setup() {
super.setup()
this.setSelected(this.selected)
}
cleanup() {
super.cleanup()
this.blueprint.removeEventListener(Configuration.nodeDragGeneralEventName, this.dragHandler)
}
setSelected(value = true) {
this.selected = value
if (this.blueprint) {
if (this.selected) {
this.listeningDrag = true
this.blueprint.addEventListener(Configuration.nodeDragGeneralEventName, this.dragHandler)
} else {
this.blueprint.removeEventListener(Configuration.nodeDragGeneralEventName, this.dragHandler)
this.listeningDrag = false
}
}
}
}