PopoverNode.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { Graph, Node } from "@antv/x6";
  2. import React from "react";
  3. import NodeMenu from "../NodeMenu";
  4. import { Popover } from "antd";
  5. export default function PopoverNode({
  6. node,
  7. graph,
  8. }: {
  9. node: Node;
  10. graph: Graph;
  11. }) {
  12. const { hideNodes = [] } = node.getData();
  13. const handleChange = (addNode?: Node) => {
  14. node.prop("addedNode", { addNode });
  15. };
  16. const handleChangeOpen = (open: boolean) => {
  17. if (!open) {
  18. node.prop("closedPopover", {});
  19. node.removeProp("closedPopover");
  20. node.removeProp("addedNode");
  21. setTimeout(() => {
  22. graph.removeCells([node]);
  23. }, 300);
  24. }
  25. };
  26. return (
  27. <div className="w-full h-full">
  28. <Popover
  29. content={
  30. <NodeMenu
  31. graph={graph}
  32. onChange={handleChange}
  33. position={node.position()}
  34. hideNodes={hideNodes}
  35. />
  36. }
  37. getPopupContainer={(n) => n}
  38. trigger={"click"}
  39. placement="bottom"
  40. arrow={false}
  41. defaultOpen={true}
  42. onOpenChange={handleChangeOpen}
  43. ></Popover>
  44. </div>
  45. );
  46. }