diff --git a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx index 7054f4ef4..5a544a9f3 100644 --- a/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaDescription/MetaDescriptionComponent.tsx @@ -58,15 +58,12 @@ export const MetaDescriptionComponent: React.FC = (props) const maxLength = maxLengthFromProps || maxLengthDefault const minLength = minLengthFromProps || minLengthDefault - const { - customComponents: { AfterInput, BeforeInput, Label }, - errorMessage, - setValue, - showError, - value, - }: FieldType = useField({ - path, - } as Options) + const { customComponents, errorMessage, setValue, showError, value }: FieldType = + useField({ + path, + } as Options) + + const { AfterInput, BeforeInput, Label } = customComponents ?? {} const regenerateDescription = useCallback(async () => { if (!hasGenerateDescriptionFn) { @@ -85,7 +82,7 @@ export const MetaDescriptionComponent: React.FC = (props) hasPublishPermission: docInfo.hasPublishPermission, hasSavePermission: docInfo.hasSavePermission, initialData: docInfo.initialData, - initialState: reduceToSerializableFields(docInfo.initialState), + initialState: reduceToSerializableFields(docInfo.initialState ?? {}), locale: typeof locale === 'object' ? locale?.code : locale, title: docInfo.title, } satisfies Omit< diff --git a/packages/plugin-seo/src/fields/MetaDescription/index.ts b/packages/plugin-seo/src/fields/MetaDescription/index.ts index da5652a0e..3cf2892e8 100644 --- a/packages/plugin-seo/src/fields/MetaDescription/index.ts +++ b/packages/plugin-seo/src/fields/MetaDescription/index.ts @@ -25,6 +25,6 @@ export const MetaDescriptionField: FieldFunction = ({ hasGenerateFn = false, ove }, }, localized: true, - ...((overrides as unknown as TextareaField) ?? {}), + ...(overrides ?? {}), } } diff --git a/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx b/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx index ace087a32..987c4a204 100644 --- a/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaImage/MetaImageComponent.tsx @@ -43,9 +43,9 @@ export const MetaImageComponent: React.FC = (props) => { } = useConfig() const field: FieldType = useField({ ...props, path } as Options) - const { - customComponents: { Error, Label }, - } = field + const { customComponents } = field + + const { Error, Label } = customComponents ?? {} const { t } = useTranslation() @@ -72,7 +72,7 @@ export const MetaImageComponent: React.FC = (props) => { hasPublishPermission: docInfo.hasPublishPermission, hasSavePermission: docInfo.hasSavePermission, initialData: docInfo.initialData, - initialState: reduceToSerializableFields(docInfo.initialState), + initialState: reduceToSerializableFields(docInfo.initialState ?? {}), locale: typeof locale === 'object' ? locale?.code : locale, title: docInfo.title, } satisfies Omit< diff --git a/packages/plugin-seo/src/fields/MetaImage/index.ts b/packages/plugin-seo/src/fields/MetaImage/index.ts index ae204e6a6..b709432ee 100644 --- a/packages/plugin-seo/src/fields/MetaImage/index.ts +++ b/packages/plugin-seo/src/fields/MetaImage/index.ts @@ -29,6 +29,6 @@ export const MetaImageField: FieldFunction = ({ hasGenerateFn = false, overrides label: 'Meta Image', localized: true, relationTo, - ...((overrides as unknown as UploadField) ?? {}), + ...((overrides ?? {}) as { hasMany: boolean } & Partial), } } diff --git a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx index bedc22f5e..e1496ca63 100644 --- a/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx +++ b/packages/plugin-seo/src/fields/MetaTitle/MetaTitleComponent.tsx @@ -75,7 +75,7 @@ export const MetaTitleComponent: React.FC = (props) => { hasPublishPermission: docInfo.hasPublishPermission, hasSavePermission: docInfo.hasSavePermission, initialData: docInfo.initialData, - initialState: reduceToSerializableFields(docInfo.initialState), + initialState: reduceToSerializableFields(docInfo.initialState ?? {}), locale: typeof locale === 'object' ? locale?.code : locale, title: docInfo.title, } satisfies Omit< diff --git a/packages/plugin-seo/src/fields/MetaTitle/index.ts b/packages/plugin-seo/src/fields/MetaTitle/index.ts index 254da0537..8e347e6d8 100644 --- a/packages/plugin-seo/src/fields/MetaTitle/index.ts +++ b/packages/plugin-seo/src/fields/MetaTitle/index.ts @@ -25,6 +25,6 @@ export const MetaTitleField: FieldFunction = ({ hasGenerateFn = false, overrides }, }, localized: true, - ...((overrides as unknown as TextField) ?? {}), + ...((overrides ?? {}) as { hasMany: boolean } & Partial), } } diff --git a/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx b/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx index 26c72e1de..80dc5fd4b 100644 --- a/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx +++ b/packages/plugin-seo/src/fields/Overview/OverviewComponent.tsx @@ -59,15 +59,6 @@ export const OverviewComponent: React.FC = ({ const minTitle = titleOverrides?.minLength || minTitleDefault const maxTitle = titleOverrides?.maxLength || maxTitleDefault - const resetAll = useCallback(() => { - const fields = getFields() - const fieldsWithoutMeta = fields - fieldsWithoutMeta['meta.title'].value = '' - fieldsWithoutMeta['meta.description'].value = '' - fieldsWithoutMeta['meta.image'].value = '' - // dispatchFields(fieldsWithoutMeta); - }, [getFields]) - useEffect(() => { if (typeof metaTitle === 'string') { setTitleIsValid(metaTitle.length >= minTitle && metaTitle.length <= maxTitle) diff --git a/packages/plugin-seo/src/fields/Overview/index.tsx b/packages/plugin-seo/src/fields/Overview/index.tsx index 6285f5c1d..f586f01e9 100644 --- a/packages/plugin-seo/src/fields/Overview/index.tsx +++ b/packages/plugin-seo/src/fields/Overview/index.tsx @@ -58,6 +58,6 @@ export const OverviewField: FieldFunction = ({ }, }, label: 'Overview', - ...((overrides as unknown as UIField) ?? {}), + ...(overrides ?? {}), } } diff --git a/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx b/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx index ec991a8e1..789e6dd42 100644 --- a/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx +++ b/packages/plugin-seo/src/fields/Preview/PreviewComponent.tsx @@ -67,7 +67,7 @@ export const PreviewComponent: React.FC = (props) => { hasPublishPermission: docInfo.hasPublishPermission, hasSavePermission: docInfo.hasSavePermission, initialData: docInfo.initialData, - initialState: reduceToSerializableFields(docInfo.initialState), + initialState: reduceToSerializableFields(docInfo.initialState ?? {}), locale: typeof locale === 'object' ? locale?.code : locale, title: docInfo.title, } satisfies Omit< diff --git a/packages/plugin-seo/src/fields/Preview/index.tsx b/packages/plugin-seo/src/fields/Preview/index.tsx index 9e7f76e81..0c52c9d7f 100644 --- a/packages/plugin-seo/src/fields/Preview/index.tsx +++ b/packages/plugin-seo/src/fields/Preview/index.tsx @@ -44,6 +44,6 @@ export const PreviewField: FieldFunction = ({ }, }, label: 'Preview', - ...((overrides as unknown as UIField) ?? {}), + ...(overrides ?? {}), } } diff --git a/packages/plugin-seo/src/index.tsx b/packages/plugin-seo/src/index.tsx index 8d46501c6..dc81ce03b 100644 --- a/packages/plugin-seo/src/index.tsx +++ b/packages/plugin-seo/src/index.tsx @@ -66,8 +66,8 @@ export const seoPlugin = if (pluginConfig?.tabbedUI) { // prevent issues with auth enabled collections having an email field that shouldn't be moved to the SEO tab const emailField = - (collection.auth || - !(typeof collection.auth === 'object' && collection.auth.disableLocalStrategy)) && + collection.auth && + !(typeof collection.auth === 'object' && collection.auth.disableLocalStrategy) && collection.fields?.find((field) => 'name' in field && field.name === 'email') const hasOnlyEmailField = collection.fields?.length === 1 && emailField @@ -137,21 +137,17 @@ export const seoPlugin = const data: Omit< Parameters[0], 'collectionConfig' | 'globalConfig' | 'req' - > = await req.json() + > = await req.json?.() - if (data) { - req.data = data - } + const reqData = data ?? req.data const result = pluginConfig.generateTitle ? await pluginConfig.generateTitle({ ...data, - collectionConfig: req.data.collectionSlug - ? config.collections?.find((c) => c.slug === req.data.collectionSlug) - : null, - globalConfig: req.data.globalSlug - ? config.globals?.find((g) => g.slug === req.data.globalSlug) - : null, + collectionConfig: config.collections?.find( + (c) => c.slug === reqData.collectionSlug, + ), + globalConfig: config.globals?.find((g) => g.slug === reqData.globalSlug), req, } satisfies Parameters[0]) : '' @@ -165,21 +161,17 @@ export const seoPlugin = const data: Omit< Parameters[0], 'collectionConfig' | 'globalConfig' | 'req' - > = await req.json() + > = await req.json?.() - if (data) { - req.data = data - } + const reqData = data ?? req.data const result = pluginConfig.generateDescription ? await pluginConfig.generateDescription({ ...data, - collectionConfig: req.data.collectionSlug - ? config.collections?.find((c) => c.slug === req.data.collectionSlug) - : null, - globalConfig: req.data.globalSlug - ? config.globals?.find((g) => g.slug === req.data.globalSlug) - : null, + collectionConfig: config.collections?.find( + (c) => c.slug === reqData.collectionSlug, + ), + globalConfig: config.globals?.find((g) => g.slug === reqData.globalSlug), req, } satisfies Parameters[0]) : '' @@ -193,21 +185,17 @@ export const seoPlugin = const data: Omit< Parameters[0], 'collectionConfig' | 'globalConfig' | 'req' - > = await req.json() + > = await req.json?.() - if (data) { - req.data = data - } + const reqData = data ?? req.data const result = pluginConfig.generateURL ? await pluginConfig.generateURL({ ...data, - collectionConfig: req.data.collectionSlug - ? config.collections?.find((c) => c.slug === req.data.collectionSlug) - : null, - globalConfig: req.data.globalSlug - ? config.globals?.find((g) => g.slug === req.data.globalSlug) - : null, + collectionConfig: config.collections?.find( + (c) => c.slug === reqData.collectionSlug, + ), + globalConfig: config.globals?.find((g) => g.slug === reqData.globalSlug), req, } satisfies Parameters[0]) : '' @@ -221,25 +209,21 @@ export const seoPlugin = const data: Omit< Parameters[0], 'collectionConfig' | 'globalConfig' | 'req' - > = await req.json() + > = await req.json?.() - if (data) { - req.data = data - } + const reqData = data ?? req.data const result = pluginConfig.generateImage ? await pluginConfig.generateImage({ ...data, - collectionConfig: req.data.collectionSlug - ? config.collections?.find((c) => c.slug === req.data.collectionSlug) - : null, - globalConfig: req.data.globalSlug - ? config.globals?.find((g) => g.slug === req.data.globalSlug) - : null, + collectionConfig: config.collections?.find( + (c) => c.slug === reqData.collectionSlug, + ), + globalConfig: config.globals?.find((g) => g.slug === reqData.globalSlug), req, - } as Parameters[0]) + } satisfies Parameters[0]) : '' - return new Response(result, { status: 200 }) + return new Response(JSON.stringify({ result }), { status: 200 }) }, method: 'post', path: '/plugin-seo/generate-image', @@ -258,7 +242,7 @@ export const seoPlugin = tabs: [ // append a new tab onto the end of the tabs array, if there is one at the first index // if needed, create a new `Content` tab in the first index for this global's base fields - ...(global?.fields?.[0].type === 'tabs' && global?.fields?.[0].tabs + ...(global?.fields?.[0]?.type === 'tabs' && global?.fields?.[0].tabs ? global.fields[0].tabs : [ { @@ -278,7 +262,7 @@ export const seoPlugin = ...global, fields: [ ...seoTabs, - ...(global?.fields?.[0].type === 'tabs' ? global.fields.slice(1) : []), + ...(global?.fields?.[0]?.type === 'tabs' ? global.fields.slice(1) : []), ], } } @@ -293,7 +277,7 @@ export const seoPlugin = }) || [], i18n: { ...config.i18n, - translations: deepMergeSimple(translations, config.i18n?.translations), + translations: deepMergeSimple(translations, config.i18n?.translations ?? {}), }, } } diff --git a/packages/plugin-seo/tsconfig.json b/packages/plugin-seo/tsconfig.json index 1d4d43b8f..fb2118286 100644 --- a/packages/plugin-seo/tsconfig.json +++ b/packages/plugin-seo/tsconfig.json @@ -1,8 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - /* TODO: remove the following lines */ - "strict": false, - }, "references": [{ "path": "../payload" }, { "path": "../ui" }, { "path": "../next" }] }