import React, {useEffect} from "react"; import {Background, Controls, MiniMap, ReactFlow, useEdgesState, useNodesState} from "@xyflow/react"; import {Flex} from "antd"; import {Domain} from "../../utils/api"; import {getLayoutedElements} from "../tracking/watchlist/diagram/getLayoutedElements"; import {domainEntitiesToNode, domainToNode, nsToNode, tldToNode} from "../tracking/watchlist/diagram/watchlistToNodes"; import {domainEntitiesToEdges, domainNSToEdges, tldToEdge} from "../tracking/watchlist/diagram/watchlistToEdges"; export function DomainDiagram({domain}: { domain: Domain }) { const [nodes, setNodes, onNodesChange] = useNodesState([]) const [edges, setEdges, onEdgesChange] = useEdgesState([]) useEffect(() => { const nodes = [ domainToNode(domain), ...domainEntitiesToNode(domain, true), ...domain.nameservers.map(nsToNode) ].flat() const edges = [ domainEntitiesToEdges(domain, true), ...domainNSToEdges(domain) ].flat() if (domain.tld.tld !== '.') { nodes.push(tldToNode(domain.tld)) edges.push(tldToEdge(domain)) } const e = getLayoutedElements(nodes, edges) setNodes(e.nodes) setEdges(e.edges) }, []) return }