index.tsx 819 B

123456789101112131415161718192021222324252627282930313233343536
  1. import React from "react";
  2. import { Node, NodeProps } from "reaflow";
  3. import ObjectNode from "./ObjectNode";
  4. import TextNode from "./TextNode";
  5. export interface CustomNodeProps {
  6. node: NodeData;
  7. x: number;
  8. y: number;
  9. hasCollapse?: boolean;
  10. }
  11. const rootProps = {
  12. width: 40,
  13. height: 40,
  14. rx: 50,
  15. ry: 50,
  16. };
  17. export const CustomNode = (nodeProps: NodeProps) => {
  18. const { text, data } = nodeProps.properties;
  19. return (
  20. <Node {...nodeProps} {...(data.isEmpty && rootProps)} label={<React.Fragment />}>
  21. {({ node, x, y }) => {
  22. if (Array.isArray(text)) {
  23. return <ObjectNode node={node as NodeData} x={x} y={y} />;
  24. }
  25. return (
  26. <TextNode node={node as NodeData} hasCollapse={data.childrenCount > 0} x={x} y={y} />
  27. );
  28. }}
  29. </Node>
  30. );
  31. };