From 62bfc7acc6f80b5c85346c4ff2f2417e8f6b2428 Mon Sep 17 00:00:00 2001 From: peterkogo Date: Wed, 21 Feb 2024 08:27:50 +0100 Subject: [PATCH 1/2] disableKeyboardA11y now correctly prevents escape key presses --- packages/react/src/components/EdgeWrapper/index.tsx | 3 ++- packages/react/src/components/NodeWrapper/index.tsx | 11 +++++------ packages/react/src/container/EdgeRenderer/index.tsx | 2 ++ packages/react/src/types/edges.ts | 1 + 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/react/src/components/EdgeWrapper/index.tsx b/packages/react/src/components/EdgeWrapper/index.tsx index cbe01b8c..3baea708 100644 --- a/packages/react/src/components/EdgeWrapper/index.tsx +++ b/packages/react/src/components/EdgeWrapper/index.tsx @@ -34,6 +34,7 @@ export function EdgeWrapper({ edgeTypes, noPanClassName, onError, + disableKeyboardA11y, }: EdgeWrapperProps): JSX.Element | null { let edge = useStore((s) => s.edgeLookup.get(id)!) as EdgeType; const defaultEdgeOptions = useStore((s) => s.defaultEdgeOptions); @@ -160,7 +161,7 @@ export function EdgeWrapper({ : undefined; const onKeyDown = (event: KeyboardEvent) => { - if (elementSelectionKeys.includes(event.key) && isSelectable) { + if (!disableKeyboardA11y && elementSelectionKeys.includes(event.key) && isSelectable) { const { unselectNodesAndEdges, addSelectedEdges } = store.getState(); const unselect = event.key === 'Escape'; diff --git a/packages/react/src/components/NodeWrapper/index.tsx b/packages/react/src/components/NodeWrapper/index.tsx index 4199d158..08a1f187 100644 --- a/packages/react/src/components/NodeWrapper/index.tsx +++ b/packages/react/src/components/NodeWrapper/index.tsx @@ -178,6 +178,10 @@ export function NodeWrapper({ return; } + if (disableKeyboardA11y) { + return; + } + if (elementSelectionKeys.includes(event.key) && isSelectable) { const unselect = event.key === 'Escape'; @@ -187,12 +191,7 @@ export function NodeWrapper({ unselect, nodeRef, }); - } else if ( - !disableKeyboardA11y && - isDraggable && - node.selected && - Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key) - ) { + } else if (isDraggable && node.selected && Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) { store.setState({ ariaLiveMessage: `Moved selected node ${event.key .replace('Arrow', '') diff --git a/packages/react/src/container/EdgeRenderer/index.tsx b/packages/react/src/container/EdgeRenderer/index.tsx index 3112179e..6636e833 100644 --- a/packages/react/src/container/EdgeRenderer/index.tsx +++ b/packages/react/src/container/EdgeRenderer/index.tsx @@ -56,6 +56,7 @@ function EdgeRendererComponent({ onEdgeDoubleClick, onEdgeUpdateStart, onEdgeUpdateEnd, + disableKeyboardA11y, }: EdgeRendererProps) { const { edgesFocusable, edgesUpdatable, elementsSelectable, onError } = useStore(selector, shallow); const edgeIds = useVisibleEdgeIds(onlyRenderVisibleElements); @@ -86,6 +87,7 @@ function EdgeRendererComponent({ rfId={rfId} onError={onError} edgeTypes={edgeTypes} + disableKeyboardA11y={disableKeyboardA11y} /> ); })} diff --git a/packages/react/src/types/edges.ts b/packages/react/src/types/edges.ts index dac682db..602f2c34 100644 --- a/packages/react/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -83,6 +83,7 @@ export type EdgeWrapperProps = { rfId?: string; edgeTypes?: EdgeTypes; onError?: OnError; + disableKeyboardA11y?: boolean; }; export type DefaultEdgeOptions = DefaultEdgeOptionsBase; From 0ad5f2d16a53edc07b7a34d4675562854b279789 Mon Sep 17 00:00:00 2001 From: moklick Date: Mon, 26 Feb 2024 14:22:22 +0100 Subject: [PATCH 2/2] chore(react): cleanup node wrapper --- packages/react/src/components/NodeWrapper/index.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/react/src/components/NodeWrapper/index.tsx b/packages/react/src/components/NodeWrapper/index.tsx index 08a1f187..8d2aa097 100644 --- a/packages/react/src/components/NodeWrapper/index.tsx +++ b/packages/react/src/components/NodeWrapper/index.tsx @@ -174,11 +174,7 @@ export function NodeWrapper({ }; const onKeyDown = (event: KeyboardEvent) => { - if (isInputDOMNode(event.nativeEvent)) { - return; - } - - if (disableKeyboardA11y) { + if (isInputDOMNode(event.nativeEvent) || disableKeyboardA11y) { return; }