diff --git a/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/index.js b/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/index.js
index 51d0d9bc67..fe05f09533 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/index.js
@@ -9,6 +9,7 @@ import pluginId from '../../pluginId';
import useEditView from '../../hooks/useEditView';
import ComponentInitializer from '../ComponentInitializer';
import NonRepeatableComponent from '../NonRepeatableComponent';
+import NotAllowedInput from '../NotAllowedInput';
import RepeatableComponent from '../RepeatableComponent';
import connect from './utils/connect';
import select from './utils/select';
@@ -29,6 +30,7 @@ const FieldComponent = ({
min,
name,
// Passed thanks to the connect function
+ hasChildrenAllowedFields,
componentValue,
removeComponentFromField,
}) => {
@@ -41,6 +43,14 @@ const FieldComponent = ({
const displayedFields = get(currentComponentSchema, ['layouts', 'edit'], []);
+ if (!hasChildrenAllowedFields) {
+ return (
+
+
+
+ );
+ }
+
return (
{isFromDynamicZone && (
@@ -102,6 +112,7 @@ const FieldComponent = ({
FieldComponent.defaultProps = {
componentValue: null,
componentFriendlyName: null,
+ hasChildrenAllowedFields: false,
icon: 'smile',
isFromDynamicZone: false,
isRepeatable: false,
@@ -114,6 +125,7 @@ FieldComponent.propTypes = {
componentFriendlyName: PropTypes.string,
componentUid: PropTypes.string.isRequired,
componentValue: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
+ hasChildrenAllowedFields: PropTypes.bool,
icon: PropTypes.string,
isFromDynamicZone: PropTypes.bool,
isRepeatable: PropTypes.bool,
diff --git a/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/connect.js b/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/connect.js
index 238d60ef82..648a3d30e4 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/connect.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/connect.js
@@ -3,7 +3,7 @@ import React from 'react';
function connect(WrappedComponent, select) {
return function(props) {
// eslint-disable-next-line react/prop-types
- const selectors = select(props.name);
+ const selectors = select(props);
return ;
};
diff --git a/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/select.js b/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/select.js
index 872f4e5e75..3af397a272 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/select.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/FieldComponent/utils/select.js
@@ -1,12 +1,37 @@
-import { useContext } from 'react';
+import { useContext, useMemo } from 'react';
import { get } from 'lodash';
import EditViewDataManagerContext from '../../../contexts/EditViewDataManager';
-function useSelect(name) {
- const { modifiedData, removeComponentFromField } = useContext(EditViewDataManagerContext);
+function useSelect({ isFromDynamicZone, name }) {
+ const {
+ createActionAllowedFields,
+ isCreatingEntry,
+ modifiedData,
+ removeComponentFromField,
+ } = useContext(EditViewDataManagerContext);
+
+ const allowedFields = useMemo(() => {
+ return isCreatingEntry ? createActionAllowedFields : [];
+ }, [isCreatingEntry, createActionAllowedFields]);
+
const componentValue = get(modifiedData, name, null);
+ const hasChildrenAllowedFields = useMemo(() => {
+ if (isFromDynamicZone) {
+ return true;
+ }
+
+ const relatedChildrenAllowedFields = allowedFields
+ .map(fieldName => {
+ return fieldName.split('.')[0];
+ })
+ .filter(fieldName => fieldName === name.split('.')[0]);
+
+ return relatedChildrenAllowedFields.length > 0;
+ }, [allowedFields, isFromDynamicZone, name]);
+
return {
+ hasChildrenAllowedFields,
removeComponentFromField,
componentValue,
};
diff --git a/packages/strapi-plugin-content-manager/admin/src/components/Inputs/index.js b/packages/strapi-plugin-content-manager/admin/src/components/Inputs/index.js
index fd99f61e08..546bfc5b67 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/Inputs/index.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/Inputs/index.js
@@ -143,7 +143,6 @@ function Inputs({
if (isChildOfDynamicZone) {
// TODO we can simply return true here if we block the dynamic zone
- console.log('opooooo');
return allowedFields.includes(fieldName[0]);
}
diff --git a/packages/strapi-plugin-content-manager/admin/src/components/Inputs/utils/select.js b/packages/strapi-plugin-content-manager/admin/src/components/Inputs/utils/select.js
index 0f9d9b51fb..06e1ec6f92 100644
--- a/packages/strapi-plugin-content-manager/admin/src/components/Inputs/utils/select.js
+++ b/packages/strapi-plugin-content-manager/admin/src/components/Inputs/utils/select.js
@@ -4,17 +4,19 @@ import EditViewDataManagerContext from '../../../contexts/EditViewDataManager';
function useSelect(keys) {
const {
- modifiedData,
- formErrors,
- onChange,
- isCreatingEntry,
createActionAllowedFields,
+ formErrors,
+ isCreatingEntry,
+ modifiedData,
+ onChange,
} = useContext(EditViewDataManagerContext);
- const value = get(modifiedData, keys, null);
+
const allowedFields = useMemo(() => {
return isCreatingEntry ? createActionAllowedFields : [];
}, [isCreatingEntry, createActionAllowedFields]);
+ const value = get(modifiedData, keys, null);
+
return {
allowedFields,
formErrors,