diff --git a/examples/getstarted/src/plugins/mycustomfields/admin/src/components/ColorPicker/ColorPickerInput/index.js b/examples/getstarted/src/plugins/mycustomfields/admin/src/components/ColorPicker/ColorPickerInput/index.js
index 4178f5892f..0512f3ebc9 100644
--- a/examples/getstarted/src/plugins/mycustomfields/admin/src/components/ColorPicker/ColorPickerInput/index.js
+++ b/examples/getstarted/src/plugins/mycustomfields/admin/src/components/ColorPicker/ColorPickerInput/index.js
@@ -1,4 +1,4 @@
-import React, { useRef } from 'react';
+import React from 'react';
import { Stack } from '@strapi/design-system/Stack';
import { FieldHint, FieldError, FieldLabel } from '@strapi/design-system/Field';
import { useIntl } from 'react-intl';
@@ -15,17 +15,13 @@ const ColorPickerInput = ({
}) => {
const { formatMessage } = useIntl();
- const renderCount = useRef(0);
- renderCount.current += 1;
- console.log('renderCount', renderCount.current);
-
return (
{formatMessage(intlLabel)}
-
+
diff --git a/packages/core/admin/admin/src/content-manager/components/Inputs/InputLoader.js b/packages/core/admin/admin/src/content-manager/components/Inputs/InputLoader.js
deleted file mode 100644
index 739992c6a3..0000000000
--- a/packages/core/admin/admin/src/content-manager/components/Inputs/InputLoader.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React, { useMemo, memo } from 'react';
-import PropTypes from 'prop-types';
-
-const InputLoader = ({ component, ...props }) => {
- const LazyComponent = useMemo(() => React.lazy(component), [component]);
-
- return ;
-};
-
-InputLoader.propTypes = {
- component: PropTypes.func.isRequired,
-};
-
-export default memo(InputLoader);
diff --git a/packages/core/admin/admin/src/content-manager/components/Inputs/index.js b/packages/core/admin/admin/src/content-manager/components/Inputs/index.js
index de814c759d..0138955b4c 100644
--- a/packages/core/admin/admin/src/content-manager/components/Inputs/index.js
+++ b/packages/core/admin/admin/src/content-manager/components/Inputs/index.js
@@ -1,4 +1,4 @@
-import React, { memo, Suspense, useMemo } from 'react';
+import React, { Suspense, memo, useMemo } from 'react';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import get from 'lodash/get';
@@ -27,7 +27,6 @@ import {
select,
VALIDATIONS_TO_OMIT,
} from './utils';
-import InputLoader from './InputLoader';
function Inputs({
allowedFields,
@@ -172,6 +171,19 @@ function Inputs({
const { label, description, placeholder, visible } = metadatas;
+ // Memoize the component to avoid remounting it and losing state
+ const CustomFieldInput = useMemo(() => {
+ if (customFieldUid) {
+ const customField = customFieldsRegistry.get(customFieldUid);
+ const CustomFieldInput = React.lazy(customField.components.Input);
+
+ return CustomFieldInput;
+ }
+
+ // Not a custom field, component won't be used
+ return null;
+ }, [customFieldUid, customFieldsRegistry]);
+
if (visible === false) {
return null;
}
@@ -225,23 +237,6 @@ function Inputs({
);
}
- const customInputs = {
- json: InputJSON,
- uid: InputUID,
- media: fields.media,
- wysiwyg: Wysiwyg,
- ...fields,
- };
-
- if (customFieldUid) {
- const customField = customFieldsRegistry.get(customFieldUid);
- // const CustomFieldInput = TestColorPicker;
- const CustomFieldInput = (props) => (
-
- );
- customInputs[customFieldUid] = CustomFieldInput;
- }
-
return (
}>