diff --git a/docs/plugins/seo.mdx b/docs/plugins/seo.mdx index 7e90132ef0..1a00a689a1 100644 --- a/docs/plugins/seo.mdx +++ b/docs/plugins/seo.mdx @@ -119,7 +119,7 @@ A function that allows you to return any meta title, including from document's c { // ... seoPlugin({ - generateTitle: ({ ...docInfo, doc, locale }) => `Website.com — ${doc?.title}`, + generateTitle: ({ ...docInfo, doc, locale, req }) => `Website.com — ${doc?.title}`, }) } ``` @@ -133,7 +133,7 @@ A function that allows you to return any meta description, including from docume { // ... seoPlugin({ - generateDescription: ({ ...docInfo, doc, locale }) => doc?.excerpt, + generateDescription: ({ ...docInfo, doc, locale, req }) => doc?.excerpt, }) } ``` @@ -147,7 +147,7 @@ A function that allows you to return any meta image, including from document's c { // ... seoPlugin({ - generateImage: ({ ...docInfo, doc, locale }) => doc?.featuredImage, + generateImage: ({ ...docInfo, doc, locale, req }) => doc?.featuredImage, }) } ``` @@ -161,7 +161,7 @@ A function called by the search preview component to display the actual URL of y { // ... seoPlugin({ - generateURL: ({ ...docInfo, doc, locale }) => + generateURL: ({ ...docInfo, doc, locale, req }) => `https://yoursite.com/${collection?.slug}/${doc?.slug}`, }) } diff --git a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx index 2fd2818000..917d6bb617 100644 --- a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx @@ -61,7 +61,7 @@ export const MetaDescriptionComponent: React.FC = (props) ...docInfo, doc: { ...getData() }, locale: typeof locale === 'object' ? locale?.code : locale, - } satisfies Parameters[0]), + } satisfies Omit[0], 'req'>), credentials: 'include', headers: { 'Content-Type': 'application/json', diff --git a/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx b/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx index 46432cab9d..ee78c33995 100644 --- a/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx @@ -57,7 +57,7 @@ export const MetaImageComponent: React.FC = (props) => { ...docInfo, doc: { ...getData() }, locale: typeof locale === 'object' ? locale?.code : locale, - } satisfies Parameters[0]), + } satisfies Omit[0], 'req'>), credentials: 'include', headers: { 'Content-Type': 'application/json', diff --git a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx index eddc950900..795baa59c8 100644 --- a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx @@ -62,7 +62,7 @@ export const MetaTitleComponent: React.FC = (props) => { ...docInfo, doc: { ...getData() }, locale: typeof locale === 'object' ? locale?.code : locale, - } satisfies Parameters[0]), + } satisfies Omit[0], 'req'>), credentials: 'include', headers: { 'Content-Type': 'application/json', diff --git a/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx b/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx index 078b369052..b6d195757e 100644 --- a/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx +++ b/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx @@ -49,7 +49,7 @@ export const PreviewComponent: React.FC = ({ ...docInfo, doc: { ...getData() }, locale: typeof locale === 'object' ? locale?.code : locale, - } satisfies Parameters[0]), + } satisfies Omit[0], 'req'>), credentials: 'include', headers: { 'Content-Type': 'application/json', diff --git a/packages/plugin-seo/src/index.tsx b/packages/plugin-seo/src/index.tsx index b2bf4d2982..a957c9af61 100644 --- a/packages/plugin-seo/src/index.tsx +++ b/packages/plugin-seo/src/index.tsx @@ -134,11 +134,12 @@ export const seoPlugin = { handler: async (req) => { await addDataAndFileToRequest(req) - req.t + const result = pluginConfig.generateTitle - ? await pluginConfig.generateTitle( - req.data as unknown as Parameters[0], - ) + ? await pluginConfig.generateTitle({ + ...req.data, + req, + } as unknown as Parameters[0]) : '' return new Response(JSON.stringify({ result }), { status: 200 }) }, @@ -148,10 +149,12 @@ export const seoPlugin = { handler: async (req) => { await addDataAndFileToRequest(req) + const result = pluginConfig.generateDescription - ? await pluginConfig.generateDescription( - req.data as unknown as Parameters[0], - ) + ? await pluginConfig.generateDescription({ + ...req.data, + req, + } as unknown as Parameters[0]) : '' return new Response(JSON.stringify({ result }), { status: 200 }) }, @@ -161,8 +164,12 @@ export const seoPlugin = { handler: async (req) => { await addDataAndFileToRequest(req) + const result = pluginConfig.generateURL - ? await pluginConfig.generateURL(req.data as unknown as Parameters[0]) + ? await pluginConfig.generateURL({ + ...req.data, + req, + } as unknown as Parameters[0]) : '' return new Response(JSON.stringify({ result }), { status: 200 }) }, @@ -172,10 +179,12 @@ export const seoPlugin = { handler: async (req) => { await addDataAndFileToRequest(req) + const result = pluginConfig.generateImage - ? await pluginConfig.generateImage( - req.data as unknown as Parameters[0], - ) + ? await pluginConfig.generateImage({ + ...req.data, + req, + } as unknown as Parameters[0]) : '' return new Response(result, { status: 200 }) }, diff --git a/packages/plugin-seo/src/types.ts b/packages/plugin-seo/src/types.ts index 932e811ddb..ed0078bead 100644 --- a/packages/plugin-seo/src/types.ts +++ b/packages/plugin-seo/src/types.ts @@ -1,23 +1,24 @@ import type { DocumentInfoContext } from '@payloadcms/ui' -import type { Field, TextField, TextareaField, UploadField } from 'payload' +import type { Field, PayloadRequest, TextField, TextareaField, UploadField } from 'payload' export type GenerateTitle = ( - args: { doc: T; locale?: string } & DocumentInfoContext, + args: { doc: T; locale?: string; req: PayloadRequest } & DocumentInfoContext, ) => Promise | string export type GenerateDescription = ( args: { doc: T locale?: string + req: PayloadRequest } & DocumentInfoContext, ) => Promise | string export type GenerateImage = ( - args: { doc: T; locale?: string } & DocumentInfoContext, + args: { doc: T; locale?: string; req: PayloadRequest } & DocumentInfoContext, ) => Promise | string export type GenerateURL = ( - args: { doc: T; locale?: string } & DocumentInfoContext, + args: { doc: T; locale?: string; req: PayloadRequest } & DocumentInfoContext, ) => Promise | string export type SEOPluginConfig = {