diff --git a/demo/collections/NestedArrays.ts b/demo/collections/NestedArrays.ts index 020921189f..0c2b8a4697 100644 --- a/demo/collections/NestedArrays.ts +++ b/demo/collections/NestedArrays.ts @@ -57,7 +57,6 @@ const NestedArray: PayloadCollectionConfig = { name: 'grandchildIdentifier', label: 'Grandchild Identifier', type: 'text', - required: true, }, ], }, diff --git a/src/admin/components/forms/Form/reduceFieldsToValues.ts b/src/admin/components/forms/Form/reduceFieldsToValues.ts index d3881566bd..6fbe19bbc0 100644 --- a/src/admin/components/forms/Form/reduceFieldsToValues.ts +++ b/src/admin/components/forms/Form/reduceFieldsToValues.ts @@ -5,7 +5,7 @@ const reduceFieldsToValues = (fields: Fields, flatten?: boolean): Data => { const data = {}; Object.keys(fields).forEach((key) => { - if (!fields[key].disableFormData && fields[key].value !== undefined) { + if (!fields[key].disableFormData) { if (fields[key].stringify) { data[key] = JSON.stringify(fields[key].value); } else { diff --git a/src/fields/config/sanitize.ts b/src/fields/config/sanitize.ts index 6f12f1def7..d164abb7d9 100644 --- a/src/fields/config/sanitize.ts +++ b/src/fields/config/sanitize.ts @@ -20,7 +20,11 @@ const sanitizeFields = (fields, validRelationships) => { if (typeof field.validate === 'undefined') { const defaultValidate = validations[field.type]; - field.validate = (val) => defaultValidate(val, field); + if (defaultValidate) { + field.validate = (val) => defaultValidate(val, field); + } else { + field.validate = () => true; + } } if (!field.hooks) field.hooks = {}; diff --git a/src/fields/traverseFields.ts b/src/fields/traverseFields.ts index 1cbafe7360..1eb241d074 100644 --- a/src/fields/traverseFields.ts +++ b/src/fields/traverseFields.ts @@ -170,16 +170,20 @@ const traverseFields = (args: Arguments): void => { }); } else if (fieldIsArrayType(field)) { if (Array.isArray(data[field.name])) { - (data[field.name] as Record[]).forEach((rowData, i) => { + for (let i = 0; i < data[field.name].length; i += 1) { + if (typeof (data[field.name][i]) === 'undefined') { + data[field.name][i] = {}; + } + traverseFields({ ...args, fields: field.fields, - data: rowData, + data: data[field.name][i] || {}, originalDoc: originalDoc?.[field.name]?.[i], docWithLocales: docWithLocales?.[field.name]?.[i], path: `${path}${field.name}.${i}.`, }); - }); + } } } else { traverseFields({ @@ -202,7 +206,7 @@ const traverseFields = (args: Arguments): void => { traverseFields({ ...args, fields: block.fields, - data: rowData, + data: rowData || {}, originalDoc: originalDoc?.[field.name]?.[i], docWithLocales: docWithLocales?.[field.name]?.[i], path: `${path}${field.name}.${i}.`,