diff --git a/.eslintrc.es6.json b/.eslintrc.es6.json
index ced7d71c82..000b596452 100644
--- a/.eslintrc.es6.json
+++ b/.eslintrc.es6.json
@@ -31,7 +31,10 @@
"jsx-a11y/label-has-for": [2, {
"required": {"some": ["nesting", "id"]} // some of our labels are hidden and we cannot nest those
}],
- "jsx-a11y/anchor-is-valid": 0 // cannot fix this one, it would break wprdpress themes
+ "jsx-a11y/anchor-is-valid": 0, // cannot fix this one, it would break wprdpress themes
+ "jsx-a11y/label-has-associated-control": [ 2, {
+ "either": "either" // control has to be either nested or associated via htmlFor
+ }]
}
}
diff --git a/assets/js/src/form_editor/components/block_settings.jsx b/assets/js/src/form_editor/components/block_settings.jsx
new file mode 100644
index 0000000000..f57ac32260
--- /dev/null
+++ b/assets/js/src/form_editor/components/block_settings.jsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import {
+ Panel,
+ PanelBody,
+} from '@wordpress/components';
+
+export default () => (
+
+
+ TODO Block Settings
+
+
+);
diff --git a/assets/js/src/form_editor/components/editor.jsx b/assets/js/src/form_editor/components/editor.jsx
new file mode 100644
index 0000000000..9642d413d4
--- /dev/null
+++ b/assets/js/src/form_editor/components/editor.jsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import Header from './header.jsx';
+import Sidebar from './sidebar.jsx';
+import FormTitle from './form_title.jsx';
+
+export default () => (
+
+);
diff --git a/assets/js/src/form_editor/components/form_settings.jsx b/assets/js/src/form_editor/components/form_settings.jsx
new file mode 100644
index 0000000000..859e8da62a
--- /dev/null
+++ b/assets/js/src/form_editor/components/form_settings.jsx
@@ -0,0 +1,25 @@
+import React from 'react';
+import {
+ Panel,
+ PanelBody,
+} from '@wordpress/components';
+
+export default () => (
+ <>
+
+
+ TODO Basic Settings
+
+
+
+
+ TODO Form placement
+
+
+
+
+ TODO Custom CSS
+
+
+ >
+);
diff --git a/assets/js/src/form_editor/components/form_title.jsx b/assets/js/src/form_editor/components/form_title.jsx
new file mode 100644
index 0000000000..6d3cd6edf6
--- /dev/null
+++ b/assets/js/src/form_editor/components/form_title.jsx
@@ -0,0 +1,34 @@
+import React, { useState } from 'react';
+import classnames from 'classnames';
+
+export default () => {
+ const [isSelected, setIsSelected] = useState(false);
+ const titleClass = classnames('wp-block editor-post-title__block', {
+ 'is-selected': isSelected,
+ });
+ return (
+
+
+
+
+
+
+
+ );
+};
diff --git a/assets/js/src/form_editor/components/header.jsx b/assets/js/src/form_editor/components/header.jsx
new file mode 100644
index 0000000000..13d08d856f
--- /dev/null
+++ b/assets/js/src/form_editor/components/header.jsx
@@ -0,0 +1,22 @@
+import React from 'react';
+import { IconButton } from '@wordpress/components';
+
+export default () => (
+
+
+
+
+ null}
+ isToggled
+ />
+
+
+);
diff --git a/assets/js/src/form_editor/components/sidebar.jsx b/assets/js/src/form_editor/components/sidebar.jsx
new file mode 100644
index 0000000000..d2a08175fe
--- /dev/null
+++ b/assets/js/src/form_editor/components/sidebar.jsx
@@ -0,0 +1,56 @@
+import React, { useState } from 'react';
+import { IconButton } from '@wordpress/components';
+import PropTypes from 'prop-types';
+import BlockSettings from './block_settings.jsx';
+import FormSettings from './form_settings.jsx';
+
+const SidebarHeader = ({ children, closeSidebar }) => (
+ <>
+
+ { children }
+
+
+ >
+);
+
+SidebarHeader.propTypes = {
+ closeSidebar: PropTypes.func.isRequired,
+ children: PropTypes.oneOfType([
+ PropTypes.arrayOf(PropTypes.node),
+ PropTypes.node,
+ ]).isRequired,
+};
+
+export default () => {
+ const [activeTab, setActiveTab] = useState('form');
+ return (
+
+
+
+ -
+
+
+ -
+
+
+
+
+ {activeTab === 'form' ?
:
}
+
+ );
+};
diff --git a/assets/js/src/form_editor/index.jsx b/assets/js/src/form_editor/index.jsx
index 6e127804ea..a71fd09492 100644
--- a/assets/js/src/form_editor/index.jsx
+++ b/assets/js/src/form_editor/index.jsx
@@ -1,14 +1,12 @@
import React from 'react';
import ReactDOM from 'react-dom';
+import Editor from './components/editor.jsx';
const appElement = document.querySelector('#mailpoet_form_edit');
if (appElement) {
ReactDOM.render(
-
- Here comes editor for:
- {window.mailpoet_form_data.name}
-
,
+ ,
appElement
);
}