From e268e25719dd4ebd1a6818dca86d12dc057386ca Mon Sep 17 00:00:00 2001 From: James Date: Sat, 27 Feb 2021 21:24:19 -0500 Subject: [PATCH] feat: simplifies collection update operation --- src/collections/operations/update.ts | 14 +++---------- src/fields/traverseFields.ts | 31 ++++++++++++++++++++++++---- src/globals/operations/update.ts | 13 ++---------- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/collections/operations/update.ts b/src/collections/operations/update.ts index e87fbc9579..f92e5991c2 100644 --- a/src/collections/operations/update.ts +++ b/src/collections/operations/update.ts @@ -1,11 +1,9 @@ -import deepmerge from 'deepmerge'; import httpStatus from 'http-status'; import path from 'path'; import { UploadedFile } from 'express-fileupload'; import { Where, Document } from '../../types'; import { Collection } from '../config/types'; -import overwriteMerge from '../../utilities/overwriteMerge'; import removeInternalFields from '../../utilities/removeInternalFields'; import executeAccess from '../../auth/executeAccess'; import { NotFound, Forbidden, APIError, FileUploadError } from '../../errors'; @@ -133,9 +131,9 @@ async function update(incomingArgs: Arguments): Promise { overrideAccess, }); - // ///////////////////////////////////// - // beforeValidate - Collection - // ///////////////////////////////////// + // // ///////////////////////////////////// + // // beforeValidate - Collection + // // ///////////////////////////////////// await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => { await priorHook; @@ -163,12 +161,6 @@ async function update(incomingArgs: Arguments): Promise { })) || data; }, Promise.resolve()); - // ///////////////////////////////////// - // Merge updates into existing data - // ///////////////////////////////////// - - data = deepmerge(originalDoc, data, { arrayMerge: overwriteMerge }); - // ///////////////////////////////////// // beforeChange - Fields // ///////////////////////////////////// diff --git a/src/fields/traverseFields.ts b/src/fields/traverseFields.ts index e323c7c573..3fa5570196 100644 --- a/src/fields/traverseFields.ts +++ b/src/fields/traverseFields.ts @@ -106,10 +106,33 @@ const traverseFields = (args: Arguments): void => { if (field.localized && unflattenLocales) { unflattenLocaleActions.push(() => { - data[field.name] = payload.config.localization.locales.reduce((locales, localeID) => ({ - ...locales, - [localeID]: localeID === locale ? data[field.name] : docWithLocales?.[field.name]?.[localeID], - }), {}); + const localeData = payload.config.localization.locales.reduce((locales, localeID) => { + let valueToSet; + + if (localeID === locale) { + if (data[field.name]) { + valueToSet = data[field.name]; + } else if (docWithLocales?.[field.name]?.[localeID]) { + valueToSet = docWithLocales?.[field.name]?.[localeID]; + } + } else { + valueToSet = docWithLocales?.[field.name]?.[localeID]; + } + + if (valueToSet) { + return { + ...locales, + [localeID]: valueToSet, + }; + } + + return locales; + }, {}); + + // If there are locales with data, set the data + if (Object.keys(localeData).length > 0) { + data[field.name] = localeData; + } }); } diff --git a/src/globals/operations/update.ts b/src/globals/operations/update.ts index 9e69bbe013..a2be344526 100644 --- a/src/globals/operations/update.ts +++ b/src/globals/operations/update.ts @@ -1,5 +1,3 @@ -import deepmerge from 'deepmerge'; -import overwriteMerge from '../../utilities/overwriteMerge'; import executeAccess from '../../auth/executeAccess'; import removeInternalFields from '../../utilities/removeInternalFields'; @@ -38,8 +36,6 @@ async function update(args) { if (globalJSON._id) { delete globalJSON._id; } - } else { - globalJSON = { globalType: slug }; } const originalDoc = await this.performFieldOperations(globalConfig, { @@ -96,12 +92,6 @@ async function update(args) { })) || data; }, Promise.resolve()); - // ///////////////////////////////////// - // Merge updates into existing data - // ///////////////////////////////////// - - data = deepmerge(originalDoc, data, { arrayMerge: overwriteMerge }); - // ///////////////////////////////////// // beforeChange - Fields // ///////////////////////////////////// @@ -124,9 +114,10 @@ async function update(args) { global = await Model.findOneAndUpdate( { globalType: slug }, result, - { overwrite: true, new: true }, + { new: true }, ); } else { + result.globalType = slug; global = await Model.create(result); }