From 60fcbc2d06996212e2171a7b0b58b3d0a2ee228e Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 12 Dec 2021 14:03:43 +0100 Subject: [PATCH] refactor(nodes): use watcher to calc xyzpos Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com> --- src/components/Nodes/NodeWrapper.vue | 26 +++++++++++++++----------- src/store/actions.ts | 3 --- src/types/node.ts | 4 ++-- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/components/Nodes/NodeWrapper.vue b/src/components/Nodes/NodeWrapper.vue index f1c38e5f..06f303cd 100644 --- a/src/components/Nodes/NodeWrapper.vue +++ b/src/components/Nodes/NodeWrapper.vue @@ -78,14 +78,15 @@ const onDragStop: DraggableEventListener = ({ event, data: { deltaX, deltaY } }) store.hooks.nodeDragStop.trigger({ event, node: node.value }) } -const xyzPos = computed(() => { +watch([() => node.value.position, () => node.value.parentNode?.position], () => { + const xyzPos = { + ...node.value.position, + z: node.value.computedPosition.z, + } if (node.value.parentNode) { - return (node.value.computedPosition = getXYZPos(node.value, { - ...node.value.position, - z: node.value.computedPosition.z, - })) + node.value.computedPosition = getXYZPos(node.value, xyzPos) } else { - return node.value.computedPosition + node.value.computedPosition = xyzPos } }) @@ -143,10 +144,13 @@ export default { node.class, ]" :style="{ - zIndex: node.dragging || node.selected ? 1000 : xyzPos.z, - transform: `translate(${xyzPos.x}px,${xyzPos.y}px)`, + zIndex: node.dragging || node.selected ? 1000 : node.computedPosition.z, + transform: `translate(${node.computedPosition.x}px,${node.computedPosition.y}px)`, pointerEvents: props.selectable || props.draggable ? 'all' : 'none', - opacity: node.dimensions.width !== 0 && node.dimensions.height !== 0 ? 1 : 0, + opacity: + store.dimensions.width !== 0 && + store.dimensions.height !== 0 && + (node.dimensions.width !== 0 && node.dimensions.height !== 0 ? 1 : 0), ...node.style, }" :data-id="node.id" @@ -176,7 +180,7 @@ export default { handleBounds: node.handleBounds, parentNode: node.parentNode, isParent: node.isParent, - computedPosition: xyzPos, + computedPosition: node.computedPosition, position: node.position, draggable: props.draggable, selectable: props.selectable, @@ -204,7 +208,7 @@ export default { handleBounds: node.handleBounds, parentNode: node.parentNode, isParent: node.isParent, - computedPosition: xyzPos, + computedPosition: node.computedPosition, position: node.position, draggable: props.draggable, selectable: props.selectable, diff --git a/src/store/actions.ts b/src/store/actions.ts index 3ab5eadd..8cd7186e 100644 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -31,7 +31,6 @@ const updatePosition = (node: GraphNode, { x, y }: XYPosition = { x: 0, y: 0 }, node.dragging = dragging const clamped = clampPosition(position, extent) position = { ...position, ...clamped } - node.computedPosition = position node.position = position } @@ -160,8 +159,6 @@ export default (state: FlowState, getters: FlowGetters): FlowActions => { if (typeof opts.zoomOnPinch !== 'undefined') state.zoomOnPinch = opts.zoomOnPinch if (typeof opts.defaultZoom !== 'undefined') state.defaultZoom = opts.defaultZoom if (typeof opts.defaultPosition !== 'undefined') state.defaultPosition = opts.defaultPosition - if (typeof opts.edgeTypes !== 'undefined') state.edgeTypes = opts.edgeTypes - if (typeof opts.nodeTypes !== 'undefined') state.nodeTypes = opts.nodeTypes if (typeof opts.storageKey !== 'undefined') state.storageKey = opts.storageKey if (typeof opts.edgeUpdaterRadius !== 'undefined') state.edgeUpdaterRadius = opts.edgeUpdaterRadius if (typeof opts.elementsSelectable !== 'undefined') state.elementsSelectable = opts.elementsSelectable diff --git a/src/types/node.ts b/src/types/node.ts index 16ce9c30..3c1d86a7 100644 --- a/src/types/node.ts +++ b/src/types/node.ts @@ -16,7 +16,7 @@ export interface Node extends Element { isValidTargetPos?: ValidConnectionFunc isValidSourcePos?: ValidConnectionFunc extent?: 'parent' | CoordinateExtent - children?: Node[] + children?: Node[] dimensions?: Dimensions } @@ -25,7 +25,7 @@ export interface GraphNode extends Node { source?: HandleElement[] target?: HandleElement[] } - parentNode?: GraphNode + parentNode?: GraphNode isParent?: boolean computedPosition: XYZPosition selected?: boolean