fix: node type change not triggering recalculation of node dimensions
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { CSSProperties } from 'vue'
|
import { CSSProperties } from 'vue'
|
||||||
import Flow, { addEdge, Connection, Elements, OnLoadParams, Position, Edge, isEdge } from '~/index'
|
import Flow, { addEdge, Connection, Edge, Elements, isEdge, OnLoadParams, Position } from '~/index'
|
||||||
|
|
||||||
const onLoad = (reactFlowInstance: OnLoadParams) => reactFlowInstance.fitView()
|
|
||||||
|
|
||||||
const initialElements: Elements = [
|
const initialElements: Elements = [
|
||||||
{
|
{
|
||||||
@@ -26,7 +24,11 @@ const initialElements: Elements = [
|
|||||||
const buttonStyle: CSSProperties = { position: 'absolute', right: 10, top: 30, zIndex: 4 }
|
const buttonStyle: CSSProperties = { position: 'absolute', right: 10, top: 30, zIndex: 4 }
|
||||||
|
|
||||||
const elements = ref<Elements>(initialElements)
|
const elements = ref<Elements>(initialElements)
|
||||||
|
|
||||||
const onConnect = (params: Connection | Edge) => (elements.value = addEdge(params, elements.value))
|
const onConnect = (params: Connection | Edge) => (elements.value = addEdge(params, elements.value))
|
||||||
|
|
||||||
|
const onLoad = (reactFlowInstance: OnLoadParams) => reactFlowInstance.fitView()
|
||||||
|
|
||||||
const changeType = () => {
|
const changeType = () => {
|
||||||
elements.value = elements.value.map((el) => {
|
elements.value = elements.value.map((el) => {
|
||||||
if (isEdge(el) || el.type === 'input') return el
|
if (isEdge(el) || el.type === 'input') return el
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ const isVisible = ({ sourceX, sourceY, targetX, targetY }: ReturnType<typeof get
|
|||||||
const targetNodeHandles = computed(() =>
|
const targetNodeHandles = computed(() =>
|
||||||
store.connectionMode === ConnectionMode.Strict
|
store.connectionMode === ConnectionMode.Strict
|
||||||
? nodes.value.targetNode?.__rf.handleBounds.target
|
? nodes.value.targetNode?.__rf.handleBounds.target
|
||||||
: nodes.value.targetNode?.__rf.handleBounds.target || nodes.value.targetNode?.__rf.handleBounds.source,
|
: nodes.value.targetNode?.__rf.handleBounds.target ?? nodes.value.targetNode?.__rf.handleBounds.source,
|
||||||
)
|
)
|
||||||
|
|
||||||
const sourceHandle = computed(
|
const sourceHandle = computed(
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { DraggableEventListener } from '@braks/revue-draggable'
|
import { DraggableEventListener } from '@braks/revue-draggable'
|
||||||
|
import { watchPostEffect } from 'vue'
|
||||||
import { Node, NodeType, SnapGrid } from '~/types'
|
import { Node, NodeType, SnapGrid } from '~/types'
|
||||||
import { NodeIdContextKey } from '~/context'
|
import { NodeIdContextKey } from '~/context'
|
||||||
import { useHooks, useStore } from '~/composables'
|
import { useHooks, useStore } from '~/composables'
|
||||||
@@ -122,6 +123,17 @@ onMounted(() => {
|
|||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.node.type,
|
||||||
|
() => {
|
||||||
|
store.updateNodeDimensions({
|
||||||
|
id: props.node.id,
|
||||||
|
nodeElement: nodeElement.value,
|
||||||
|
forceUpdate: true,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ export interface FlowProps extends FlowOptions {
|
|||||||
|
|
||||||
const props = withDefaults(defineProps<FlowProps>(), {
|
const props = withDefaults(defineProps<FlowProps>(), {
|
||||||
elements: () => [],
|
elements: () => [],
|
||||||
connectionMode: ConnectionMode.Strict,
|
connectionMode: ConnectionMode.Loose,
|
||||||
connectionLineType: ConnectionLineType.Bezier,
|
connectionLineType: ConnectionLineType.Bezier,
|
||||||
selectionKeyCode: 'Shift',
|
selectionKeyCode: 'Shift',
|
||||||
multiSelectionKeyCode: 'Meta',
|
multiSelectionKeyCode: 'Meta',
|
||||||
@@ -175,6 +175,6 @@ const edgeTypes = createEdgeTypes({ ...defaultEdgeTypes, ...props.edgeTypes })
|
|||||||
</EdgeRenderer>
|
</EdgeRenderer>
|
||||||
</SelectionPane>
|
</SelectionPane>
|
||||||
</ZoomPane>
|
</ZoomPane>
|
||||||
<slot v-bind="{ flowProps: props, store, hooks }"></slot>
|
<slot v-bind="{ ...props, store, hooks }"></slot>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@ export const initialState = (): FlowState => ({
|
|||||||
height: 0,
|
height: 0,
|
||||||
},
|
},
|
||||||
transform: [0, 0, 1],
|
transform: [0, 0, 1],
|
||||||
|
elements: [],
|
||||||
nodes: [],
|
nodes: [],
|
||||||
edges: [],
|
edges: [],
|
||||||
selectedElements: undefined,
|
selectedElements: undefined,
|
||||||
@@ -42,7 +43,7 @@ export const initialState = (): FlowState => ({
|
|||||||
connectionHandleId: undefined,
|
connectionHandleId: undefined,
|
||||||
connectionHandleType: 'source',
|
connectionHandleType: 'source',
|
||||||
connectionPosition: { x: NaN, y: NaN },
|
connectionPosition: { x: NaN, y: NaN },
|
||||||
connectionMode: ConnectionMode.Strict,
|
connectionMode: ConnectionMode.Loose,
|
||||||
|
|
||||||
snapGrid: [15, 15],
|
snapGrid: [15, 15],
|
||||||
snapToGrid: false,
|
snapToGrid: false,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { D3Selection, D3Zoom, D3ZoomHandler } from '~/types/panel'
|
|||||||
export interface FlowState {
|
export interface FlowState {
|
||||||
dimensions: Dimensions
|
dimensions: Dimensions
|
||||||
transform: Transform
|
transform: Transform
|
||||||
|
elements: Elements
|
||||||
nodes: Node[]
|
nodes: Node[]
|
||||||
edges: Edge[]
|
edges: Edge[]
|
||||||
selectedElements?: Elements
|
selectedElements?: Elements
|
||||||
|
|||||||
Reference in New Issue
Block a user