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.
132 lines
3.1 KiB
TypeScript
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,
|
|
}
|