chore: simplifies base field merging
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
// /////////////////////////////////
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user