fixed, parentExpand & simplified updateNodePositions
This commit is contained in:
@@ -151,19 +151,16 @@ const createRFStore = ({
|
|||||||
onNodesChange?.(changes);
|
onNodesChange?.(changes);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => {
|
updateNodePositions: (nodeDragItems, dragging = false) => {
|
||||||
const changes = nodeDragItems.map((node) => {
|
const changes = nodeDragItems.map((node) => {
|
||||||
const change: NodePositionChange = {
|
const change: NodePositionChange = {
|
||||||
id: node.id,
|
id: node.id,
|
||||||
type: 'position',
|
type: 'position',
|
||||||
|
position: node.position,
|
||||||
|
positionAbsolute: node.computed?.positionAbsolute,
|
||||||
dragging,
|
dragging,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (positionChanged) {
|
|
||||||
change.positionAbsolute = node.computed?.positionAbsolute;
|
|
||||||
change.position = node.position;
|
|
||||||
}
|
|
||||||
|
|
||||||
return change;
|
return change;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { EdgeLookup, NodeLookup } from '@xyflow/system';
|
|||||||
import type { Node, Edge, EdgeChange, NodeChange, NodeSelectionChange, EdgeSelectionChange } from '../types';
|
import type { Node, Edge, EdgeChange, NodeChange, NodeSelectionChange, EdgeSelectionChange } from '../types';
|
||||||
|
|
||||||
export function handleParentExpand(updatedElements: any[], updateItem: any) {
|
export function handleParentExpand(updatedElements: any[], updateItem: any) {
|
||||||
|
console.log(updatedElements, updateItem);
|
||||||
for (const [index, item] of updatedElements.entries()) {
|
for (const [index, item] of updatedElements.entries()) {
|
||||||
if (item.id === updateItem.parentNode) {
|
if (item.id === updateItem.parentNode) {
|
||||||
const parent = { ...item };
|
const parent = { ...item };
|
||||||
@@ -106,7 +107,7 @@ function applyChanges(changes: any[], elements: any[]): any[] {
|
|||||||
const updatedElement = { ...element };
|
const updatedElement = { ...element };
|
||||||
|
|
||||||
for (const change of changes) {
|
for (const change of changes) {
|
||||||
applyChange(change, updatedElement, elements);
|
applyChange(change, updatedElement, updatedElements);
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedElements.push(updatedElement);
|
updatedElements.push(updatedElement);
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export function createStore({
|
|||||||
store.edges.set(addEdgeUtil(edgeParams, edges));
|
store.edges.set(addEdgeUtil(edgeParams, edges));
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateNodePositions: UpdateNodePositions = (nodeDragItems, _, dragging = false) => {
|
const updateNodePositions: UpdateNodePositions = (nodeDragItems, dragging = false) => {
|
||||||
const nodeLookup = get(store.nodeLookup);
|
const nodeLookup = get(store.nodeLookup);
|
||||||
|
|
||||||
nodeDragItems.forEach((nodeDragItem) => {
|
nodeDragItems.forEach((nodeDragItem) => {
|
||||||
|
|||||||
@@ -123,11 +123,7 @@ export type SelectionRect = Rect & {
|
|||||||
|
|
||||||
export type OnError = (id: string, message: string) => void;
|
export type OnError = (id: string, message: string) => void;
|
||||||
|
|
||||||
export type UpdateNodePositions = (
|
export type UpdateNodePositions = (dragItems: NodeDragItem[] | NodeBase[], dragging?: boolean) => void;
|
||||||
dragItems: NodeDragItem[] | NodeBase[],
|
|
||||||
positionChanged?: boolean,
|
|
||||||
dragging?: boolean
|
|
||||||
) => void;
|
|
||||||
export type PanBy = (delta: XYPosition) => boolean;
|
export type PanBy = (delta: XYPosition) => boolean;
|
||||||
|
|
||||||
export type UpdateConnection = (params: {
|
export type UpdateConnection = (params: {
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ export function XYDrag<OnNodeDrag extends (e: any, nodes: any, node: any) => voi
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateNodePositions(dragItems, true, true);
|
updateNodePositions(dragItems, true);
|
||||||
const onNodeOrSelectionDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);
|
const onNodeOrSelectionDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);
|
||||||
|
|
||||||
if (dragEvent && (onDrag || onNodeOrSelectionDrag)) {
|
if (dragEvent && (onDrag || onNodeOrSelectionDrag)) {
|
||||||
@@ -296,7 +296,7 @@ export function XYDrag<OnNodeDrag extends (e: any, nodes: any, node: any) => voi
|
|||||||
const { nodeLookup, updateNodePositions, onNodeDragStop, onSelectionDragStop } = getStoreItems();
|
const { nodeLookup, updateNodePositions, onNodeDragStop, onSelectionDragStop } = getStoreItems();
|
||||||
const onNodeOrSelectionDragStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);
|
const onNodeOrSelectionDragStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);
|
||||||
|
|
||||||
updateNodePositions(dragItems, false, false);
|
updateNodePositions(dragItems, false);
|
||||||
|
|
||||||
if (onDragStop || onNodeOrSelectionDragStop) {
|
if (onDragStop || onNodeOrSelectionDragStop) {
|
||||||
const [currentNode, currentNodes] = getEventHandlerParams({
|
const [currentNode, currentNodes] = getEventHandlerParams({
|
||||||
|
|||||||
Reference in New Issue
Block a user