+ );
+};
+
+export default EditorContainer;
diff --git a/src/editors/example.jsx b/src/editors/example.jsx
new file mode 100644
index 000000000..2e6985340
--- /dev/null
+++ b/src/editors/example.jsx
@@ -0,0 +1,101 @@
+/* istanbul ignore file */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable import/extensions */
+/* eslint-disable import/no-unresolved */
+/**
+ * This is an example component for an xblock Editor
+ * It uses pre-existing components to handle the saving of a the result of a function into the xblock's data.
+ * To use run npm run-script addXblock
+ */
+
+/* eslint-disable no-unused-vars */
+
+import React from 'react';
+import { connect } from 'react-redux';
+import PropTypes from 'prop-types';
+
+import { Spinner } from '@openedx/paragon';
+import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
+
+import EditorContainer from '../EditorContainer';
+// This 'module' self-import hack enables mocking during tests.
+// See src/editors/decisions/0005-internal-editor-testability-decisions.md. The whole approach to how hooks are tested
+// should be re-thought and cleaned up to avoid this pattern.
+// eslint-disable-next-line import/no-self-import
+import * as module from '..';
+import { actions, selectors } from '../../data/redux';
+import { RequestKeys } from '../../data/constants/requests';
+
+export const hooks = {
+ getContent: () => ({
+ some: 'content',
+ }),
+};
+
+export const thumbEditor = ({
+ onClose,
+ // redux
+ blockValue,
+ lmsEndpointUrl,
+ blockFailed,
+ blockFinished,
+ initializeEditor,
+ // inject
+ intl,
+}) => (
+
+
+ {!blockFinished
+ ? (
+
+
+
+ )
+ : (
+
+ Your Editor Goes here.
+ You can get at the xblock data with the blockValue field.
+ here is what is in your xblock: {JSON.stringify(blockValue)}
+