refactor(vue-flow,nodes,edges)!: add remove selected elements actions
# What's changed? * Rename `resetSelectedElements` to `removeSelectedElements` and allow to specify which elements to remove * Add `removeSelectedNodes` and `removeSelectedEdges` actions
This commit is contained in:
@@ -31,7 +31,7 @@ const {
|
|||||||
getNode,
|
getNode,
|
||||||
addSelectedNodes,
|
addSelectedNodes,
|
||||||
multiSelectionActive,
|
multiSelectionActive,
|
||||||
resetSelectedElements,
|
removeSelectedElements,
|
||||||
getSelectedNodes,
|
getSelectedNodes,
|
||||||
} = $(useVueFlow())
|
} = $(useVueFlow())
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ useDrag({
|
|||||||
if (multiSelectionActive) {
|
if (multiSelectionActive) {
|
||||||
addSelectedNodes([node])
|
addSelectedNodes([node])
|
||||||
} else {
|
} else {
|
||||||
resetSelectedElements()
|
removeSelectedElements()
|
||||||
setState({
|
setState({
|
||||||
nodesSelectionActive: false,
|
nodesSelectionActive: false,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const {
|
|||||||
nodesSelectionActive,
|
nodesSelectionActive,
|
||||||
userSelectionActive,
|
userSelectionActive,
|
||||||
elementsSelectable,
|
elementsSelectable,
|
||||||
resetSelectedElements,
|
removeSelectedElements,
|
||||||
setState,
|
setState,
|
||||||
getSelectedEdges,
|
getSelectedEdges,
|
||||||
getSelectedNodes,
|
getSelectedNodes,
|
||||||
@@ -25,7 +25,7 @@ const onClick = (event: MouseEvent) => {
|
|||||||
setState({
|
setState({
|
||||||
nodesSelectionActive: false,
|
nodesSelectionActive: false,
|
||||||
})
|
})
|
||||||
resetSelectedElements()
|
removeSelectedElements()
|
||||||
}
|
}
|
||||||
|
|
||||||
const onContextMenu = (event: MouseEvent) => emits.paneContextMenu(event)
|
const onContextMenu = (event: MouseEvent) => emits.paneContextMenu(event)
|
||||||
@@ -51,7 +51,7 @@ useKeyPress($$(deleteKeyCode), (keyPressed) => {
|
|||||||
nodesSelectionActive: false,
|
nodesSelectionActive: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
resetSelectedElements()
|
removeSelectedElements()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ export default (state: State, getters: ComputedGetters): Actions => {
|
|||||||
const selectedEdgesIds = edges.map((e) => e.id)
|
const selectedEdgesIds = edges.map((e) => e.id)
|
||||||
|
|
||||||
let changedEdges: EdgeChange[]
|
let changedEdges: EdgeChange[]
|
||||||
if (state.multiSelectionActive) changedEdges = selectedEdgesIds.map((nodeId) => createSelectionChange(nodeId, true))
|
if (state.multiSelectionActive) changedEdges = selectedEdgesIds.map((edgeId) => createSelectionChange(edgeId, true))
|
||||||
else changedEdges = getSelectionChanges(state.edges, selectedEdgesIds, getters.getNode.value)
|
else changedEdges = getSelectionChanges(state.edges, selectedEdgesIds, getters.getNode.value)
|
||||||
|
|
||||||
if (changedEdges.length) state.hooks.edgesChange.trigger(changedEdges)
|
if (changedEdges.length) state.hooks.edgesChange.trigger(changedEdges)
|
||||||
@@ -198,6 +198,36 @@ export default (state: State, getters: ComputedGetters): Actions => {
|
|||||||
addSelectedEdges(elements.filter(isGraphEdge))
|
addSelectedEdges(elements.filter(isGraphEdge))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const removeSelectedNodes: Actions['removeSelectedNodes'] = (nodes) => {
|
||||||
|
const unselectedNodesIds = nodes.map((n) => n.id)
|
||||||
|
|
||||||
|
let changedNodes: NodeChange[]
|
||||||
|
if (state.multiSelectionActive) changedNodes = unselectedNodesIds.map((nodeId) => createSelectionChange(nodeId, false))
|
||||||
|
else changedNodes = getSelectionChanges(state.nodes, unselectedNodesIds, getters.getNode.value)
|
||||||
|
|
||||||
|
if (changedNodes.length) state.hooks.nodesChange.trigger(changedNodes)
|
||||||
|
}
|
||||||
|
|
||||||
|
const removeSelectedEdges: Actions['removeSelectedEdges'] = (edges) => {
|
||||||
|
const unselectedEdgesIds = edges.map((e) => e.id)
|
||||||
|
|
||||||
|
let changedEdges: EdgeChange[]
|
||||||
|
if (state.multiSelectionActive) changedEdges = unselectedEdgesIds.map((edgeId) => createSelectionChange(edgeId, false))
|
||||||
|
else changedEdges = getSelectionChanges(state.edges, unselectedEdgesIds, getters.getNode.value)
|
||||||
|
|
||||||
|
if (changedEdges.length) state.hooks.edgesChange.trigger(changedEdges)
|
||||||
|
}
|
||||||
|
|
||||||
|
const removeSelectedElements: Actions['removeSelectedElements'] = (elements) => {
|
||||||
|
if (!elements) {
|
||||||
|
addSelectedNodes([])
|
||||||
|
addSelectedEdges([])
|
||||||
|
} else {
|
||||||
|
if (elements.nodes) removeSelectedNodes(elements.nodes.filter(isGraphNode))
|
||||||
|
if (elements.edges) removeSelectedEdges(elements.edges.filter(isGraphEdge))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const setMinZoom: Actions['setMinZoom'] = (minZoom: any) => {
|
const setMinZoom: Actions['setMinZoom'] = (minZoom: any) => {
|
||||||
state.d3Zoom?.scaleExtent([minZoom, state.maxZoom])
|
state.d3Zoom?.scaleExtent([minZoom, state.maxZoom])
|
||||||
state.minZoom = minZoom
|
state.minZoom = minZoom
|
||||||
@@ -213,11 +243,6 @@ export default (state: State, getters: ComputedGetters): Actions => {
|
|||||||
state.translateExtent = translateExtent
|
state.translateExtent = translateExtent
|
||||||
}
|
}
|
||||||
|
|
||||||
const resetSelectedElements: Actions['resetSelectedElements'] = () => {
|
|
||||||
addSelectedNodes([])
|
|
||||||
addSelectedEdges([])
|
|
||||||
}
|
|
||||||
|
|
||||||
const setInteractive: Actions['setInteractive'] = (isInteractive) => {
|
const setInteractive: Actions['setInteractive'] = (isInteractive) => {
|
||||||
state.nodesDraggable = isInteractive
|
state.nodesDraggable = isInteractive
|
||||||
state.nodesConnectable = isInteractive
|
state.nodesConnectable = isInteractive
|
||||||
@@ -355,7 +380,9 @@ export default (state: State, getters: ComputedGetters): Actions => {
|
|||||||
setMinZoom,
|
setMinZoom,
|
||||||
setMaxZoom,
|
setMaxZoom,
|
||||||
setTranslateExtent,
|
setTranslateExtent,
|
||||||
resetSelectedElements,
|
removeSelectedElements,
|
||||||
|
removeSelectedNodes,
|
||||||
|
removeSelectedEdges,
|
||||||
setInteractive,
|
setInteractive,
|
||||||
setState,
|
setState,
|
||||||
$reset: () => {
|
$reset: () => {
|
||||||
|
|||||||
@@ -144,8 +144,12 @@ export interface Actions {
|
|||||||
addSelectedEdges: (edges: GraphEdge[]) => void
|
addSelectedEdges: (edges: GraphEdge[]) => void
|
||||||
/** manually select nodes and add to state */
|
/** manually select nodes and add to state */
|
||||||
addSelectedNodes: (nodes: GraphNode[]) => void
|
addSelectedNodes: (nodes: GraphNode[]) => void
|
||||||
/** unselect all selected elements */
|
/** manually unselect edges and remove from state */
|
||||||
resetSelectedElements: () => void
|
removeSelectedEdges: (edges: GraphEdge[]) => void
|
||||||
|
/** manually unselect nodes and remove from state */
|
||||||
|
removeSelectedNodes: (nodes: GraphNode[]) => void
|
||||||
|
/** unselect selected elements (if none are passed, all elements are unselected) */
|
||||||
|
removeSelectedElements: (elements?: { nodes?: GraphNode[]; edges?: GraphEdge[] }) => void
|
||||||
/** apply min zoom value to d3 */
|
/** apply min zoom value to d3 */
|
||||||
setMinZoom: (zoom: number) => void
|
setMinZoom: (zoom: number) => void
|
||||||
/** apply max zoom value to d3 */
|
/** apply max zoom value to d3 */
|
||||||
|
|||||||
Reference in New Issue
Block a user