diff --git a/src/admin/components/forms/Form/buildStateFromSchema.ts b/src/admin/components/forms/Form/buildStateFromSchema.ts index 9f7fbe7ec5..672a8cbf52 100644 --- a/src/admin/components/forms/Form/buildStateFromSchema.ts +++ b/src/admin/components/forms/Form/buildStateFromSchema.ts @@ -47,7 +47,7 @@ const buildStateFromSchema = async (args: Args): Promise => { if (fieldSchema) { const validationPromises = []; - const structureFieldState = (field, passesCondition, data = {}, siblingData = {}) => { + const structureFieldState = (field, passesCondition, data = {}) => { const value = typeof data?.[field.name] !== 'undefined' ? data[field.name] : field.defaultValue; const fieldState = { @@ -61,9 +61,9 @@ const buildStateFromSchema = async (args: Args): Promise => { validationPromises.push(buildValidationPromise(fieldState, { ...field, - data: fullData, + fullData, user, - siblingData, + siblingData: data, id, operation, })); @@ -154,7 +154,7 @@ const buildStateFromSchema = async (args: Args): Promise => { return { ...state, - [`${path}${field.name}`]: structureFieldState(field, passesCondition, fullData, data), + [`${path}${field.name}`]: structureFieldState(field, passesCondition, data), }; } @@ -171,7 +171,7 @@ const buildStateFromSchema = async (args: Args): Promise => { // Handle normal fields return { ...state, - [`${path}${namedField.name}`]: structureFieldState(field, passesCondition, fullData, data), + [`${path}${namedField.name}`]: structureFieldState(field, passesCondition, data), }; } diff --git a/src/admin/components/forms/Form/getDataByPath.ts b/src/admin/components/forms/Form/getDataByPath.ts index 52ee905f4b..297140b5d3 100644 --- a/src/admin/components/forms/Form/getDataByPath.ts +++ b/src/admin/components/forms/Form/getDataByPath.ts @@ -1,24 +1,18 @@ import { unflatten } from 'flatley'; -import reduceFieldsToValues from './reduceFieldsToValues'; import { Fields } from './types'; const getDataByPath = (fields: Fields, path: string): T => { const pathPrefixToRemove = path.substring(0, path.lastIndexOf('.') + 1); const name = path.split('.').pop(); - const data = Object.keys(fields).reduce((matchedData, key) => { - if (key.indexOf(`${path}.`) === 0 || key === path) { - return { - ...matchedData, - [key.replace(pathPrefixToRemove, '')]: fields[key], - }; + const data = {}; + Object.keys(fields).forEach((key) => { + if (!fields[key].disableFormData && (key.indexOf(`${path}.`) === 0 || key === path)) { + data[key.replace(pathPrefixToRemove, '')] = fields[key].value; } + }); - return matchedData; - }, {}); - - const values = reduceFieldsToValues(data, true); - const unflattenedData = unflatten(values); + const unflattenedData = unflatten(data); return unflattenedData?.[name]; }; diff --git a/src/admin/components/forms/Form/getSiblingData.ts b/src/admin/components/forms/Form/getSiblingData.ts index 0952729379..fe866fe691 100644 --- a/src/admin/components/forms/Form/getSiblingData.ts +++ b/src/admin/components/forms/Form/getSiblingData.ts @@ -1,26 +1,21 @@ -import reduceFieldsToValues from './reduceFieldsToValues'; +import { unflatten } from 'flatley'; import { Fields, Data } from './types'; const getSiblingData = (fields: Fields, path: string): Data => { - let siblingFields = fields; + const siblingFields = {}; // If this field is nested // We can provide a list of sibling fields if (path.indexOf('.') > 0) { const parentFieldPath = path.substring(0, path.lastIndexOf('.') + 1); - siblingFields = Object.keys(fields).reduce((siblings, fieldKey) => { - if (fieldKey.indexOf(parentFieldPath) === 0) { - return { - ...siblings, - [fieldKey.replace(parentFieldPath, '')]: fields[fieldKey], - }; + Object.keys(fields).forEach((fieldKey) => { + if (!fields[fieldKey].disableFormData && fieldKey.indexOf(parentFieldPath) === 0) { + siblingFields[fieldKey.replace(parentFieldPath, '')] = fields[fieldKey].value; } - - return siblings; - }, {}); + }); } - return reduceFieldsToValues(siblingFields, true); + return unflatten(siblingFields, { safe: true }); }; export default getSiblingData; diff --git a/src/admin/components/forms/Form/reduceFieldsToValues.ts b/src/admin/components/forms/Form/reduceFieldsToValues.ts index 548463df54..c57f7d0b2e 100644 --- a/src/admin/components/forms/Form/reduceFieldsToValues.ts +++ b/src/admin/components/forms/Form/reduceFieldsToValues.ts @@ -1,5 +1,5 @@ import { unflatten as flatleyUnflatten } from 'flatley'; -import { Fields, Data } from './types'; +import { Data, Fields } from './types'; const reduceFieldsToValues = (fields: Fields, unflatten?: boolean): Data => { const data = {}; @@ -11,8 +11,7 @@ const reduceFieldsToValues = (fields: Fields, unflatten?: boolean): Data => { }); if (unflatten) { - const unflattened = flatleyUnflatten(data, { safe: true }); - return unflattened; + return flatleyUnflatten(data, { safe: true }); } return data;