refactor(keycodes): allow strings and numbers as key codes
This commit is contained in:
@@ -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];
|
||||||
|
|||||||
@@ -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,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
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user