From 8a84b8e64d6f15fa58bc1b37c88edf1956452a10 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 13 Jul 2017 22:32:06 -0700 Subject: [PATCH] Fixes #136 - Keyboard shortcuts should work when editor is not focused --- frontend/components/Editor/Editor.js | 42 ++++++++++++---------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/frontend/components/Editor/Editor.js b/frontend/components/Editor/Editor.js index ad73209e..51051ce2 100644 --- a/frontend/components/Editor/Editor.js +++ b/frontend/components/Editor/Editor.js @@ -3,6 +3,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import { Editor, Plain } from 'slate'; +import keydown from 'react-keydown'; import classnames from 'classnames/bind'; import type { Document, State, Editor as EditorType } from './types'; import Flex from 'components/Flex'; @@ -30,11 +31,6 @@ type Props = { heading?: ?React.Element<*>, }; -type KeyData = { - isMeta: boolean, - key: string, -}; - @observer class MarkdownEditor extends Component { props: Props; editor: EditorType; @@ -82,25 +78,24 @@ type KeyData = { this.props.onChange(Markdown.serialize(state)); }; - onKeyDown = (ev: SyntheticKeyboardEvent, data: KeyData, state: State) => { - if (!data.isMeta) return; + @keydown('meta+s') + onSaveAndContinue(ev: SyntheticKeyboardEvent) { + ev.preventDefault(); + ev.stopPropagation(); + this.props.onSave(); + } - switch (data.key) { - case 's': - ev.preventDefault(); - ev.stopPropagation(); - this.props.onSave(); - return state; - case 'enter': - ev.preventDefault(); - ev.stopPropagation(); - this.props.onSave({ redirect: false }); - return state; - case 'escape': - return this.props.onCancel(); - default: - } - }; + @keydown('meta+enter') + onSave(ev: SyntheticKeyboardEvent) { + ev.preventDefault(); + ev.stopPropagation(); + this.props.onSave({ redirect: false }); + } + + @keydown('esc') + onCancel() { + this.props.onCancel(); + } focusAtStart = () => { const state = this.editor.getState(); @@ -138,7 +133,6 @@ type KeyData = { state={this.state.state} onChange={this.onChange} onDocumentChange={this.onDocumentChange} - onKeyDown={this.onKeyDown} onSave={this.props.onSave} readOnly={this.props.readOnly} />