123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { useEffect, useRef, useState } from "react";
- import { Graph, Node } from "@antv/x6";
- import img from "@/assets/wf_icon_autohandle.gif";
- import { MenuProps } from "antd";
- import Port from "./Port";
- import Content from "./Content";
- export default ({ node, graph }: { node: Node; graph: Graph }) => {
- const ref = useRef<HTMLDivElement>(null);
- const { width, height } = node.getSize();
- const [hovered, setHovered] = useState(false);
- const [isSelected, setIsSelected] = useState(false);
- const items: MenuProps["items"] = [
- { key: "copy", label: "复制" },
- { key: "delete", label: "删除" },
- ];
- useEffect(() => {
- const { offsetWidth = 0, offsetHeight = 0 } = ref.current || {};
- if (offsetHeight !== height || offsetWidth !== width) {
- node.resize(offsetWidth, offsetHeight);
- }
- }, []);
- graph?.on("selection:changed", (args) => {
- setIsSelected(graph.isSelected(node));
- });
- return (
- <div
- className="flow-node text-14px relative"
- style={{ borderColor: isSelected || hovered ? "#0e52e0" : "#d9d9d9" }}
- ref={ref}
- onMouseEnter={() => setHovered(true)}
- onMouseLeave={() => setHovered(false)}
- >
- <Content
- img={img}
- node={node}
- graph={graph}
- items={items}
- headerStyle={{
- backgroundImage:
- "linear-gradient(to bottom, rgba(32, 139, 226, 0.2), #ffffff)",
- }}
- />
- <Port hovered={hovered} out={false} style={{ left: -7, cursor: "default" }} node={node} graph={graph} />
- <Port hovered={hovered} style={{ right: -7, cursor: "crosshair" }} node={node} graph={graph} />
- </div>
- );
- };
|