diff --git a/src/admin/components/forms/field-types/Relationship/GetFilterOptions/index.tsx b/src/admin/components/forms/field-types/Relationship/GetFilterOptions/index.tsx index 7527f36a86..568c8821b6 100644 --- a/src/admin/components/forms/field-types/Relationship/GetFilterOptions/index.tsx +++ b/src/admin/components/forms/field-types/Relationship/GetFilterOptions/index.tsx @@ -3,9 +3,11 @@ import equal from 'deep-equal'; import { FilterOptions } from '../../../../../../fields/config/types'; import { useAuth } from '../../../../utilities/Auth'; import { useDocumentInfo } from '../../../../utilities/DocumentInfo'; -import { useWatchForm } from '../../../Form/context'; +import { useAllFormFields } from '../../../Form/context'; import { getFilterOptionsQuery } from '../../getFilterOptionsQuery'; import { FilterOptionsResult } from '../types'; +import reduceFieldsToValues from '../../../Form/reduceFieldsToValues'; +import getSiblingData from '../../../Form/getSiblingData'; type Args = { filterOptions: FilterOptions @@ -22,13 +24,13 @@ export const GetFilterOptions = ({ relationTo, path, }: Args): null => { - const { getSiblingData, getData } = useWatchForm(); + const [fields] = useAllFormFields(); const { id } = useDocumentInfo(); const { user } = useAuth(); useEffect(() => { - const data = getData(); - const siblingData = getSiblingData(path); + const data = reduceFieldsToValues(fields); + const siblingData = getSiblingData(fields, path); const newFilterOptionsResult = getFilterOptionsQuery(filterOptions, { id, @@ -42,8 +44,7 @@ export const GetFilterOptions = ({ setFilterOptionsResult(newFilterOptionsResult); } }, [ - getData, - getSiblingData, + fields, filterOptions, id, relationTo, diff --git a/test/fields-relationship/config.ts b/test/fields-relationship/config.ts index 1ad43455eb..0d0fc5466b 100644 --- a/test/fields-relationship/config.ts +++ b/test/fields-relationship/config.ts @@ -2,6 +2,7 @@ import type { CollectionConfig } from '../../src/collections/config/types'; import { buildConfig } from '../buildConfig'; import { devUser } from '../credentials'; import { mapAsync } from '../../src/utilities/mapAsync'; +import { FilterOptionsProps } from '../../src/fields/config/types'; export const slug = 'fields-relationship'; @@ -83,6 +84,18 @@ export default buildConfig({ name: 'relationshipWithTitle', relationTo: relationWithTitleSlug, }, + { + type: 'relationship', + name: 'relationshipFiltered', + relationTo: relationOneSlug, + filterOptions: (args: FilterOptionsProps) => { + return ({ + id: { + equals: args.data.relationship, + }, + }) + } + }, ], }, { @@ -127,7 +140,7 @@ export default buildConfig({ }, }); - const relationOneIDs = []; + const relationOneIDs: string[] = []; await mapAsync([...Array(11)], async () => { const doc = await payload.create({ collection: relationOneSlug, @@ -138,7 +151,7 @@ export default buildConfig({ relationOneIDs.push(doc.id); }); - const relationTwoIDs = []; + const relationTwoIDs: string[] = []; await mapAsync([...Array(11)], async () => { const doc = await payload.create({ collection: relationTwoSlug, @@ -156,7 +169,7 @@ export default buildConfig({ name: 'relation-restricted', }, }); - const relationsWithTitle = []; + const relationsWithTitle: string[] = []; await mapAsync(['relation-title', 'word boundary search'], async (title) => { const { id } = await payload.create({ collection: relationWithTitleSlug,