diff --git a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js index c4087d2bbb..52bb5bb2f4 100644 --- a/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +++ b/packages/core/admin/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js @@ -213,28 +213,23 @@ const createYupSchemaAttribute = (type, validations, options) => { } if (type === 'json') { - if (validations.required) { - schema = yup.mixed(errorsTrads.required).test('required', errorsTrads.required, (value) => { - return value === undefined; + schema = yup + .mixed(errorsTrads.json) + .test('isJSON', errorsTrads.json, (value) => { + try { + JSON.parse(value); + + return true; + } catch (err) { + return false; + } + }) + .nullable() + .test('required', errorsTrads.required, (value) => { + if (validations.required && !value.length) return false; + + return true; }); - } else { - schema = yup - .mixed(errorsTrads.json) - .test('isJSON', errorsTrads.json, (value) => { - if (value === undefined) { - return true; - } - - try { - JSON.parse(value); - - return true; - } catch (err) { - return false; - } - }) - .nullable(); - } } if (type === 'email') { diff --git a/packages/core/helper-plugin/lib/src/components/GenericInput/index.js b/packages/core/helper-plugin/lib/src/components/GenericInput/index.js index fcfda9dfa8..44db7ef04a 100644 --- a/packages/core/helper-plugin/lib/src/components/GenericInput/index.js +++ b/packages/core/helper-plugin/lib/src/components/GenericInput/index.js @@ -146,7 +146,9 @@ const GenericInput = ({ hint={hint} required={required} onChange={(json) => { - onChange({ target: { name, value: json } }); + // Default to null when the field is required and there is no input value + const value = !attribute.required && !json.length ? 'null' : json; + onChange({ target: { name, value } }); }} minHeight={pxToRem(252)} maxHeight={pxToRem(504)}