From d4ac8a802cdf170d55c94dbcedc25e0c3767fd9c Mon Sep 17 00:00:00 2001 From: Dan Ribbens Date: Mon, 20 Jan 2025 22:55:52 -0500 Subject: [PATCH] feat: extend listSearchableFields relationship fields to include subfields --- .../payload/src/fields/config/sanitize.ts | 23 +++++++++++++++++++ test/admin/collections/Posts.ts | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/payload/src/fields/config/sanitize.ts b/packages/payload/src/fields/config/sanitize.ts index 7d10ff7c03..d257204844 100644 --- a/packages/payload/src/fields/config/sanitize.ts +++ b/packages/payload/src/fields/config/sanitize.ts @@ -50,6 +50,7 @@ type Args = { } export const sanitizeFields = async ({ + collectionConfig, config, existingFieldNames = new Set(), fields, @@ -114,6 +115,28 @@ export const sanitizeFields = async ({ throw new InvalidFieldRelationship(field, relationship) } }) + + if (Array.isArray(collectionConfig?.admin?.listSearchableFields)) { + const listSearchableIndex = collectionConfig.admin.listSearchableFields?.indexOf( + `${joinPath ? joinPath + '.' : ''}${field.name}`, + ) + if (listSearchableIndex !== -1 && typeof field.relationTo === 'string') { + const relatedCollection = config.collections.find( + (collection) => collection.slug === field.relationTo, + ) + const searchableRelationFields = relatedCollection?.admin?.listSearchableFields || [ + relatedCollection?.admin?.useAsTitle ? relatedCollection.admin.useAsTitle : 'id', + ] + collectionConfig.admin.listSearchableFields.splice( + listSearchableIndex, + 1, + ...searchableRelationFields.map( + (relationFieldName) => + `${joinPath ? joinPath + '.' : ''}${field.name}.${relationFieldName}`, + ), + ) + } + } } if (field.min && !field.minRows) { diff --git a/test/admin/collections/Posts.ts b/test/admin/collections/Posts.ts index d83dd93775..691a8532f7 100644 --- a/test/admin/collections/Posts.ts +++ b/test/admin/collections/Posts.ts @@ -11,7 +11,7 @@ export const Posts: CollectionConfig = { defaultColumns: ['id', 'number', 'title', 'description', 'demoUIField'], description: 'This is a custom collection description.', group: 'One', - listSearchableFields: ['id', 'title', 'description', 'number'], + listSearchableFields: ['id', 'title', 'description', 'number', 'relationship', 'upload'], components: { beforeListTable: [ '/components/ResetColumns/index.js#ResetDefaultColumnsButton',