| import React from "react"; | |
| import { CustomNodeProps } from "src/containers/Views/GraphView/CustomNode"; | |
| import { TextRenderer } from "./TextRenderer"; | |
| import * as Styled from "./styles"; | |
| type Value = [string, string]; | |
| type RowProps = { | |
| val: Value; | |
| x: number; | |
| y: number; | |
| index: number; | |
| }; | |
| const Row = ({ val, x, y, index }: RowProps) => { | |
| const key = JSON.stringify(val); | |
| const rowKey = JSON.stringify(val[0]).replaceAll('"', ""); | |
| const rowValue = JSON.stringify(val[1]); | |
| return ( | |
| <Styled.StyledRow $value={rowValue} data-key={key} data-x={x} data-y={y + index * 17.8}> | |
| <Styled.StyledKey $type="object">{rowKey}: </Styled.StyledKey> | |
| <TextRenderer>{rowValue}</TextRenderer> | |
| </Styled.StyledRow> | |
| ); | |
| }; | |
| const Node: React.FC<CustomNodeProps> = ({ node, x, y }) => ( | |
| <Styled.StyledForeignObject width={node.width} height={node.height} x={0} y={0} $isObject> | |
| {(node.text as Value[]).map((val, idx) => ( | |
| <Row val={val} index={idx} x={x} y={y} key={idx} /> | |
| ))} | |
| </Styled.StyledForeignObject> | |
| ); | |
| function propsAreEqual(prev: CustomNodeProps, next: CustomNodeProps) { | |
| return String(prev.node.text) === String(next.node.text) && prev.node.width === next.node.width; | |
| } | |
| export const ObjectNode = React.memo(Node, propsAreEqual); | |