feat: add join field config where property (#8973)
### What? Makes it possible to filter join documents using a `where` added directly in the config. ### Why? It makes the join field more powerful for adding contextual meaning to the documents being returned. For example, maybe you have a `requiresAction` field that you set and you can have a join that automatically filters the documents to those that need attention. ### How? In the database adapter, we merge the requested `where` to the `where` defined on the field. On the frontend the results are filtered using the `filterOptions` property in the component. Fixes https://github.com/payloadcms/payload/discussions/8936 https://github.com/payloadcms/payload/discussions/8937 --------- Co-authored-by: Sasha <64744993+r1tsuu@users.noreply.github.com>
This commit is contained in:
@@ -9,7 +9,13 @@ import { Singular } from './collections/Singular.js'
|
||||
import { Uploads } from './collections/Uploads.js'
|
||||
import { Versions } from './collections/Versions.js'
|
||||
import { seed } from './seed.js'
|
||||
import { localizedCategoriesSlug, localizedPostsSlug } from './shared.js'
|
||||
import {
|
||||
localizedCategoriesSlug,
|
||||
localizedPostsSlug,
|
||||
postsSlug,
|
||||
restrictedCategoriesSlug,
|
||||
restrictedPostsSlug,
|
||||
} from './shared.js'
|
||||
|
||||
const filename = fileURLToPath(import.meta.url)
|
||||
const dirname = path.dirname(filename)
|
||||
@@ -60,6 +66,53 @@ export default buildConfigWithDefaults({
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
slug: restrictedCategoriesSlug,
|
||||
admin: {
|
||||
useAsTitle: 'name',
|
||||
},
|
||||
fields: [
|
||||
{
|
||||
name: 'name',
|
||||
type: 'text',
|
||||
},
|
||||
{
|
||||
// this field is misconfigured to have `where` constraint using a restricted field
|
||||
name: 'restrictedPosts',
|
||||
type: 'join',
|
||||
collection: postsSlug,
|
||||
on: 'category',
|
||||
where: {
|
||||
restrictedField: { equals: 'restricted' },
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
slug: restrictedPostsSlug,
|
||||
admin: {
|
||||
useAsTitle: 'title',
|
||||
},
|
||||
fields: [
|
||||
{
|
||||
name: 'title',
|
||||
type: 'text',
|
||||
},
|
||||
{
|
||||
name: 'restrictedField',
|
||||
type: 'text',
|
||||
access: {
|
||||
read: () => false,
|
||||
update: () => false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'category',
|
||||
type: 'relationship',
|
||||
relationTo: restrictedCategoriesSlug,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
localization: {
|
||||
locales: ['en', 'es'],
|
||||
|
||||
Reference in New Issue
Block a user