refactor(react): use array for nodeInternals, rename to nodes
This commit is contained in:
@@ -4,8 +4,8 @@ import { useStore, getStraightPath, EdgeProps } from '@xyflow/react';
|
||||
import { getEdgeParams } from './utils.js';
|
||||
|
||||
function FloatingEdge({ id, source, target, markerEnd, style }: EdgeProps) {
|
||||
const sourceNode = useStore(useCallback((store) => store.nodeInternals.get(source), [source]));
|
||||
const targetNode = useStore(useCallback((store) => store.nodeInternals.get(target), [target]));
|
||||
const sourceNode = useStore(useCallback((store) => store.nodes.find((n) => n.id === source), [source]));
|
||||
const targetNode = useStore(useCallback((store) => store.nodes.find((n) => n.id === target), [target]));
|
||||
|
||||
if (!sourceNode || !targetNode) {
|
||||
return null;
|
||||
|
||||
@@ -14,7 +14,7 @@ const CustomEdge: FC<EdgeProps> = ({
|
||||
data,
|
||||
}) => {
|
||||
const isConnectedNodeDragging = useStore((s) =>
|
||||
s.getNodes().find((n) => n.dragging && (target === n.id || source === n.id))
|
||||
s.nodes.find((n) => n.dragging && (target === n.id || source === n.id))
|
||||
);
|
||||
|
||||
const [edgePath, labelX, labelY] = getBezierPath({
|
||||
|
||||
@@ -14,7 +14,7 @@ const CustomEdge: FC<EdgeProps> = ({
|
||||
data,
|
||||
}) => {
|
||||
const isConnectedNodeDragging = useStore((s) =>
|
||||
s.getNodes().find((n) => n.dragging && (target === n.id || source === n.id))
|
||||
s.nodes.find((n) => n.dragging && (target === n.id || source === n.id))
|
||||
);
|
||||
|
||||
const [edgePath, labelX, labelY] = getBezierPath({
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { FC, useMemo, CSSProperties } from 'react';
|
||||
import { EdgeProps, useStore, getBezierPath, ReactFlowState } from '@xyflow/react';
|
||||
import { FC, CSSProperties } from 'react';
|
||||
import { EdgeProps, useStore, getBezierPath } from '@xyflow/react';
|
||||
|
||||
import { getEdgeParams } from './utils';
|
||||
|
||||
const nodeSelector = (s: ReactFlowState) => s.nodeInternals;
|
||||
|
||||
const FloatingEdge: FC<EdgeProps> = ({ id, source, target, style }) => {
|
||||
const nodeInternals = useStore(nodeSelector);
|
||||
const { sourceNode, targetNode } = useStore((s) => {
|
||||
const sourceNode = s.nodes.find((n) => n.id === source);
|
||||
const targetNode = s.nodes.find((n) => n.id === target);
|
||||
|
||||
const sourceNode = useMemo(() => nodeInternals.get(source), [source, nodeInternals]);
|
||||
const targetNode = useMemo(() => nodeInternals.get(target), [target, nodeInternals]);
|
||||
return { sourceNode, targetNode };
|
||||
});
|
||||
|
||||
if (!sourceNode || !targetNode) {
|
||||
return null;
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import { NodeToolbar, ReactFlowState, useStore } from '@xyflow/react';
|
||||
|
||||
const selectedNodesSelector = (state: ReactFlowState) =>
|
||||
state
|
||||
.getNodes()
|
||||
.filter((node) => node.selected)
|
||||
.map((node) => node.id);
|
||||
state.nodes.filter((node) => node.selected).map((node) => node.id);
|
||||
|
||||
export default function SelectedNodesToolbar() {
|
||||
const selectedNodeIds = useStore(selectedNodesSelector);
|
||||
|
||||
@@ -5,7 +5,7 @@ import styles from './provider.module.css';
|
||||
const Sidebar = () => {
|
||||
const { setNodes } = useReactFlow();
|
||||
const nodeInfos = useStore((store) =>
|
||||
store.getNodes().map((n) => `Node ${n.id} - x: ${n.position.x.toFixed(2)}, y: ${n.position.y.toFixed(2)}`)
|
||||
store.nodes.map((n) => `Node ${n.id} - x: ${n.position.x.toFixed(2)}, y: ${n.position.y.toFixed(2)}`)
|
||||
);
|
||||
const transform = useStore((store) => store.transform);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user