diff --git a/.gitignore b/.gitignore index 05176d52..f171f6f9 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ build # Dependency directories node_modules/ +# lock file +yarn.lock + # Editors .vscode/ diff --git a/src/index.tsx b/src/index.tsx index af62a54f..d4c6492e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -118,6 +118,9 @@ function hitTest(element: ExcalidrawElement, x: number, y: number): boolean { const y2 = getElementAbsoluteY2(element); return x >= x1 && x <= x2 && y >= y1 && y <= y2; + } else if (element.type === "selection") { + console.warn("This should not happen, we need to investigate why it does."); + return false; } else { throw new Error("Unimplemented type " + element.type); } @@ -571,6 +574,40 @@ const KEYS = { BACKSPACE: "Backspace" }; +const SHAPES = [ + { + label: "Rectange", + value: "rectangle" + }, + { + label: "Ellipse", + value: "ellipse" + }, + { + label: "Arrow", + value: "arrow" + }, + { + label: "Text", + value: "text" + }, + { + label: "Selection", + value: "selection" + } +]; + +const shapesShortcutKeys = SHAPES.map(shape => shape.label[0].toLowerCase()); + +function findElementByKey(key: string) { + const defaultElement = "selection"; + return SHAPES.reduce((element, shape) => { + if (shape.value[0] !== key) return element; + + return shape.value; + }, defaultElement); +} + function isArrowKey(keyCode: string) { return ( keyCode === KEYS.ARROW_LEFT || @@ -643,32 +680,11 @@ class App extends React.Component<{}, AppState> { }); this.forceUpdate(); event.preventDefault(); + } else if (shapesShortcutKeys.includes(event.key.toLowerCase())) { + this.setState({ elementType: findElementByKey(event.key) }); } }; - private renderOption({ - type, - children - }: { - type: string; - children: React.ReactNode; - }) { - return ( - - ); - } - public render() { return (