= {},
+ origin: ElementOrigin = this.props.errorOrigin,
+ ): void => {
+ if (!error || !code || !origin) {
+ return;
+ }
+
+ const elementsError: ElementsError = {
+ type: 'error',
+ code,
+ message: error.message,
+ origin,
+ context_info: {
+ [IS_ERROR_DISPLAYED]: true,
+ ...contextInfo,
+ },
+ };
+
+ this.props.onError(elementsError);
+ };
+
+ render() {
+ const { children, errorComponent: ErrorComponent, ...rest } = this.props;
+ const { error } = this.state;
+ if (error) {
+ return ;
+ }
+
+ return React.cloneElement(children, {
+ ...rest,
+ onError: this.handleError,
+ });
+ }
+}
+
+export default ErrorBoundary;
diff --git a/src/elements/common/error-boundary/index.js b/src/elements/common/error-boundary/index.js.flow
similarity index 100%
rename from src/elements/common/error-boundary/index.js
rename to src/elements/common/error-boundary/index.js.flow
diff --git a/src/elements/common/error-boundary/index.ts b/src/elements/common/error-boundary/index.ts
new file mode 100644
index 0000000000..854a5a9100
--- /dev/null
+++ b/src/elements/common/error-boundary/index.ts
@@ -0,0 +1,2 @@
+export { default } from './ErrorBoundary';
+export { default as withErrorBoundary } from './withErrorBoundary';
diff --git a/src/elements/common/error-boundary/withErrorBoundary.js b/src/elements/common/error-boundary/withErrorBoundary.js.flow
similarity index 100%
rename from src/elements/common/error-boundary/withErrorBoundary.js
rename to src/elements/common/error-boundary/withErrorBoundary.js.flow
diff --git a/src/elements/common/error-boundary/withErrorBoundary.tsx b/src/elements/common/error-boundary/withErrorBoundary.tsx
new file mode 100644
index 0000000000..8777f6e217
--- /dev/null
+++ b/src/elements/common/error-boundary/withErrorBoundary.tsx
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import DefaultError, { ErrorComponentProps } from './DefaultError';
+import ErrorBoundary from './ErrorBoundary';
+import type { ElementOrigin } from '../flowTypes';
+
+type ComponentWithRef = React.ComponentType
>;
+
+const withErrorBoundary =
+ (errorOrigin: ElementOrigin, errorComponent: React.ComponentType = DefaultError) =>
+ (WrappedComponent: ComponentWithRef
) => {
+ return React.forwardRef((props: P, ref: React.Ref) => (
+ )}
+ >
+
+
+ ));
+ };
+
+export default withErrorBoundary;