feat(utils): make addEdge and removeElement mutate the array passed in

Signed-off-by: Braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
Braks
2021-11-25 15:21:36 +01:00
parent 1ce41ccd40
commit 74cc61ad8d
3 changed files with 10 additions and 11 deletions
+2 -5
View File
@@ -7,13 +7,10 @@ import {
Connection, Connection,
Edge, Edge,
Elements, Elements,
FlowElement,
FlowInstance, FlowInstance,
addEdge, addEdge,
isNode, isNode,
removeElements, removeElements,
Node,
useVueFlow,
} from '~/index' } from '~/index'
const onNodeDragStop = (e) => console.log('drag stop', e) const onNodeDragStop = (e) => console.log('drag stop', e)
@@ -27,8 +24,8 @@ const elements = ref<Elements>([
{ id: 'e1-3', source: '1', target: '3' }, { id: 'e1-3', source: '1', target: '3' },
]) ])
const vfInstance = ref<FlowInstance>() const vfInstance = ref<FlowInstance>()
const onElementsRemove = (elementsToRemove: Elements) => (elements.value = removeElements(elementsToRemove, elements.value)) const onElementsRemove = (elementsToRemove: Elements) => removeElements(elementsToRemove, elements.value)
const onConnect = (params: Edge | Connection) => (elements.value = addEdge(params, elements.value)) const onConnect = (params: Edge | Connection) => addEdge(params, elements.value)
const onLoad = (flowInstance: FlowInstance) => { const onLoad = (flowInstance: FlowInstance) => {
flowInstance.fitView({ padding: 0.1 }) flowInstance.fitView({ padding: 0.1 })
vfInstance.value = flowInstance vfInstance.value = flowInstance
-1
View File
@@ -15,7 +15,6 @@ export {
updateEdge, updateEdge,
getTransformForBounds, getTransformForBounds,
getRectOfNodes, getRectOfNodes,
isInputDOMNode,
graphPosToZoomedPos, graphPosToZoomedPos,
} from './utils/graph' } from './utils/graph'
export { defaultEdgeTypes, defaultNodeTypes } from './utils/store' export { defaultEdgeTypes, defaultNodeTypes } from './utils/store'
+8 -5
View File
@@ -69,11 +69,14 @@ export const getIncomers = (node: GraphNode, elements: Elements) => getConnected
export const removeElements = (elementsToRemove: Elements, elements: Elements) => { export const removeElements = (elementsToRemove: Elements, elements: Elements) => {
const nodeIdsToRemove = elementsToRemove.map((n) => n.id) const nodeIdsToRemove = elementsToRemove.map((n) => n.id)
const shouldRemove = (element: Node | Edge) => {
return elements.filter((element) => {
const { target, source } = isEdge(element) ? element : { target: '', source: '' } const { target, source } = isEdge(element) ? element : { target: '', source: '' }
return !(nodeIdsToRemove.includes(element.id) || nodeIdsToRemove.includes(target) || nodeIdsToRemove.includes(source)) return nodeIdsToRemove.includes(element.id) || nodeIdsToRemove.includes(target) || nodeIdsToRemove.includes(source)
}
elements.forEach((element, i) => {
if (shouldRemove(element)) elements.splice(i, 1)
}) })
return elements.filter((element) => !shouldRemove(element))
} }
const getEdgeId = ({ source, sourceHandle, target, targetHandle }: Connection): ElementId => const getEdgeId = ({ source, sourceHandle, target, targetHandle }: Connection): ElementId =>
@@ -106,8 +109,8 @@ export const addEdge = (edgeParams: Edge | Connection, elements: Elements) => {
} as Edge } as Edge
} }
if (connectionExists(edge, elements)) return elements if (connectionExists(edge, elements)) return elements
elements.push(edge)
return elements.push(edge) return [...elements, edge]
} }
export const updateEdge = (oldEdge: Edge, newConnection: Connection, elements: Elements) => { export const updateEdge = (oldEdge: Edge, newConnection: Connection, elements: Elements) => {