Files
rio/frontend/code/components/graphEditor/draggingNodesStrategy.ts
Jakob Pinterits c3e7739205 node editor fixes
2024-11-16 22:26:53 +01:00

46 lines
1.5 KiB
TypeScript

import { GraphEditorComponent } from "./graphEditor";
import { pixelsPerRem } from "../../app";
import { updateConnectionFromObject } from "./utils";
import { AugmentedNodeState } from "./graphStore";
/// The user is moving around all selected nodes
export class DraggingNodesStrategy {
nodesToMove: AugmentedNodeState[] = [];
constructor(nodesToMove: AugmentedNodeState[]) {
this.nodesToMove = nodesToMove;
}
onDragMove(ge: GraphEditorComponent, event: PointerEvent): void {
// Move all selected nodes
let moveX = event.movementX / pixelsPerRem;
let moveY = event.movementY / pixelsPerRem;
for (let nodeState of this.nodesToMove) {
// Update the stored position
nodeState.left += moveX;
nodeState.top += moveY;
// Move the HTML element
nodeState.element.style.left = `${nodeState.left}rem`;
nodeState.element.style.top = `${nodeState.top}rem`;
}
// Update any connections
for (let nodeState of this.nodesToMove) {
for (let connection of ge.graphStore.getConnectionsForNode(
nodeState.id
)) {
updateConnectionFromObject(ge, connection);
}
}
}
onDragEnd(ge: GraphEditorComponent, event: PointerEvent): void {
// The nodes no longer needs to be on top
for (let nodeState of ge.getSelectedNodes()) {
nodeState.element.style.removeProperty("z-index");
}
}
}