Merge pull request #3934 from xyflow/escape-fix

disableKeyboardA11y now correctly prevents escape key presses
This commit is contained in:
Moritz Klack
2024-02-26 14:22:44 +01:00
committed by GitHub
4 changed files with 7 additions and 8 deletions
@@ -34,6 +34,7 @@ export function EdgeWrapper<EdgeType extends Edge = Edge>({
edgeTypes, edgeTypes,
noPanClassName, noPanClassName,
onError, onError,
disableKeyboardA11y,
}: EdgeWrapperProps<EdgeType>): JSX.Element | null { }: EdgeWrapperProps<EdgeType>): JSX.Element | null {
let edge = useStore((s) => s.edgeLookup.get(id)!) as EdgeType; let edge = useStore((s) => s.edgeLookup.get(id)!) as EdgeType;
const defaultEdgeOptions = useStore((s) => s.defaultEdgeOptions); const defaultEdgeOptions = useStore((s) => s.defaultEdgeOptions);
@@ -160,7 +161,7 @@ export function EdgeWrapper<EdgeType extends Edge = Edge>({
: undefined; : undefined;
const onKeyDown = (event: KeyboardEvent) => { const onKeyDown = (event: KeyboardEvent) => {
if (elementSelectionKeys.includes(event.key) && isSelectable) { if (!disableKeyboardA11y && elementSelectionKeys.includes(event.key) && isSelectable) {
const { unselectNodesAndEdges, addSelectedEdges } = store.getState(); const { unselectNodesAndEdges, addSelectedEdges } = store.getState();
const unselect = event.key === 'Escape'; const unselect = event.key === 'Escape';
@@ -174,7 +174,7 @@ export function NodeWrapper<NodeType extends Node>({
}; };
const onKeyDown = (event: KeyboardEvent) => { const onKeyDown = (event: KeyboardEvent) => {
if (isInputDOMNode(event.nativeEvent)) { if (isInputDOMNode(event.nativeEvent) || disableKeyboardA11y) {
return; return;
} }
@@ -187,12 +187,7 @@ export function NodeWrapper<NodeType extends Node>({
unselect, unselect,
nodeRef, nodeRef,
}); });
} else if ( } else if (isDraggable && node.selected && Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {
!disableKeyboardA11y &&
isDraggable &&
node.selected &&
Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)
) {
store.setState({ store.setState({
ariaLiveMessage: `Moved selected node ${event.key ariaLiveMessage: `Moved selected node ${event.key
.replace('Arrow', '') .replace('Arrow', '')
@@ -56,6 +56,7 @@ function EdgeRendererComponent<EdgeType extends Edge = Edge>({
onEdgeDoubleClick, onEdgeDoubleClick,
onEdgeUpdateStart, onEdgeUpdateStart,
onEdgeUpdateEnd, onEdgeUpdateEnd,
disableKeyboardA11y,
}: EdgeRendererProps<EdgeType>) { }: EdgeRendererProps<EdgeType>) {
const { edgesFocusable, edgesUpdatable, elementsSelectable, onError } = useStore(selector, shallow); const { edgesFocusable, edgesUpdatable, elementsSelectable, onError } = useStore(selector, shallow);
const edgeIds = useVisibleEdgeIds(onlyRenderVisibleElements); const edgeIds = useVisibleEdgeIds(onlyRenderVisibleElements);
@@ -86,6 +87,7 @@ function EdgeRendererComponent<EdgeType extends Edge = Edge>({
rfId={rfId} rfId={rfId}
onError={onError} onError={onError}
edgeTypes={edgeTypes} edgeTypes={edgeTypes}
disableKeyboardA11y={disableKeyboardA11y}
/> />
); );
})} })}
+1
View File
@@ -83,6 +83,7 @@ export type EdgeWrapperProps<EdgeType extends Edge = Edge> = {
rfId?: string; rfId?: string;
edgeTypes?: EdgeTypes; edgeTypes?: EdgeTypes;
onError?: OnError; onError?: OnError;
disableKeyboardA11y?: boolean;
}; };
export type DefaultEdgeOptions = DefaultEdgeOptionsBase<Edge>; export type DefaultEdgeOptions = DefaultEdgeOptionsBase<Edge>;