Skip to content
This repository was archived by the owner on Apr 18, 2021. It is now read-only.

Commit 425ece9

Browse files
committed
Re-add keyboard shortcuts
Implements "Keyboard shortcuts" part of #33
1 parent 6f7b9cd commit 425ece9

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

v3/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"@types/node": "^12.0.0",
1212
"@types/react": "^16.9.0",
1313
"@types/react-dom": "^16.9.0",
14+
"hotkeys-js": "^3.8.1",
1415
"mobx": "^5.15.4",
1516
"mobx-react": "^6.2.2",
1617
"react": "^16.13.1",

v3/src/views/EditorApp.tsx

+32-9
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,44 @@
1-
import React from 'react';
1+
import React, { useEffect } from 'react';
22
import './App.css';
3-
import { DesignCanvas } from "./DesignCanvas";
4-
import { observer } from "mobx-react"
5-
import { EditorAppViewModel } from "../viewmodels/EditorAppViewModel";
6-
import { PropertiesPanel } from "./PropertiesPanel";
3+
import { DesignCanvas } from './DesignCanvas';
4+
import { observer } from 'mobx-react';
5+
import { EditorAppViewModel } from '../viewmodels/EditorAppViewModel';
6+
import { PropertiesPanel } from './PropertiesPanel';
7+
import hotkeys from 'hotkeys-js';
78

89
let editorVm = new EditorAppViewModel();
910

1011
let EditorApp = observer(function EditorApp() {
12+
useEffect(() => {
13+
const scopeName = 'app';
14+
15+
const add = function (shortcut: string, callback: () => void) {
16+
hotkeys(shortcut, scopeName, (evt) => {
17+
callback();
18+
evt.preventDefault();
19+
});
20+
};
21+
22+
add('ctrl+z', () => editorVm.undo());
23+
add('ctrl+y', () => editorVm.redo());
24+
add('delete', () => editorVm.removeSelected());
25+
add('ctrl+n', () => editorVm.clearLayout());
26+
27+
hotkeys.setScope(scopeName);
28+
29+
return () => hotkeys.deleteScope(scopeName);
30+
}, []);
31+
1132
return (
1233
<div className="design-app">
1334
<header>
1435
<h1>Web App Builder</h1>
1536
{/* Render each control as a button that inserts it */}
16-
{ editorVm.controls.descriptors.map(d =>
17-
<button key={d.id} onClick={() => editorVm.addControl(d)}>Add {d.displayName}</button>
18-
) }
37+
{editorVm.controls.descriptors.map((d) => (
38+
<button key={d.id} onClick={() => editorVm.addControl(d)}>
39+
Add {d.displayName}
40+
</button>
41+
))}
1942
<button onClick={() => editorVm.removeSelected()}>Delete</button>
2043
<button onClick={() => editorVm.undo()}>Undo</button>
2144
<button onClick={() => editorVm.redo()}>Redo</button>
@@ -33,6 +56,6 @@ let EditorApp = observer(function EditorApp() {
3356
</aside>
3457
</div>
3558
);
36-
})
59+
});
3760

3861
export default EditorApp;

0 commit comments

Comments
 (0)