mirror of https://github.com/ctk-hq/ctk
fix: move node into component
parent
6ff92565ad
commit
47f0fb13f3
@ -0,0 +1,65 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { IClientNodeItem, CallbackFunction } from "../../types";
|
||||
import eventBus from "../../events/eventBus";
|
||||
import { Popover } from "./Popover";
|
||||
|
||||
interface INodeProps {
|
||||
node: IClientNodeItem;
|
||||
setNodeForEdit: CallbackFunction;
|
||||
setNodeForDelete: CallableFunction;
|
||||
}
|
||||
|
||||
export default function Node(props: INodeProps) {
|
||||
const { node, setNodeForEdit, setNodeForDelete } = props;
|
||||
const [nodeDragging, setNodeDragging] = useState<string | null>();
|
||||
const [nodeHovering, setNodeHovering] = useState<string | null>();
|
||||
|
||||
useEffect(() => {
|
||||
eventBus.on("EVENT_DRAG_START", (data: any) => {
|
||||
setNodeDragging(data.detail.message.id);
|
||||
});
|
||||
|
||||
eventBus.on("EVENT_DRAG_STOP", () => {
|
||||
setNodeDragging(null);
|
||||
});
|
||||
|
||||
return () => {
|
||||
eventBus.remove("EVENT_DRAG_START", () => undefined);
|
||||
eventBus.remove("EVENT_DRAG_STOP", () => undefined);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div
|
||||
key={node.key}
|
||||
className={"node-item cursor-pointer shadow flex flex-col group"}
|
||||
id={node.key}
|
||||
style={{ top: node.position.top, left: node.position.left }}
|
||||
onMouseEnter={() => setNodeHovering(node.key)}
|
||||
onMouseLeave={() => {
|
||||
if (nodeHovering === node.key) {
|
||||
setNodeHovering(null);
|
||||
}
|
||||
}}
|
||||
>
|
||||
{nodeHovering === node.key && nodeDragging !== node.key && (
|
||||
<Popover
|
||||
onEditClick={() => {
|
||||
setNodeForEdit(node);
|
||||
}}
|
||||
onDeleteClick={() => {
|
||||
setNodeForDelete(node);
|
||||
}}
|
||||
></Popover>
|
||||
)}
|
||||
<div className="node-label w-full py-2 px-4">
|
||||
<div className="text-sm font-semibold overflow-x-hidden">
|
||||
{node.canvasConfig.service_name}
|
||||
</div>
|
||||
<div className="text-xs text-gray-500 overflow-x-hidden">
|
||||
{node.serviceConfig?.container_name}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Loading…
Reference in New Issue