diff --git a/packages/bruno-app/src/components/CodeEditor/index.js b/packages/bruno-app/src/components/CodeEditor/index.js index 2f9ca9cdd..76a3c7dad 100644 --- a/packages/bruno-app/src/components/CodeEditor/index.js +++ b/packages/bruno-app/src/components/CodeEditor/index.js @@ -13,6 +13,7 @@ import * as jsonlint from '@prantlf/jsonlint'; import { JSHINT } from 'jshint'; import stripJsonComments from 'strip-json-comments'; import { getAllVariables } from 'utils/collections'; +import { connect } from 'react-redux'; let CodeMirror; const SERVER_RENDERED = typeof window === 'undefined' || global['PREVENT_CODEMIRROR_RENDER'] === true; @@ -117,7 +118,7 @@ if (!SERVER_RENDERED) { }; } -export default class CodeEditor extends React.Component { +class CodeEditor extends React.Component { constructor(props) { super(props); @@ -142,7 +143,7 @@ export default class CodeEditor extends React.Component { lineWrapping: true, tabSize: TAB_SIZE, mode: this.props.mode || 'application/ld+json', - keyMap: 'sublime', + keyMap: this.props.editorPrefs?.keymap || 'sublime', autoCloseBrackets: true, matchBrackets: true, showCursorWhenSelecting: true, @@ -424,3 +425,7 @@ export default class CodeEditor extends React.Component { } }; } + +const mapStateToProps = (state) => ({ editorPrefs: state.app?.preferences?.editor }); + +export default connect(mapStateToProps)(CodeEditor); diff --git a/packages/bruno-app/src/components/Preferences/Display/EditorKeymapSettings/StyledWrapper.js b/packages/bruno-app/src/components/Preferences/Display/EditorKeymapSettings/StyledWrapper.js new file mode 100644 index 000000000..d45eda5b6 --- /dev/null +++ b/packages/bruno-app/src/components/Preferences/Display/EditorKeymapSettings/StyledWrapper.js @@ -0,0 +1,7 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + color: ${(props) => props.theme.text}; +`; + +export default StyledWrapper; diff --git a/packages/bruno-app/src/components/Preferences/Display/EditorKeymapSettings/index.js b/packages/bruno-app/src/components/Preferences/Display/EditorKeymapSettings/index.js new file mode 100644 index 000000000..0a5c8d8e2 --- /dev/null +++ b/packages/bruno-app/src/components/Preferences/Display/EditorKeymapSettings/index.js @@ -0,0 +1,55 @@ +import React, { useState } from 'react'; +import get from 'lodash/get'; +import { useSelector, useDispatch } from 'react-redux'; +import { savePreferences } from 'providers/ReduxStore/slices/app'; +import StyledWrapper from './StyledWrapper'; + +// https://codemirror.net/5/keymap/ +const codemirrorKeymaps = [ + { value: 'sublime', label: 'Sublime' }, + { value: 'vim', label: 'Vim' }, + { value: 'emacs', label: 'Emacs' }, +]; + +const EditorKeymapSettings = ({ close }) => { + const dispatch = useDispatch(); + const preferences = useSelector((state) => state.app.preferences); + const keymap = useMemo(() => get(preferences, 'editor.keymap', 'sublime'), [preferences]); + + const handleKeymapChange = (e) => { + dispatch( + savePreferences({ + ...preferences, + editor: { keymap: e.target.value } + }) + ).catch(console.error); + }; + + return ( + +
+ +
+ {codemirrorKeymaps.map(({ value, label }) => ( + <> + + + + ))} +
+
+
+ ); +}; + +export default EditorKeymapSettings; diff --git a/packages/bruno-app/src/components/Preferences/Display/Font/index.js b/packages/bruno-app/src/components/Preferences/Display/Font/index.js index 622ea0817..aeed88107 100644 --- a/packages/bruno-app/src/components/Preferences/Display/Font/index.js +++ b/packages/bruno-app/src/components/Preferences/Display/Font/index.js @@ -37,9 +37,9 @@ const Font = ({ close }) => { return ( -
+
- + { return (
- + Theme
-
+
+ + Code Editor + + +
diff --git a/packages/bruno-app/src/pages/Bruno/index.js b/packages/bruno-app/src/pages/Bruno/index.js index ed5539dbb..bd41c3351 100644 --- a/packages/bruno-app/src/pages/Bruno/index.js +++ b/packages/bruno-app/src/pages/Bruno/index.js @@ -33,6 +33,8 @@ if (!SERVER_RENDERED) { require('codemirror/addon/search/searchcursor'); require('codemirror/addon/display/placeholder'); require('codemirror/keymap/sublime'); + require('codemirror/keymap/vim'); + require('codemirror/keymap/emacs'); require('codemirror-graphql/hint'); require('codemirror-graphql/info');