Files
ueblueprint/js/element/NodeElement.js
2022-04-14 22:17:38 +02:00

97 lines
2.7 KiB
JavaScript

// @ts-check
import Configuration from "../Configuration"
import ISelectableDraggableElement from "./ISelectableDraggableElement"
import NodeTemplate from "../template/NodeTemplate"
import ObjectEntity from "../entity/ObjectEntity"
import PinEntity from "../entity/PinEntity"
import SerializerFactory from "../serialization/SerializerFactory"
import PinReferenceEntity from "../entity/PinReferenceEntity"
/**
* @extends {ISelectableDraggableElement<ObjectEntity, NodeTemplate>}
*/
export default class NodeElement extends ISelectableDraggableElement {
/**
* @param {ObjectEntity} entity
*/
constructor(entity) {
super(entity, new NodeTemplate())
this.dragLinkObjects = []
super.setLocation([this.entity.NodePosX.value, this.entity.NodePosY.value])
}
static fromSerializedObject(str) {
let entity = SerializerFactory.getSerializer(ObjectEntity).read(str)
return new NodeElement(entity)
}
connectedCallback() {
const type = this.getAttribute("type")?.trim()
super.connectedCallback()
}
disconnectedCallback() {
super.disconnectedCallback()
this.dispatchDeleteEvent()
}
getNodeName() {
return this.entity.getFullName()
}
sanitizeLinks() {
this.getPinElements().forEach(pin => pin.sanitizeLinks())
}
/**
* @param {String} name
*/
rename(name) {
if (this.entity.Name == name) {
return false
}
for (let sourcePinElement of this.getPinElements()) {
for (let targetPinReference of sourcePinElement.getLinks()) {
this.blueprint.getPin(targetPinReference).redirectLink(sourcePinElement, new PinReferenceEntity({
objectName: name,
pinGuid: sourcePinElement.entity.PinId,
}))
}
}
this.entity.Name = name
this.template.applyRename(this)
}
getPinElements() {
return this.template.getPinElements(this)
}
/**
* @returns {PinEntity[]}
*/
getPinEntities() {
return this.entity.CustomProperties.filter(v => v instanceof PinEntity)
}
setLocation(value = [0, 0]) {
let nodeType = this.entity.NodePosX.constructor
// @ts-expect-error
this.entity.NodePosX = new nodeType(value[0])
// @ts-expect-error
this.entity.NodePosY = new nodeType(value[1])
super.setLocation(value)
}
dispatchDeleteEvent(value) {
let deleteEvent = new CustomEvent(Configuration.nodeDeleteEventName, {
bubbles: true,
cancelable: true,
})
this.dispatchEvent(deleteEvent)
}
}
customElements.define("ueb-node", NodeElement)