UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

150 lines (149 loc) 5.3 kB
// @ts-strict-ignore import executeAccess from '../../auth/executeAccess.js'; import { NotFound } from '../../errors/index.js'; import { afterChange } from '../../fields/hooks/afterChange/index.js'; import { afterRead } from '../../fields/hooks/afterRead/index.js'; import { commitTransaction } from '../../utilities/commitTransaction.js'; import { initTransaction } from '../../utilities/initTransaction.js'; import { killTransaction } from '../../utilities/killTransaction.js'; export const restoreVersionOperation = async (args)=>{ const { id, depth, draft, globalConfig, overrideAccess, populate, req: { fallbackLocale, locale, payload }, req, showHiddenFields } = args; try { const shouldCommit = await initTransaction(req); // ///////////////////////////////////// // Access // ///////////////////////////////////// if (!overrideAccess) { await executeAccess({ req }, globalConfig.access.update); } // ///////////////////////////////////// // Retrieve original raw version // ///////////////////////////////////// const { docs: versionDocs } = await payload.db.findGlobalVersions({ global: globalConfig.slug, limit: 1, req, where: { id: { equals: id } } }); if (!versionDocs || versionDocs.length === 0) { throw new NotFound(req.t); } const rawVersion = versionDocs[0]; // Patch globalType onto version doc rawVersion.version.globalType = globalConfig.slug; // Overwrite draft status if draft is true if (draft) { rawVersion.version._status = 'draft'; } // ///////////////////////////////////// // fetch previousDoc // ///////////////////////////////////// const previousDoc = await payload.findGlobal({ slug: globalConfig.slug, depth, req }); // ///////////////////////////////////// // Update global // ///////////////////////////////////// const global = await payload.db.findGlobal({ slug: globalConfig.slug, req }); let result = rawVersion.version; if (global) { result = await payload.db.updateGlobal({ slug: globalConfig.slug, data: result, req }); const now = new Date().toISOString(); result = await payload.db.createGlobalVersion({ autosave: false, createdAt: result.createdAt ? new Date(result.createdAt).toISOString() : now, globalSlug: globalConfig.slug, parent: id, req, updatedAt: draft ? now : new Date(result.updatedAt).toISOString(), versionData: result }); } else { result = await payload.db.createGlobal({ slug: globalConfig.slug, data: result, req }); } // ///////////////////////////////////// // afterRead - Fields // ///////////////////////////////////// result = await afterRead({ collection: null, context: req.context, depth, doc: result, draft: undefined, fallbackLocale, global: globalConfig, locale, overrideAccess, populate, req, showHiddenFields }); // ///////////////////////////////////// // afterRead - Global // ///////////////////////////////////// if (globalConfig.hooks?.afterRead?.length) { for (const hook of globalConfig.hooks.afterRead){ result = await hook({ context: req.context, doc: result, global: globalConfig, req }) || result; } } // ///////////////////////////////////// // afterChange - Fields // ///////////////////////////////////// result = await afterChange({ collection: null, context: req.context, data: result, doc: result, global: globalConfig, operation: 'update', previousDoc, req }); // ///////////////////////////////////// // afterChange - Global // ///////////////////////////////////// if (globalConfig.hooks?.afterChange?.length) { for (const hook of globalConfig.hooks.afterChange){ result = await hook({ context: req.context, doc: result, global: globalConfig, previousDoc, req }) || result; } } if (shouldCommit) { await commitTransaction(req); } return result; } catch (error) { await killTransaction(req); throw error; } }; //# sourceMappingURL=restoreVersion.js.map