import { HtmlNode, HtmlNodeModel } from "@logicflow/core";
import { App, createApp, h, ref, VNode } from "vue";
import VueNode from "./CommonHtml.vue"
class CommonHtmlNode extends HtmlNodeModel {
setAttributes() {
this.properties.name = this.properties.name || "id";
this.text.editable = false; // 禁止节点文本编辑
// 设置节点宽高和锚点
const width = 90;
const height = 60;
this.width = width;
this.height = height;
this.anchorsOffset = [
[width / 2, 0],
[0, height / 2],
[-width / 2, 0],
[0, -height / 2],
]
}
}
class CommonHtmlView extends HtmlNode {
app: App;
isMounted: boolean;
r: VNode;
constructor(props: any) {
super(props);
this.isMounted = false
this.r = h(VueNode, {
properties: props.model.getProperties()
})
this.app = createApp({
render: () => this.r
});
}
setHtml(rootEl: HTMLElement) {
if (!this.isMounted) {
this.isMounted = true;
const node = document.createElement("div");
rootEl.appendChild(node);
this.app.mount(node);
} else {
this.r.component!.props.properties = this.props.model.getProperties()
}
}
}
export default {
type: "ID",
view: CommonHtmlView,
model: CommonHtmlNode
};