chore: simplifies base field merging

This commit is contained in:
James
2022-08-06 13:12:47 -04:00
parent 209b02b069
commit 804f3ced95
3 changed files with 24 additions and 50 deletions

View File

@@ -44,12 +44,7 @@ const sanitizeCollection = (config: Config, collection: CollectionConfig): Sanit
if (sanitized.versions.drafts.autosave === true) sanitized.versions.drafts.autosave = {};
const versionFields = mergeBaseFields(sanitized.fields, baseVersionFields);
sanitized.fields = [
...versionFields,
...sanitized.fields,
];
sanitized.fields = mergeBaseFields(sanitized.fields, baseVersionFields);
}
sanitized.versions = merge(versionCollectionDefaults, sanitized.versions);
@@ -62,17 +57,12 @@ const sanitizeCollection = (config: Config, collection: CollectionConfig): Sanit
sanitized.upload.staticURL = sanitized.upload.staticURL || `/${sanitized.slug}`;
sanitized.admin.useAsTitle = (sanitized.admin.useAsTitle && sanitized.admin.useAsTitle !== 'id') ? sanitized.admin.useAsTitle : 'filename';
let uploadFields = getBaseUploadFields({
const uploadFields = getBaseUploadFields({
config,
collection: sanitized,
});
uploadFields = mergeBaseFields(sanitized.fields, uploadFields);
sanitized.fields = [
...uploadFields,
...sanitized.fields,
];
sanitized.fields = mergeBaseFields(sanitized.fields, uploadFields);
}
if (sanitized.auth) {
@@ -103,12 +93,7 @@ const sanitizeCollection = (config: Config, collection: CollectionConfig): Sanit
}
}
authFields = mergeBaseFields(sanitized.fields, authFields);
sanitized.fields = [
...authFields,
...sanitized.fields,
];
sanitized.fields = mergeBaseFields(sanitized.fields, authFields);
}
// /////////////////////////////////

View File

@@ -1,14 +1,15 @@
import merge from 'deepmerge';
import { Field, fieldAffectsData, fieldHasSubFields, FieldWithSubFields } from './config/types';
const mergeBaseFields = (fields, baseFields) => {
const mergedFields = [];
const mergeBaseFields = (fields: Field[], baseFields: Field[]): Field[] => {
const mergedFields = [...fields || []];
if (fields) {
baseFields.forEach((baseField) => {
let matchedIndex = null;
baseFields.forEach((baseField) => {
let matchedIndex = null;
const match = fields.find((field, i) => {
if (field.name === baseField.name) {
if (fieldAffectsData(baseField)) {
const match = mergedFields.find((field, i) => {
if (fieldAffectsData(field) && field.name === baseField.name) {
matchedIndex = i;
return true;
}
@@ -17,30 +18,23 @@ const mergeBaseFields = (fields, baseFields) => {
});
if (match) {
const matchCopy = { ...match };
fields.splice(matchedIndex, 1);
const matchCopy: Field = { ...match };
mergedFields.splice(matchedIndex, 1);
let mergedField = {
...baseField,
...matchCopy,
};
const mergedField = merge<Field>(baseField, matchCopy);
if (baseField.fields && matchCopy.fields) {
mergedField.fields = mergeBaseFields(matchCopy.fields, baseField.fields);
return mergedFields.push(mergedField);
if (fieldHasSubFields(baseField) && fieldHasSubFields(matchCopy)) {
(mergedField as FieldWithSubFields).fields = mergeBaseFields(matchCopy.fields, baseField.fields);
}
mergedField = merge(mergedField, matchCopy, { arrayMerge: (_, source) => source });
return mergedFields.push(mergedField);
mergedFields.push(mergedField);
} else {
mergedFields.push(baseField);
}
}
});
return mergedFields.push(baseField);
});
return mergedFields;
}
return baseFields;
return mergedFields;
};
export default mergeBaseFields;

View File

@@ -44,12 +44,7 @@ const sanitizeGlobals = (collections: CollectionConfig[], globals: GlobalConfig[
if (sanitizedGlobal.versions.drafts.autosave === true) sanitizedGlobal.versions.drafts.autosave = {};
const versionFields = mergeBaseFields(sanitizedGlobal.fields, baseVersionFields);
sanitizedGlobal.fields = [
...versionFields,
...sanitizedGlobal.fields,
];
sanitizedGlobal.fields = mergeBaseFields(sanitizedGlobal.fields, baseVersionFields);
}
sanitizedGlobal.versions = merge(versionGlobalDefaults, sanitizedGlobal.versions);