chore: optimize getDatabByPath and getSiblingData
This commit is contained in:
@@ -47,7 +47,7 @@ const buildStateFromSchema = async (args: Args): Promise<Fields> => {
|
||||
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<Fields> => {
|
||||
|
||||
validationPromises.push(buildValidationPromise(fieldState, {
|
||||
...field,
|
||||
data: fullData,
|
||||
fullData,
|
||||
user,
|
||||
siblingData,
|
||||
siblingData: data,
|
||||
id,
|
||||
operation,
|
||||
}));
|
||||
@@ -154,7 +154,7 @@ const buildStateFromSchema = async (args: Args): Promise<Fields> => {
|
||||
|
||||
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<Fields> => {
|
||||
// Handle normal fields
|
||||
return {
|
||||
...state,
|
||||
[`${path}${namedField.name}`]: structureFieldState(field, passesCondition, fullData, data),
|
||||
[`${path}${namedField.name}`]: structureFieldState(field, passesCondition, data),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
import { unflatten } from 'flatley';
|
||||
import reduceFieldsToValues from './reduceFieldsToValues';
|
||||
import { Fields } from './types';
|
||||
|
||||
const getDataByPath = <T = unknown>(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];
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user