/** * Wraps each SEO-enabled collection's fields into a tabbed UI: a "Content" tab * holding the collection's own fields, and an "SEO" tab holding the `meta` * group that @payloadcms/plugin-seo added. * * This replaces plugin-seo's own `tabbedUI`, which merges tabs by inspecting * the first field and breaks when other plugins/fields (roles, slug) already * sit in the collection — producing an empty SEO tab. Running this AFTER * plugin-seo (so `meta` already exists) and after other field injections lets * us build the tabs deterministically. * * If a collection's first field is already a tabs field, the SEO tab is * appended to it instead of creating a new wrapper. */ export function injectSeoTabs(config, seo) { return { ...config, collections: (config.collections ?? []).map((collection)=>{ if (!seo.collections.includes(collection.slug)) { return collection; } const fields = collection.fields ?? []; // Separate the meta group (added by plugin-seo) from the rest. const metaField = fields.find((f)=>'name' in f && f.name === 'meta'); const otherFields = fields.filter((f)=>!('name' in f && f.name === 'meta')); // Nothing to do if plugin-seo hasn't added meta (shouldn't happen). if (!metaField) { return collection; } // If the collection already leads with a tabs field, append an SEO tab. const firstField = otherFields[0]; if (firstField && firstField.type === 'tabs') { const existingTabs = firstField; const withSeoTab = { ...existingTabs, tabs: [ ...existingTabs.tabs, { fields: [ metaField ], label: 'SEO' } ] }; return { ...collection, fields: [ withSeoTab, ...otherFields.slice(1) ] }; } // Otherwise wrap everything: Content tab + SEO tab. const tabs = { type: 'tabs', tabs: [ { fields: otherFields, label: collection.labels?.singular?.toString() || 'Content' }, { fields: [ metaField ], label: 'SEO' } ] }; return { ...collection, fields: [ tabs ] }; }) }; } //# sourceMappingURL=injectSeoTabs.js.map //# sourceMappingURL=injectSeoTabs.js.map