From 0093df43a9396f1e1464e6e5a970e911eb8fc964 Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 24 Mar 2022 18:53:23 +0100 Subject: [PATCH] feat(nodes, edges, store): Add updateNodeDimensions actions * Returns new changes for updating node dimensions * Add expandParent prop to nodes when parents should be expanded to fit the new child in them * --- src/components/Nodes/NodeWrapper.vue | 16 +---- src/container/VueFlow/VueFlow.vue | 2 +- src/store/actions.ts | 36 +++++++++- src/types/changes.ts | 66 +++++++++++++++++ src/types/edge.ts | 23 ++++++ src/types/flow.ts | 2 +- src/types/hooks.ts | 36 +--------- src/types/index.ts | 1 + src/types/node.ts | 46 +++++++----- src/types/store.ts | 10 ++- src/utils/changes.ts | 102 ++++++++++++++++++++------- 11 files changed, 244 insertions(+), 96 deletions(-) create mode 100644 src/types/changes.ts diff --git a/src/components/Nodes/NodeWrapper.vue b/src/components/Nodes/NodeWrapper.vue index fb016ccd..f34a9795 100644 --- a/src/components/Nodes/NodeWrapper.vue +++ b/src/components/Nodes/NodeWrapper.vue @@ -94,25 +94,15 @@ const onDragStop: DraggableEventListener = ({ event, data: { deltaX, deltaY } }) store.hooks.nodeDragStop.trigger({ event, node: node.value }) } -const updatePosition = (width: number, height: number) => { - const handleBounds = getHandleBounds(nodeElement.value, scale.value, id) - node.value.dimensions = { - width, - height, - } - node.value.handleBounds = handleBounds -} - const removeEmpty = (obj: Record) => Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null)) store.updateNodePosition({ id: node.value.id, diff: { x: 0, y: 0 } }) onMounted(() => { - const dimensions = ref(getDimensions(nodeElement.value)) - useResizeObserver(nodeElement, () => (dimensions.value = getDimensions(nodeElement.value))) + useResizeObserver(nodeElement, () => store.updateNodeDimensions([{ id: node.value.id, nodeElement: nodeElement.value, forceUpdate: true }])) watch([() => node.value.type, () => node.value.sourcePosition, () => node.value.targetPosition], () => - nextTick(() => updatePosition(dimensions.value.width, dimensions.value.height)), + nextTick(() => store.updateNodeDimensions([{ id: node.value.id, nodeElement: nodeElement.value }])), ) - watch(dimensions, ({ width: w, height: h }) => nextTick(() => w > 0 && h > 0 && updatePosition(w, h)), { immediate: true }) + store.updateNodeDimensions([{ id: node.value.id, nodeElement: nodeElement.value }]) })