UNPKG

@gravity-ui/graph

Version:

Modern graph editor component

18 lines (17 loc) 1.04 kB
import React, { useMemo } from "react"; import { useSignal } from "./hooks"; import { useBlockAnchorPosition, useBlockAnchorState } from "./hooks/useBlockAnchorState"; import "./Anchor.css"; export function GraphBlockAnchor({ graph, anchor, position = "fixed", children, className, }) { const anchorContainerRef = React.useRef(null); const anchorState = useBlockAnchorState(graph, anchor); useBlockAnchorPosition(anchorState, anchorContainerRef); const selected = useSignal(anchorState?.$selected); const render = typeof children === "function" ? children : () => children; const classNames = useMemo(() => { return `graph-block-anchor ${`graph-block-anchor-${anchor.type.toLocaleLowerCase()}`} ${`graph-block-position-${position}`} ${className || ""} ${selected ? "graph-block-anchor-selected" : ""}`; }, [anchor, position, className, selected]); if (!anchorState) return null; return (React.createElement("div", { ref: anchorContainerRef, className: classNames }, render(anchorState))); }