fix(node-click): handle deleted node

This commit is contained in:
moklick
2023-08-14 16:19:43 +02:00
parent 771dcd11cf
commit 182c53113c
2 changed files with 9 additions and 1 deletions
+7 -1
View File
@@ -2,6 +2,7 @@ import type { MouseEvent, RefObject } from 'react';
import type { StoreApi } from 'zustand';
import type { Node, ReactFlowState } from '../../types';
import { errorMessages } from '@xyflow/system';
export function getMouseHandler(
id: string,
@@ -34,9 +35,14 @@ export function handleNodeClick({
unselect?: boolean;
nodeRef?: RefObject<HTMLDivElement>;
}) {
const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodes } = store.getState();
const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodes, onError } = store.getState();
const node = nodes.find((n) => n.id === id)!;
if (!node) {
onError?.('012', errorMessages['error012'](id));
return;
}
store.setState({ nodesSelectionActive: false });
if (!node.selected) {
+2
View File
@@ -21,6 +21,8 @@ export const errorMessages = {
}", edge id: ${id}.`,
error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',
error011: (edgeType: string) => `Edge type "${edgeType}" not found. Using fallback type "default".`,
error012: (id: string) =>
`Node with id "${id}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,
};
export const internalsSymbol = Symbol.for('internals');