feat(core): add onError hook

Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
braks
2023-03-23 15:58:30 +01:00
committed by Braks
parent 87249e5dde
commit 8c3f54ec28
22 changed files with 250 additions and 180 deletions
+2
View File
@@ -40,6 +40,7 @@ function useDrag(params: UseDragParams) {
removeSelectedElements,
addSelectedNodes,
updateNodePositions,
emits,
} = $(useVueFlow())
const { onStart, onDrag, onStop, el, disabled, id, selectable } = $(params)
@@ -83,6 +84,7 @@ function useDrag(params: UseDragParams) {
const { computedPosition } = calcNextPosition(
n,
nextPosition,
emits.error,
nodeExtent,
n.parentNode ? findNode(n.parentNode) : undefined,
)
+3 -2
View File
@@ -1,4 +1,5 @@
import type { CustomEvent, ElementData } from '~/types'
import { VueFlowError } from '~/utils/errors'
/**
* Access an edge
@@ -11,12 +12,12 @@ export default function useEdge<Data = ElementData, CustomEvents extends Record<
const edgeId = id ?? inject(EdgeId, '')
const edgeEl = inject(EdgeRef, null)
const { findEdge } = useVueFlow()
const { findEdge, emits } = useVueFlow()
const edge = findEdge<Data, CustomEvents>(edgeId)
if (!edge) {
throw new VueFlowError(`Edge with id ${edgeId} not found!`, 'useEdge')
emits.error(new VueFlowError(ErrorCode.EDGE_NOT_FOUND, edgeId))
}
return {
@@ -1,15 +1,15 @@
import type { EdgeEventsEmit, EdgeEventsOn, GraphEdge, VueFlowStore } from '~/types'
const createEdgeHooks = () => ({
doubleClick: createEventHook(),
click: createEventHook(),
mouseEnter: createEventHook(),
mouseMove: createEventHook(),
mouseLeave: createEventHook(),
contextMenu: createEventHook(),
updateStart: createEventHook(),
update: createEventHook(),
updateEnd: createEventHook(),
doubleClick: createExtendedEventHook(),
click: createExtendedEventHook(),
mouseEnter: createExtendedEventHook(),
mouseMove: createExtendedEventHook(),
mouseLeave: createExtendedEventHook(),
contextMenu: createExtendedEventHook(),
updateStart: createExtendedEventHook(),
update: createExtendedEventHook(),
updateEnd: createExtendedEventHook(),
})
export default function useEdgeHooks(edge: GraphEdge, emits: VueFlowStore['emits']): { emit: EdgeEventsEmit; on: EdgeEventsOn } {
+4 -4
View File
@@ -11,19 +11,19 @@ export default function useNode<Data = ElementData, CustomEvents extends Record<
const nodeId = id ?? inject(NodeId, '')
const nodeEl = inject(NodeRef, null)
const { findNode, getEdges } = useVueFlow()
const { findNode, getEdges, emits } = useVueFlow()
const node = findNode<Data, CustomEvents>(nodeId)
if (!node) {
throw new VueFlowError(`Node with id ${nodeId} not found!`, 'useNode')
emits.error(new VueFlowError(ErrorCode.NODE_NOT_FOUND, nodeId))
}
return {
id: nodeId,
nodeEl,
node,
parentNode: computed(() => (node.parentNode ? findNode(node.parentNode) : undefined)),
connectedEdges: computed(() => getConnectedEdges([node], getEdges.value)),
parentNode: computed(() => (node!.parentNode ? findNode(node!.parentNode) : undefined)),
connectedEdges: computed(() => getConnectedEdges([node!], getEdges.value)),
}
}
@@ -1,15 +1,15 @@
import type { GraphNode, NodeEventsEmit, NodeEventsOn, VueFlowStore } from '~/types'
const createNodeHooks = () => ({
doubleClick: createEventHook(),
click: createEventHook(),
mouseEnter: createEventHook(),
mouseMove: createEventHook(),
mouseLeave: createEventHook(),
contextMenu: createEventHook(),
dragStart: createEventHook(),
drag: createEventHook(),
dragStop: createEventHook(),
doubleClick: createExtendedEventHook(),
click: createExtendedEventHook(),
mouseEnter: createExtendedEventHook(),
mouseMove: createExtendedEventHook(),
mouseLeave: createExtendedEventHook(),
contextMenu: createExtendedEventHook(),
dragStart: createExtendedEventHook(),
drag: createExtendedEventHook(),
dragStop: createExtendedEventHook(),
})
export default function useNodeHooks(node: GraphNode, emits: VueFlowStore['emits']): { emit: NodeEventsEmit; on: NodeEventsOn } {
@@ -1,7 +1,8 @@
import type { NodeDragItem, XYPosition } from '~/types'
function useUpdateNodePositions() {
const { getSelectedNodes, nodeExtent, updateNodePositions, findNode, snapGrid, snapToGrid, nodesDraggable } = useVueFlow()
const { getSelectedNodes, nodeExtent, updateNodePositions, findNode, snapGrid, snapToGrid, nodesDraggable, emits } =
useVueFlow()
return (positionDiff: XYPosition, isShiftPressed = false) => {
// by default a node moves 5px on each key press, or 20px if shift is pressed
@@ -21,6 +22,7 @@ function useUpdateNodePositions() {
const { computedPosition } = calcNextPosition(
n,
nextPosition,
emits.error,
nodeExtent.value,
n.parentNode ? findNode(n.parentNode) : undefined,
)
@@ -123,11 +123,6 @@ export default (options?: FlowProps): VueFlowStore => {
if (options) vueFlow.setState(options)
}
/**
* Vue flow wasn't able to find any store instance - we can't proceed
*/
if (!vueFlow) throw new VueFlowError('Store instance not found.', 'useVueFlow')
// always provide a fresh instance into context on call
if (scope) {
provide(VueFlow, vueFlow)