Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
71 lines
2.2 KiB
Plaintext
71 lines
2.2 KiB
Plaintext
import { extractJWT } from 'payload';
|
|
/**
|
|
* Multi-level check to determine whether live preview is enabled on a collection or global.
|
|
* For example, live preview can be enabled at both the root config level, or on the entity's config.
|
|
* If a collectionConfig/globalConfig is provided, checks if it is enabled at the root level,
|
|
* or on the entity's own config.
|
|
*/
|
|
export const isPreviewEnabled = ({
|
|
collectionConfig,
|
|
globalConfig
|
|
}) => {
|
|
if (globalConfig) {
|
|
return Boolean(globalConfig.admin?.preview);
|
|
}
|
|
if (collectionConfig) {
|
|
return Boolean(collectionConfig.admin?.preview);
|
|
}
|
|
};
|
|
/**
|
|
* 1. Looks up the relevant live preview config, which could have been enabled:
|
|
* a. At the root level, e.g. `collections: ['posts']`
|
|
* b. On the collection or global config, e.g. `admin: { livePreview: { ... } }`
|
|
* 2. Determines if live preview is enabled, and if not, early returns.
|
|
* 3. Merges the config with the root config, if necessary.
|
|
* 4. Executes the `url` function, if necessary.
|
|
*
|
|
* Notice: internal function only. Subject to change at any time. Use at your own risk.
|
|
*/
|
|
export const handlePreview = async ({
|
|
collectionSlug,
|
|
config,
|
|
data,
|
|
globalSlug,
|
|
operation,
|
|
req
|
|
}) => {
|
|
const collectionConfig = collectionSlug ? req.payload.collections[collectionSlug]?.config : undefined;
|
|
const globalConfig = globalSlug ? config.globals.find(g => g.slug === globalSlug) : undefined;
|
|
const enabled = isPreviewEnabled({
|
|
collectionConfig,
|
|
globalConfig
|
|
});
|
|
if (!enabled) {
|
|
return {};
|
|
}
|
|
const generatePreviewURL = collectionConfig?.admin?.preview || globalConfig?.admin?.preview;
|
|
const token = extractJWT(req);
|
|
let previewURL;
|
|
if (typeof generatePreviewURL === 'function' && operation !== 'create') {
|
|
try {
|
|
const result = await generatePreviewURL(data, {
|
|
locale: req.locale,
|
|
req,
|
|
token
|
|
});
|
|
if (typeof result === 'string') {
|
|
previewURL = result;
|
|
}
|
|
} catch (err) {
|
|
req.payload.logger.error({
|
|
err,
|
|
msg: `There was an error executing the live preview URL function for ${collectionSlug || globalSlug}`
|
|
});
|
|
}
|
|
}
|
|
return {
|
|
isPreviewEnabled: enabled,
|
|
previewURL
|
|
};
|
|
};
|
|
//# sourceMappingURL=handlePreview.js.map |