diff --git a/package.json b/package.json
index ee6cc3274..06b2343ac 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"react-autolink-text2": "3.2.0",
"react-color": "2.17.0",
"react-dom": "16.8.6",
+ "react-json-editor-ajrm": "2.5.9",
"react-moment": "0.8.4",
"react-router-dom": "5.0.0",
"react-scripts": "2.1.8",
diff --git a/src/Components/EditConfig/RawEditor.js b/src/Components/EditConfig/RawEditor.js
new file mode 100644
index 000000000..d25d2248b
--- /dev/null
+++ b/src/Components/EditConfig/RawEditor.js
@@ -0,0 +1,85 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import JSONInput from 'react-json-editor-ajrm';
+import locale from 'react-json-editor-ajrm/locale/en';
+import withStyles from '@material-ui/core/styles/withStyles';
+import Button from '@material-ui/core/Button';
+import Dialog from '@material-ui/core/Dialog';
+import DialogActions from '@material-ui/core/DialogActions';
+import DialogContent from '@material-ui/core/DialogContent';
+import DialogTitle from '@material-ui/core/DialogTitle';
+import clone from '../Common/clone';
+
+const styles = () => ({
+ content: {
+ margin: 0
+ }
+});
+
+class RawEditor extends React.PureComponent {
+ state = {
+ open: true,
+ config: clone(this.props.config)
+ };
+
+ handleClose = cb => this.setState({ open: false }, cb);
+
+ handleCancel = () =>
+ this.handleClose(() => {
+ this.props.add
+ ? this.props.handleItemAddDone()
+ : this.props.handleItemEditDone();
+ });
+
+ handleSave = () =>
+ this.handleClose(() => {
+ let config = clone(this.state.config);
+ this.props.add
+ ? this.props.handleRawEditDone(config)
+ : this.props.handleRawEditDone(config);
+ });
+
+ handleConfigChange = config => this.setState({ config: config.jsObject });
+
+ render() {
+ const { classes } = this.props;
+ const { open, config } = this.state;
+
+ return (
+
+ );
+ }
+}
+
+RawEditor.propTypes = {
+ classes: PropTypes.object.isRequired,
+ config: PropTypes.object.isRequired,
+ handleRawEditDone: PropTypes.func.isRequired
+};
+
+export default withStyles(styles)(RawEditor);
diff --git a/src/Components/Header.js b/src/Components/Header.js
index a1327435f..a43324c5e 100644
--- a/src/Components/Header.js
+++ b/src/Components/Header.js
@@ -19,6 +19,7 @@ import CheckIcon from '@material-ui/icons/Check';
import RadioIcon from '@material-ui/icons/Radio';
import ExitToAppIcon from '@material-ui/icons/ExitToApp';
import BorderTopIcon from '@material-ui/icons/BorderTop';
+import CodeIcon from '@material-ui/icons/Code';
const styles = theme => ({
header: {
@@ -374,6 +375,20 @@ class Header extends React.PureComponent {
)}
+ {editing && (
+
+
+
+
+
+ )}