refactor(types): Remove SourceTargetNode-type
Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
@@ -60,26 +60,23 @@ const handleEdgeUpdater = (event: MouseEvent, isSourceHandle: boolean) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// when connection type is loose we can define all handles as sources
|
// when connection type is loose we can define all handles as sources
|
||||||
const targetNodeHandles = controlledComputed(
|
const targetNodeHandles = computed(() =>
|
||||||
() => props.edge.sourceTargetNodes,
|
store.connectionMode === ConnectionMode.Strict
|
||||||
() =>
|
? props.edge.targetNode.__vf.handleBounds.target
|
||||||
store.connectionMode === ConnectionMode.Strict
|
: props.edge.targetNode.__vf.handleBounds.target ?? props.edge.targetNode.__vf.handleBounds.source,
|
||||||
? props.edge.sourceTargetNodes.targetNode.__vf.handleBounds.target
|
|
||||||
: props.edge.sourceTargetNodes.targetNode.__vf.handleBounds.target ??
|
|
||||||
props.edge.sourceTargetNodes.targetNode.__vf.handleBounds.source,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const sourceHandle = controlledComputed(
|
const sourceHandle = controlledComputed(
|
||||||
() => props.edge.sourceTargetNodes,
|
() => props.edge,
|
||||||
() => {
|
() => {
|
||||||
if (props.edge.sourceTargetNodes.sourceNode && props.edge.sourceTargetNodes.sourceNode.__vf.handleBounds.source)
|
if (props.edge.sourceNode && props.edge.sourceNode.__vf.handleBounds.source)
|
||||||
return getHandle(props.edge.sourceTargetNodes.sourceNode.__vf.handleBounds.source, props.edge.sourceHandle)
|
return getHandle(props.edge.sourceNode.__vf.handleBounds.source, props.edge.sourceHandle)
|
||||||
else return null
|
else return undefined
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
const targetHandle = computed(() => {
|
const targetHandle = computed(() => {
|
||||||
if (targetNodeHandles.value) return getHandle(targetNodeHandles.value, props.edge.targetHandle)
|
if (targetNodeHandles.value) return getHandle(targetNodeHandles.value, props.edge.targetHandle)
|
||||||
else return null
|
else return undefined
|
||||||
})
|
})
|
||||||
const sourcePosition = eagerComputed(() => (sourceHandle.value ? sourceHandle.value.position : Position.Bottom))
|
const sourcePosition = eagerComputed(() => (sourceHandle.value ? sourceHandle.value.position : Position.Bottom))
|
||||||
const targetPosition = eagerComputed(() => (targetHandle.value ? targetHandle.value.position : Position.Top))
|
const targetPosition = eagerComputed(() => (targetHandle.value ? targetHandle.value.position : Position.Top))
|
||||||
@@ -90,10 +87,10 @@ const isSelected = controlledComputed(
|
|||||||
)
|
)
|
||||||
const edgePos = computed(() =>
|
const edgePos = computed(() =>
|
||||||
getEdgePositions(
|
getEdgePositions(
|
||||||
props.edge.sourceTargetNodes.sourceNode,
|
props.edge.sourceNode,
|
||||||
sourceHandle.value,
|
sourceHandle.value,
|
||||||
sourcePosition.value,
|
sourcePosition.value,
|
||||||
props.edge.sourceTargetNodes.targetNode,
|
props.edge.targetNode,
|
||||||
targetHandle.value,
|
targetHandle.value,
|
||||||
targetPosition.value,
|
targetPosition.value,
|
||||||
),
|
),
|
||||||
@@ -140,7 +137,8 @@ export default {
|
|||||||
v-if="edgePos.sourceX && edgePos.sourceY && edgePos.targetX && edgePos.targetY"
|
v-if="edgePos.sourceX && edgePos.sourceY && edgePos.targetX && edgePos.targetY"
|
||||||
v-bind="{
|
v-bind="{
|
||||||
id: props.edge.id,
|
id: props.edge.id,
|
||||||
sourceTargetNodes: props.edge.sourceTargetNodes,
|
sourceNode: props.edge.sourceNode,
|
||||||
|
targetNode: props.edge.targetNode,
|
||||||
source: props.edge.source,
|
source: props.edge.source,
|
||||||
target: props.edge.target,
|
target: props.edge.target,
|
||||||
selected: isSelected,
|
selected: isSelected,
|
||||||
@@ -169,7 +167,8 @@ export default {
|
|||||||
:is="props.component ?? props.edge.type"
|
:is="props.component ?? props.edge.type"
|
||||||
v-bind="{
|
v-bind="{
|
||||||
id: props.edge.id,
|
id: props.edge.id,
|
||||||
sourceTargetNodes: props.edge.sourceTargetNodes,
|
sourceNode: props.edge.sourceNode,
|
||||||
|
targetNode: props.edge.targetNode,
|
||||||
source: props.edge.source,
|
source: props.edge.source,
|
||||||
target: props.edge.target,
|
target: props.edge.target,
|
||||||
selected: isSelected,
|
selected: isSelected,
|
||||||
|
|||||||
@@ -70,13 +70,11 @@ export default (id: string, preloadedState: FlowState) => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
...edge,
|
...edge,
|
||||||
sourceTargetNodes: {
|
sourceNode,
|
||||||
sourceNode,
|
targetNode,
|
||||||
targetNode,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.filter(({ sourceTargetNodes: { sourceNode, targetNode } }) => !!(sourceNode && targetNode)) ?? []
|
.filter(({ sourceNode, targetNode }) => !!(sourceNode && targetNode)) ?? []
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return []
|
return []
|
||||||
|
|||||||
+3
-2
@@ -1,7 +1,7 @@
|
|||||||
import { Component, CSSProperties, DefineComponent } from 'vue'
|
import { Component, CSSProperties, DefineComponent } from 'vue'
|
||||||
import { ArrowHeadType, ElementId, Position } from './flow'
|
import { ArrowHeadType, ElementId, Position } from './flow'
|
||||||
import { EdgeTextProps } from './components'
|
import { EdgeTextProps } from './components'
|
||||||
import { SourceTargetNode } from './node'
|
import { GraphNode } from './node'
|
||||||
|
|
||||||
// eslint-disable-next-line no-use-before-define
|
// eslint-disable-next-line no-use-before-define
|
||||||
export type DefaultEdgeTypes = { [key in 'default' | 'straight' | 'smoothstep' | 'step']: Component<EdgeProps> }
|
export type DefaultEdgeTypes = { [key in 'default' | 'straight' | 'smoothstep' | 'step']: Component<EdgeProps> }
|
||||||
@@ -38,7 +38,8 @@ export interface Edge<T = any> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface GraphEdge<T = any> extends Edge<T> {
|
export interface GraphEdge<T = any> extends Edge<T> {
|
||||||
sourceTargetNodes: SourceTargetNode
|
sourceNode: GraphNode
|
||||||
|
targetNode: GraphNode
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface EdgeProps<T = any> extends Edge<T> {
|
export interface EdgeProps<T = any> extends Edge<T> {
|
||||||
|
|||||||
+2
-2
@@ -1,11 +1,11 @@
|
|||||||
import { CSSProperties } from 'vue'
|
import { CSSProperties } from 'vue'
|
||||||
import { Edge, EdgeTypes } from './edge'
|
import { Edge, EdgeTypes, GraphEdge } from './edge'
|
||||||
import { NodeExtent, GraphNode, NodeTypes, TranslateExtent, Node } from './node'
|
import { NodeExtent, GraphNode, NodeTypes, TranslateExtent, Node } from './node'
|
||||||
import { ConnectionLineType, ConnectionMode } from './connection'
|
import { ConnectionLineType, ConnectionMode } from './connection'
|
||||||
import { KeyCode, PanOnScrollMode } from './zoom'
|
import { KeyCode, PanOnScrollMode } from './zoom'
|
||||||
|
|
||||||
export type ElementId = string
|
export type ElementId = string
|
||||||
export type FlowElement<T = any> = GraphNode<T> | Edge<T>
|
export type FlowElement<T = any> = GraphNode<T> | GraphEdge<T>
|
||||||
export type FlowElements<T = any> = FlowElement<T>[]
|
export type FlowElements<T = any> = FlowElement<T>[]
|
||||||
export type Elements<T = any> = (Node<T> | Edge<T>)[]
|
export type Elements<T = any> = (Node<T> | Edge<T>)[]
|
||||||
|
|
||||||
|
|||||||
+1
-6
@@ -8,7 +8,7 @@ export interface VFInternals {
|
|||||||
width: number
|
width: number
|
||||||
height: number
|
height: number
|
||||||
handleBounds: {
|
handleBounds: {
|
||||||
source?: HandleElement[]
|
source: HandleElement[]
|
||||||
target?: HandleElement[]
|
target?: HandleElement[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -52,11 +52,6 @@ export interface GraphNode<T = any> extends Node<T> {
|
|||||||
__vf: VFInternals
|
__vf: VFInternals
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SourceTargetNode = {
|
|
||||||
sourceNode: GraphNode
|
|
||||||
targetNode: GraphNode
|
|
||||||
}
|
|
||||||
|
|
||||||
export type TranslateExtent = [[number, number], [number, number]]
|
export type TranslateExtent = [[number, number], [number, number]]
|
||||||
export type NodeExtent = TranslateExtent
|
export type NodeExtent = TranslateExtent
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ import { NodeComponent, NodeExtent, GraphNode, TranslateExtent } from './node'
|
|||||||
import { D3Selection, D3Zoom, D3ZoomHandler, InitD3ZoomPayload } from './zoom'
|
import { D3Selection, D3Zoom, D3ZoomHandler, InitD3ZoomPayload } from './zoom'
|
||||||
import { FlowHooks } from './hooks'
|
import { FlowHooks } from './hooks'
|
||||||
|
|
||||||
export interface FlowState extends FlowOptions {
|
export interface FlowState extends Omit<FlowOptions, 'elements'> {
|
||||||
hooks: FlowHooks
|
hooks: FlowHooks
|
||||||
instance?: FlowInstance
|
instance?: FlowInstance
|
||||||
|
|
||||||
|
|||||||
+10
-12
@@ -1,4 +1,4 @@
|
|||||||
import { rectToBox } from './graph'
|
import { isGraphNode, rectToBox } from './graph'
|
||||||
import {
|
import {
|
||||||
Edge,
|
Edge,
|
||||||
EdgePositions,
|
EdgePositions,
|
||||||
@@ -6,11 +6,10 @@ import {
|
|||||||
GraphNode,
|
GraphNode,
|
||||||
HandleElement,
|
HandleElement,
|
||||||
Position,
|
Position,
|
||||||
SourceTargetNode,
|
|
||||||
Transform,
|
Transform,
|
||||||
XYPosition,
|
XYPosition,
|
||||||
Elements,
|
|
||||||
FlowElements,
|
FlowElements,
|
||||||
|
GraphEdge,
|
||||||
} from '~/types'
|
} from '~/types'
|
||||||
|
|
||||||
export function getHandlePosition(position: Position, node: GraphNode, handle?: HandleElement): XYPosition {
|
export function getHandlePosition(position: Position, node: GraphNode, handle?: HandleElement): XYPosition {
|
||||||
@@ -115,18 +114,17 @@ export function isEdgeVisible({ sourcePos, targetPos, width, height, transform }
|
|||||||
return overlappingArea > 0
|
return overlappingArea > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getSourceTargetNodes = (edge: Edge, elements: FlowElements | Elements): SourceTargetNode => {
|
export const getSourceTargetNodes = (edge: GraphEdge | Edge, elements: FlowElements) => {
|
||||||
let { sourceNode, targetNode }: any = {
|
const nodes: GraphNode[] = []
|
||||||
sourceNode: null,
|
|
||||||
targetNode: null,
|
|
||||||
}
|
|
||||||
for (const el of elements) {
|
for (const el of elements) {
|
||||||
if (!sourceNode || !targetNode) {
|
if (!nodes[0] || !nodes[1]) {
|
||||||
if (el.id === edge.source) sourceNode = el
|
if (isGraphNode(el)) {
|
||||||
if (el.id === edge.target) targetNode = el
|
if (el.id === edge.source) nodes[0] = el
|
||||||
|
if (el.id === edge.target) nodes[1] = el
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { sourceNode, targetNode }
|
return { sourceNode: nodes[0], targetNode: nodes[1] }
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-9
@@ -14,7 +14,6 @@ import {
|
|||||||
FlowStore,
|
FlowStore,
|
||||||
GraphNode,
|
GraphNode,
|
||||||
FlowElements,
|
FlowElements,
|
||||||
FlowElement,
|
|
||||||
GraphEdge,
|
GraphEdge,
|
||||||
} from '~/types'
|
} from '~/types'
|
||||||
import { useWindow } from '~/composables'
|
import { useWindow } from '~/composables'
|
||||||
@@ -55,10 +54,8 @@ export const isEdge = (element: Node | Edge | Connection): element is Edge =>
|
|||||||
export const isNode = (element: Node | Edge | Connection): element is Node =>
|
export const isNode = (element: Node | Edge | Connection): element is Node =>
|
||||||
'id' in element && !('source' in element) && !('target' in element)
|
'id' in element && !('source' in element) && !('target' in element)
|
||||||
|
|
||||||
export const isGraphNode = (element: Node | FlowElement | Connection): element is GraphNode =>
|
export const isGraphNode = (element: any): element is GraphNode => isNode(element) && '__vf' in element
|
||||||
isNode(element) && '__vf' in element
|
export const isGraphEdge = (element: any): element is GraphEdge => isEdge(element) && 'sourceTargetNodes' in element
|
||||||
export const isGraphEdge = (element: Edge | FlowElement | Connection): element is GraphEdge =>
|
|
||||||
isEdge(element) && 'sourceTargetNodes' in element
|
|
||||||
|
|
||||||
const getConnectedElements = (node: GraphNode, elements: Elements, dir: 'source' | 'target') => {
|
const getConnectedElements = (node: GraphNode, elements: Elements, dir: 'source' | 'target') => {
|
||||||
if (!isNode(node)) return []
|
if (!isNode(node)) return []
|
||||||
@@ -173,15 +170,15 @@ export const parseNode = (node: Node, nodeExtent: NodeExtent): GraphNode => ({
|
|||||||
width: 0,
|
width: 0,
|
||||||
height: 0,
|
height: 0,
|
||||||
handleBounds: {
|
handleBounds: {
|
||||||
source: undefined,
|
source: [],
|
||||||
target: undefined,
|
target: [],
|
||||||
},
|
},
|
||||||
isDragging: false,
|
isDragging: false,
|
||||||
},
|
},
|
||||||
position: clampPosition(node.position, nodeExtent),
|
position: clampPosition(node.position, nodeExtent),
|
||||||
})
|
})
|
||||||
|
|
||||||
export const parseEdge = (edge: Edge): Edge => ({
|
export const parseEdge = (edge: Edge): GraphEdge => ({
|
||||||
...edge,
|
...edge,
|
||||||
source: edge.source.toString(),
|
source: edge.source.toString(),
|
||||||
target: edge.target.toString(),
|
target: edge.target.toString(),
|
||||||
@@ -189,6 +186,8 @@ export const parseEdge = (edge: Edge): Edge => ({
|
|||||||
targetHandle: edge.targetHandle ? edge.targetHandle.toString() : undefined,
|
targetHandle: edge.targetHandle ? edge.targetHandle.toString() : undefined,
|
||||||
id: edge.id.toString(),
|
id: edge.id.toString(),
|
||||||
type: edge.type ?? 'default',
|
type: edge.type ?? 'default',
|
||||||
|
sourceNode: {} as any,
|
||||||
|
targetNode: {} as any,
|
||||||
})
|
})
|
||||||
|
|
||||||
const getBoundsOfBoxes = (box1: Box, box2: Box): Box => ({
|
const getBoundsOfBoxes = (box1: Box, box2: Box): Box => ({
|
||||||
@@ -270,7 +269,7 @@ export const getNodesInside = (nodes: GraphNode[], rect: Rect, [tx, ty, tScale]:
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getConnectedEdges = (nodes: GraphNode[], edges: Edge[]) => {
|
export const getConnectedEdges = (nodes: GraphNode[], edges: GraphEdge[]) => {
|
||||||
const nodeIds = nodes.map((node) => node.id)
|
const nodeIds = nodes.map((node) => node.id)
|
||||||
return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target))
|
return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target))
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -8,7 +8,7 @@ import {
|
|||||||
PanOnScrollMode,
|
PanOnScrollMode,
|
||||||
DefaultNodeTypes,
|
DefaultNodeTypes,
|
||||||
DefaultEdgeTypes,
|
DefaultEdgeTypes,
|
||||||
Edge,
|
GraphEdge,
|
||||||
} from '~/types'
|
} from '~/types'
|
||||||
import { DefaultNode, InputNode, OutputNode, BezierEdge, SmoothStepEdge, StepEdge, StraightEdge } from '~/components'
|
import { DefaultNode, InputNode, OutputNode, BezierEdge, SmoothStepEdge, StepEdge, StraightEdge } from '~/components'
|
||||||
import { createHooks } from '~/composables'
|
import { createHooks } from '~/composables'
|
||||||
@@ -96,7 +96,7 @@ export const initialState = (): FlowState => ({
|
|||||||
vueFlowVersion: typeof __VUE_FLOW_VERSION__ !== 'undefined' ? __VUE_FLOW_VERSION__ : '-',
|
vueFlowVersion: typeof __VUE_FLOW_VERSION__ !== 'undefined' ? __VUE_FLOW_VERSION__ : '-',
|
||||||
})
|
})
|
||||||
|
|
||||||
export const parseElements = (elements: Elements, nodes: GraphNode[], edges: Edge[], nodeExtent: NodeExtent) => {
|
export const parseElements = (elements: Elements, nodes: GraphNode[], edges: GraphEdge[], nodeExtent: NodeExtent) => {
|
||||||
const parsedElements = []
|
const parsedElements = []
|
||||||
for (const element of elements) {
|
for (const element of elements) {
|
||||||
if (isNode(element)) {
|
if (isNode(element)) {
|
||||||
@@ -125,7 +125,7 @@ export const parseElements = (elements: Elements, nodes: GraphNode[], edges: Edg
|
|||||||
parsedElements.push({
|
parsedElements.push({
|
||||||
...storeEdge,
|
...storeEdge,
|
||||||
...element,
|
...element,
|
||||||
})
|
} as GraphEdge)
|
||||||
} else {
|
} else {
|
||||||
parsedElements.push(parseEdge(element))
|
parsedElements.push(parseEdge(element))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user