From 915f1e2b3a0c9618d5699a0ee6f5e74c6f4038ee Mon Sep 17 00:00:00 2001 From: James Date: Mon, 19 Dec 2022 10:52:11 -0500 Subject: [PATCH] fix: #1698 - globals and autosave not working --- src/globals/operations/update.ts | 31 +++++++++++++++++++--- src/versions/getLatestGlobalVersion.ts | 36 -------------------------- 2 files changed, 27 insertions(+), 40 deletions(-) delete mode 100644 src/versions/getLatestGlobalVersion.ts diff --git a/src/globals/operations/update.ts b/src/globals/operations/update.ts index c8980df52b..7847effac7 100644 --- a/src/globals/operations/update.ts +++ b/src/globals/operations/update.ts @@ -1,4 +1,4 @@ -import { Where } from '../../types'; +import { docHasTimestamps, Where } from '../../types'; import { SanitizedGlobalConfig, TypeWithID } from '../config/types'; import executeAccess from '../../auth/executeAccess'; import sanitizeInternalFields from '../../utilities/sanitizeInternalFields'; @@ -12,7 +12,6 @@ import { beforeValidate } from '../../fields/hooks/beforeValidate'; import { afterChange } from '../../fields/hooks/afterChange'; import { afterRead } from '../../fields/hooks/afterRead'; import { PayloadRequest } from '../../express/types'; -import { getLatestGlobalVersion } from '../../versions/getLatestGlobalVersion'; type Args = { globalConfig: SanitizedGlobalConfig @@ -83,7 +82,31 @@ async function update(args: Args): Promise { // 2. Retrieve document // ///////////////////////////////////// - let global = await getLatestGlobalVersion({ payload, config: globalConfig, query }); + let version; + let global; + + if (globalConfig.versions?.drafts) { + version = payload.versions[globalConfig.slug].findOne({}, {}, { + sort: { + updatedAt: 'desc', + }, + lean: true, + }); + } + + const existingGlobal = await payload.globals.Model.findOne(query).lean(); + version = await version; + + if (!version || (existingGlobal && docHasTimestamps(existingGlobal) && version.updatedAt < existingGlobal.updatedAt)) { + global = existingGlobal; + } else { + global = { + ...version.version, + updatedAt: version.updatedAt, + createdAt: version.createdAt, + }; + } + let globalJSON: Record = {}; if (global) { @@ -194,7 +217,7 @@ async function update(args: Args): Promise { }); } else { try { - if (global) { + if (existingGlobal) { global = await Model.findOneAndUpdate( { globalType: slug }, result, diff --git a/src/versions/getLatestGlobalVersion.ts b/src/versions/getLatestGlobalVersion.ts deleted file mode 100644 index 128cb3fbfe..0000000000 --- a/src/versions/getLatestGlobalVersion.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Payload } from '..'; -import { Document } from '../types'; -import { TypeWithID } from '../collections/config/types'; -import { SanitizedGlobalConfig } from '../globals/config/types'; - -type Args = { - payload: Payload - config: SanitizedGlobalConfig - query: Record -} - -export const getLatestGlobalVersion = async ({ - payload, - config, - query, -}: Args): Promise => { - let version; - if (config.versions?.drafts) { - version = payload.versions[config.slug].findOne({}, {}, { - sort: { - updatedAt: 'desc', - }, - lean: true, - }); - } - const global = await payload.globals.Model.findOne(query).lean() as Document; - version = await version; - if (!version || version.updatedAt < global.updatedAt) { - return global; - } - return { - ...version.version, - updatedAt: version.updatedAt, - createdAt: version.createdAt, - }; -};