From d7b9cf9ddde70426946df32b1d39bce35ac50aab Mon Sep 17 00:00:00 2001 From: Artem Golub Date: Tue, 12 Jul 2022 14:27:26 +0300 Subject: [PATCH] fix: move node into component --- .../frontend/src/components/Canvas/index.tsx | 51 ++------------- .../frontend/src/components/Canvas/node.tsx | 65 +++++++++++++++++++ 2 files changed, 71 insertions(+), 45 deletions(-) create mode 100644 services/frontend/src/components/Canvas/node.tsx diff --git a/services/frontend/src/components/Canvas/index.tsx b/services/frontend/src/components/Canvas/index.tsx index 9f65135..d6f4686 100644 --- a/services/frontend/src/components/Canvas/index.tsx +++ b/services/frontend/src/components/Canvas/index.tsx @@ -2,9 +2,9 @@ import { FC, useState, useEffect } from "react"; import { Dictionary, values } from "lodash"; import { v4 as uuidv4 } from "uuid"; import eventBus from "../../events/eventBus"; -import { Popover } from "./Popover"; import { IGraphData, CallbackFunction, IClientNodeItem } from "../../types"; import { useJsPlumb } from "../useJsPlumb"; +import Node from "./node"; const CANVAS_ID: string = "canvas-container-" + uuidv4(); @@ -34,8 +34,6 @@ export const Canvas: FC = (props) => { setNodeForEdit, setNodeForDelete } = props; - const [nodeDragging, setNodeDragging] = useState(); - const [nodeHovering, setNodeHovering] = useState(); const [dragging, setDragging] = useState(false); const [scale, setScale] = useState(1); const [_scale, _setScale] = useState(1); @@ -130,22 +128,12 @@ export const Canvas: FC = (props) => { }, [canvasPosition]); useEffect(() => { - eventBus.on("EVENT_DRAG_START", (data: any) => { - setNodeDragging(data.detail.message.id); - }); - - eventBus.on("EVENT_DRAG_STOP", () => { - setNodeDragging(null); - }); - eventBus.on("NODE_DELETED", (data: any) => { removeEndpoint(data.detail.message.node); }); return () => { eventBus.remove("NODE_DELETED", () => undefined); - eventBus.remove("EVENT_DRAG_START", () => undefined); - eventBus.remove("EVENT_DRAG_STOP", () => undefined); }; }, []); @@ -175,39 +163,12 @@ export const Canvas: FC = (props) => { }} > {values(nodes).map((x) => ( -
setNodeHovering(x.key)} - onMouseLeave={() => { - if (nodeHovering === x.key) { - setNodeHovering(null); - } - }} - > - {nodeHovering === x.key && nodeDragging !== x.key && ( - { - setNodeForEdit(x); - }} - onDeleteClick={() => { - setNodeForDelete(x); - }} - > - )} -
-
- {x.canvasConfig.service_name} -
-
- {x.serviceConfig?.container_name} -
-
-
+ node={x} + setNodeForEdit={setNodeForEdit} + setNodeForDelete={setNodeForDelete} + /> ))} diff --git a/services/frontend/src/components/Canvas/node.tsx b/services/frontend/src/components/Canvas/node.tsx new file mode 100644 index 0000000..ffe9c74 --- /dev/null +++ b/services/frontend/src/components/Canvas/node.tsx @@ -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(); + const [nodeHovering, setNodeHovering] = useState(); + + 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 ( +
setNodeHovering(node.key)} + onMouseLeave={() => { + if (nodeHovering === node.key) { + setNodeHovering(null); + } + }} + > + {nodeHovering === node.key && nodeDragging !== node.key && ( + { + setNodeForEdit(node); + }} + onDeleteClick={() => { + setNodeForDelete(node); + }} + > + )} +
+
+ {node.canvasConfig.service_name} +
+
+ {node.serviceConfig?.container_name} +
+
+
+ ); +}