refactor(keycodes): allow strings and numbers as key codes

This commit is contained in:
moklick
2020-11-10 14:27:15 +01:00
parent 965fb2a212
commit 959216f6fc
5 changed files with 35 additions and 31 deletions
+4 -4
View File
@@ -9,14 +9,14 @@ import useZoomPanHelper from '../../hooks/useZoomPanHelper';
import { ReactFlowProps } from '../ReactFlow'; import { ReactFlowProps } from '../ReactFlow';
import { NodeTypesType, EdgeTypesType, ConnectionLineType } from '../../types'; import { NodeTypesType, EdgeTypesType, ConnectionLineType, KeyCode } from '../../types';
export interface GraphViewProps extends Omit<ReactFlowProps, 'onSelectionChange' | 'elements'> { export interface GraphViewProps extends Omit<ReactFlowProps, 'onSelectionChange' | 'elements'> {
nodeTypes: NodeTypesType; nodeTypes: NodeTypesType;
edgeTypes: EdgeTypesType; edgeTypes: EdgeTypesType;
selectionKeyCode: number; selectionKeyCode: KeyCode;
deleteKeyCode: number; deleteKeyCode: KeyCode;
multiSelectionKeyCode: number; multiSelectionKeyCode: KeyCode;
connectionLineType: ConnectionLineType; connectionLineType: ConnectionLineType;
snapToGrid: boolean; snapToGrid: boolean;
snapGrid: [number, number]; snapGrid: [number, number];
+7 -6
View File
@@ -33,6 +33,7 @@ import {
OnConnectStopFunc, OnConnectStopFunc,
OnConnectEndFunc, OnConnectEndFunc,
TranslateExtent, TranslateExtent,
KeyCode,
} from '../../types'; } from '../../types';
import '../../style.css'; import '../../style.css';
@@ -81,9 +82,9 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
connectionLineType?: ConnectionLineType; connectionLineType?: ConnectionLineType;
connectionLineStyle?: CSSProperties; connectionLineStyle?: CSSProperties;
connectionLineComponent?: ConnectionLineComponent; connectionLineComponent?: ConnectionLineComponent;
deleteKeyCode?: number; deleteKeyCode?: KeyCode;
selectionKeyCode?: number; selectionKeyCode?: KeyCode;
multiSelectionKeyCode?: number; multiSelectionKeyCode?: KeyCode;
snapToGrid?: boolean; snapToGrid?: boolean;
snapGrid?: [number, number]; snapGrid?: [number, number];
onlyRenderVisibleNodes?: boolean; onlyRenderVisibleNodes?: boolean;
@@ -134,9 +135,9 @@ const ReactFlow = ({
connectionLineType = ConnectionLineType.Bezier, connectionLineType = ConnectionLineType.Bezier,
connectionLineStyle, connectionLineStyle,
connectionLineComponent, connectionLineComponent,
deleteKeyCode = 8, deleteKeyCode = 'Backspace',
selectionKeyCode = 16, selectionKeyCode = 'Shift',
multiSelectionKeyCode = 91, multiSelectionKeyCode = 'Meta',
snapToGrid = false, snapToGrid = false,
snapGrid = [15, 15], snapGrid = [15, 15],
onlyRenderVisibleNodes = true, onlyRenderVisibleNodes = true,
+3 -3
View File
@@ -3,11 +3,11 @@ import { useEffect } from 'react';
import { useStore, useStoreActions } from '../store/hooks'; import { useStore, useStoreActions } from '../store/hooks';
import useKeyPress from './useKeyPress'; import useKeyPress from './useKeyPress';
import { isNode, getConnectedEdges } from '../utils/graph'; import { isNode, getConnectedEdges } from '../utils/graph';
import { Elements } from '../types'; import { Elements, KeyCode } from '../types';
interface HookParams { interface HookParams {
deleteKeyCode: number; deleteKeyCode: KeyCode;
multiSelectionKeyCode: number; multiSelectionKeyCode: KeyCode;
onElementsRemove?: (elements: Elements) => void; onElementsRemove?: (elements: Elements) => void;
} }
+19 -18
View File
@@ -1,27 +1,28 @@
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import { isInputDOMNode } from '../utils'; import { isInputDOMNode } from '../utils';
import { KeyCode } from '../types';
export default (keyCode: number): boolean => { export default (keyCode: KeyCode): boolean => {
const [keyPressed, setKeyPressed] = useState(false); const [keyPressed, setKeyPressed] = useState(false);
function downHandler(event: KeyboardEvent) {
if (event.keyCode === keyCode && !isInputDOMNode(event)) {
setKeyPressed(true);
}
}
const upHandler = (event: KeyboardEvent) => {
if (event.keyCode === keyCode && !isInputDOMNode(event)) {
setKeyPressed(false);
}
};
const resetHandler = () => {
setKeyPressed(false);
};
useEffect(() => { useEffect(() => {
const downHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
event.preventDefault();
setKeyPressed(true);
}
};
const upHandler = (event: KeyboardEvent) => {
if (!isInputDOMNode(event) && (event.key === keyCode || event.keyCode === keyCode)) {
setKeyPressed(false);
}
};
const resetHandler = () => setKeyPressed(false);
window.addEventListener('keydown', downHandler); window.addEventListener('keydown', downHandler);
window.addEventListener('keyup', upHandler); window.addEventListener('keyup', upHandler);
window.addEventListener('blur', resetHandler); window.addEventListener('blur', resetHandler);
@@ -31,7 +32,7 @@ export default (keyCode: number): boolean => {
window.removeEventListener('keyup', upHandler); window.removeEventListener('keyup', upHandler);
window.removeEventListener('blur', resetHandler); window.removeEventListener('blur', resetHandler);
}; };
}, []); }, [keyCode, setKeyPressed]);
return keyPressed; return keyPressed;
}; };
+2
View File
@@ -329,3 +329,5 @@ export type FlowTransform = {
}; };
export type TranslateExtent = [[number, number], [number, number]]; export type TranslateExtent = [[number, number], [number, number]];
export type KeyCode = number | string;