Files
payload/test/fields-relationship/collections/Relationship/index.ts
Jacob Fletcher 05e6f3326b test: addListFilter helper (#11026)
Adds a new `addListFilter` e2e helper. This will help to standardize
this common functionality across all tests that require filtering list
tables and help reduce the overall lines of code within each test file.
2025-02-06 16:17:27 -05:00

132 lines
3.1 KiB
TypeScript

import type { CollectionConfig, FilterOptionsProps } from 'payload'
import type { FieldsRelationship } from '../../payload-types.js'
import {
relationFalseFilterOptionSlug,
relationOneSlug,
relationRestrictedSlug,
relationTrueFilterOptionSlug,
relationTwoSlug,
relationWithTitleSlug,
slug,
} from '../../slugs.js'
export const Relationship: CollectionConfig = {
admin: {
defaultColumns: [
'id',
'relationship',
'relationshipRestricted',
'relationshipHasManyMultiple',
'relationshipWithTitle',
],
},
fields: [
{
name: 'relationship',
relationTo: relationOneSlug,
type: 'relationship',
},
{
name: 'relationshipHasMany',
hasMany: true,
relationTo: relationOneSlug,
type: 'relationship',
},
{
name: 'relationshipMultiple',
relationTo: [relationOneSlug, relationTwoSlug],
type: 'relationship',
},
{
name: 'relationshipHasManyMultiple',
hasMany: true,
relationTo: [relationOneSlug, relationTwoSlug],
type: 'relationship',
},
{
name: 'relationshipRestricted',
relationTo: relationRestrictedSlug,
type: 'relationship',
},
{
name: 'relationshipWithTitle',
relationTo: relationWithTitleSlug,
type: 'relationship',
},
{
name: 'relationshipFilteredByID',
label: 'Relationship Filtered By ID',
filterOptions: (args: FilterOptionsProps<FieldsRelationship>) => {
return {
id: {
equals: args.data.relationship,
},
}
},
relationTo: relationOneSlug,
type: 'relationship',
admin: {
description:
'This will filter the relationship options based on id, which is the same as the relationship field in this document',
},
},
{
name: 'relationshipFilteredAsync',
filterOptions: (args: FilterOptionsProps<FieldsRelationship>) => {
return {
id: {
equals: args.data.relationship,
},
}
},
relationTo: relationOneSlug,
type: 'relationship',
},
{
name: 'relationshipManyFiltered',
filterOptions: ({ relationTo, siblingData }) => {
if (relationTo === relationOneSlug) {
return { name: { equals: 'include' } }
}
if (relationTo === relationTrueFilterOptionSlug) {
return true
}
if (relationTo === relationFalseFilterOptionSlug) {
return false
}
if (siblingData.filter) {
return { name: { contains: siblingData.filter } }
}
return { and: [] }
},
hasMany: true,
relationTo: [
relationWithTitleSlug,
relationFalseFilterOptionSlug,
relationTrueFilterOptionSlug,
relationOneSlug,
],
type: 'relationship',
},
{
name: 'filter',
type: 'text',
},
{
name: 'relationshipReadOnly',
admin: {
readOnly: true,
},
relationTo: relationOneSlug,
type: 'relationship',
},
],
slug,
}