fix(node-toolbar): handle nodeOrigin
This commit is contained in:
@@ -7,6 +7,7 @@ import ReactFlow, {
|
|||||||
Edge,
|
Edge,
|
||||||
NodeTypes,
|
NodeTypes,
|
||||||
Position,
|
Position,
|
||||||
|
NodeOrigin,
|
||||||
} from 'reactflow';
|
} from 'reactflow';
|
||||||
|
|
||||||
import CustomNode from './CustomNode';
|
import CustomNode from './CustomNode';
|
||||||
@@ -53,6 +54,7 @@ const initialEdges: Edge[] = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const defaultEdgeOptions = { zIndex: 0 };
|
const defaultEdgeOptions = { zIndex: 0 };
|
||||||
|
const nodeOrigin: NodeOrigin = [0.5, 0.5];
|
||||||
|
|
||||||
export default function NodeToolbarExample() {
|
export default function NodeToolbarExample() {
|
||||||
return (
|
return (
|
||||||
@@ -65,6 +67,7 @@ export default function NodeToolbarExample() {
|
|||||||
fitView
|
fitView
|
||||||
defaultEdgeOptions={defaultEdgeOptions}
|
defaultEdgeOptions={defaultEdgeOptions}
|
||||||
nodeTypes={nodeTypes}
|
nodeTypes={nodeTypes}
|
||||||
|
nodeOrigin={nodeOrigin}
|
||||||
>
|
>
|
||||||
<Background variant={BackgroundVariant.Dots} />
|
<Background variant={BackgroundVariant.Dots} />
|
||||||
<MiniMap />
|
<MiniMap />
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const nodeEqualityFn = (a: SelectedNode, b: SelectedNode) =>
|
|||||||
a?.selected === b?.selected &&
|
a?.selected === b?.selected &&
|
||||||
a?.[internalsSymbol]?.z === b?.[internalsSymbol]?.z;
|
a?.[internalsSymbol]?.z === b?.[internalsSymbol]?.z;
|
||||||
|
|
||||||
const transformSelector = (state: ReactFlowState) => state.transform;
|
const transformSelector = (state: ReactFlowState) => ({ transform: state.transform, nodeOrigin: state.nodeOrigin });
|
||||||
|
|
||||||
function getTransform(nodeRect: Rect, transform: Transform, position: Position, offset: number): string {
|
function getTransform(nodeRect: Rect, transform: Transform, position: Position, offset: number): string {
|
||||||
// position === Position.Top
|
// position === Position.Top
|
||||||
@@ -68,13 +68,13 @@ function NodeToolbar({
|
|||||||
}: NodeToolbarProps) {
|
}: NodeToolbarProps) {
|
||||||
const nodeSelector = useCallback((state: ReactFlowState): SelectedNode => state.nodeInternals.get(nodeId), [nodeId]);
|
const nodeSelector = useCallback((state: ReactFlowState): SelectedNode => state.nodeInternals.get(nodeId), [nodeId]);
|
||||||
const node = useStore(nodeSelector, nodeEqualityFn);
|
const node = useStore(nodeSelector, nodeEqualityFn);
|
||||||
const transform = useStore(transformSelector, shallow);
|
const { transform, nodeOrigin } = useStore(transformSelector, shallow);
|
||||||
|
|
||||||
if (!isActive || !node) {
|
if (!isActive || !node) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const nodeRect: Rect = getRectOfNodes([node]);
|
const nodeRect: Rect = getRectOfNodes([node], nodeOrigin);
|
||||||
|
|
||||||
const wrapperStyle: CSSProperties = {
|
const wrapperStyle: CSSProperties = {
|
||||||
transform: getTransform(nodeRect, transform, position, offset),
|
transform: getTransform(nodeRect, transform, position, offset),
|
||||||
|
|||||||
Reference in New Issue
Block a user