From faf8a7c9fbf9e07176518af63a19c25fe9f5533e Mon Sep 17 00:00:00 2001 From: Ricky Chandra Date: Sat, 17 Nov 2018 21:04:42 +0700 Subject: [PATCH 1/2] Add keyboard shortcut to focus on response viewer --- packages/insomnia-app/app/common/hotkeys.js | 8 ++++ .../app/ui/components/settings/shortcuts.js | 1 + .../app/ui/components/viewers/response-raw.js | 12 ++++++ .../ui/components/viewers/response-viewer.js | 37 ++++++++++++++++++- 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/packages/insomnia-app/app/common/hotkeys.js b/packages/insomnia-app/app/common/hotkeys.js index 4c28f5786ff..149c68d875c 100644 --- a/packages/insomnia-app/app/common/hotkeys.js +++ b/packages/insomnia-app/app/common/hotkeys.js @@ -156,6 +156,14 @@ export const FOCUS_FILTER: Hotkey = { keycode: keycodes.f }; +export const FOCUS_RESPONSE: Hotkey = { + description: 'Focus Response', + meta: true, + alt: false, + shift: false, + keycode: keycodes.singlequote +}; + export const SHOW_COOKIES: Hotkey = { description: 'Edit Cookies', meta: true, diff --git a/packages/insomnia-app/app/ui/components/settings/shortcuts.js b/packages/insomnia-app/app/ui/components/settings/shortcuts.js index d0885012024..c106253341c 100644 --- a/packages/insomnia-app/app/ui/components/settings/shortcuts.js +++ b/packages/insomnia-app/app/ui/components/settings/shortcuts.js @@ -34,6 +34,7 @@ class Shortcuts extends PureComponent { {this.renderHotkey(hotkeys.SHOW_ENVIRONMENTS)} {this.renderHotkey(hotkeys.TOGGLE_ENVIRONMENTS_MENU)} {this.renderHotkey(hotkeys.FOCUS_URL)} + {this.renderHotkey(hotkeys.FOCUS_RESPONSE)} {this.renderHotkey(hotkeys.TOGGLE_METHOD_DROPDOWN)} {this.renderHotkey(hotkeys.TOGGLE_SIDEBAR)} {this.renderHotkey(hotkeys.TOGGLE_HISTORY_DROPDOWN)} diff --git a/packages/insomnia-app/app/ui/components/viewers/response-raw.js b/packages/insomnia-app/app/ui/components/viewers/response-raw.js index ea45be042d9..6d7aa441668 100644 --- a/packages/insomnia-app/app/ui/components/viewers/response-raw.js +++ b/packages/insomnia-app/app/ui/components/viewers/response-raw.js @@ -42,6 +42,18 @@ class ResponseRaw extends PureComponent { return false; } + focus() { + if (this._textarea) { + this._textarea.focus(); + } + } + + selectAll() { + if (this._textarea) { + this._textarea.select(); + } + } + render() { const { fontSize } = this.props; return ( diff --git a/packages/insomnia-app/app/ui/components/viewers/response-viewer.js b/packages/insomnia-app/app/ui/components/viewers/response-viewer.js index ec793b56b8b..e9b58354590 100644 --- a/packages/insomnia-app/app/ui/components/viewers/response-viewer.js +++ b/packages/insomnia-app/app/ui/components/viewers/response-viewer.js @@ -16,6 +16,8 @@ import { PREVIEW_MODE_FRIENDLY, PREVIEW_MODE_RAW } from '../../../common/constants'; +import * as hotkeys from '../../../common/hotkeys'; +import KeydownBinder from '../keydown-binder'; let alwaysShowLargeResponses = false; @@ -153,7 +155,34 @@ class ResponseViewer extends React.Component { return false; } - render() { + _setSelectableViewRef(n) { + this._selectableView = n; + } + + _isViewSelectable() { + return ( + this._selectableView != null && + typeof this._selectableView.focus === 'function' && + typeof this._selectableView.selectAll === 'function' + ); + } + + _handleKeyDown(e) { + if (!this._isViewSelectable()) { + return; + } + + hotkeys.executeHotKey(e, hotkeys.FOCUS_RESPONSE, () => { + if (!this._isViewSelectable()) { + return; + } + + this._selectableView.focus(); + this._selectableView.selectAll(); + }); + } + + _renderView() { const { bytes, download, @@ -328,6 +357,7 @@ class ResponseViewer extends React.Component { return ( @@ -351,6 +381,7 @@ class ResponseViewer extends React.Component { return ( { ); } } + + render() { + return {this._renderView()}; + } } export default ResponseViewer; From 28bf92ee29d109a66ee6e98ee8282b6e80b6c87f Mon Sep 17 00:00:00 2001 From: Ricky Chandra Date: Sun, 18 Nov 2018 00:21:12 +0700 Subject: [PATCH 2/2] Fix Flow violations --- .../app/ui/components/viewers/response-viewer.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/insomnia-app/app/ui/components/viewers/response-viewer.js b/packages/insomnia-app/app/ui/components/viewers/response-viewer.js index e9b58354590..bfe6b5db185 100644 --- a/packages/insomnia-app/app/ui/components/viewers/response-viewer.js +++ b/packages/insomnia-app/app/ui/components/viewers/response-viewer.js @@ -49,6 +49,8 @@ type State = { @autobind class ResponseViewer extends React.Component { + _selectableView: any; + constructor(props: Props) { super(props); this.state = { @@ -155,7 +157,7 @@ class ResponseViewer extends React.Component { return false; } - _setSelectableViewRef(n) { + _setSelectableViewRef(n: any) { this._selectableView = n; } @@ -167,7 +169,7 @@ class ResponseViewer extends React.Component { ); } - _handleKeyDown(e) { + _handleKeyDown(e: KeyboardEvent) { if (!this._isViewSelectable()) { return; }