Files
payload/test/fields/collections/Blocks/index.ts
Dan Ribbens 6e9ae65374 fix(db-postgres): querying nested blocks fields (#4404)
Co-authored-by: Jessica Chowdhury <jessica@trbl.design>
2023-12-07 09:18:48 -05:00

280 lines
5.9 KiB
TypeScript

import type { CollectionConfig } from '../../../../packages/payload/src/collections/config/types'
import type { BlockField } from '../../../../packages/payload/src/fields/config/types'
import { blockFieldsSlug, textFieldsSlug } from '../../slugs'
import { AddCustomBlocks } from './components/AddCustomBlocks'
import { getBlocksFieldSeedData } from './shared'
export const getBlocksField = (prefix?: string): BlockField => ({
name: 'blocks',
blocks: [
{
fields: [
{
name: 'text',
required: true,
type: 'text',
},
{
name: 'richText',
type: 'richText',
},
],
slug: prefix ? `${prefix}Content` : 'content',
},
{
fields: [
{
name: 'number',
required: true,
type: 'number',
},
],
slug: prefix ? `${prefix}Number` : 'number',
},
{
fields: [
{
fields: [
{
name: 'subBlocks',
blocks: [
{
fields: [
{
name: 'text',
required: true,
type: 'text',
},
],
slug: 'text',
},
{
fields: [
{
name: 'number',
required: true,
type: 'number',
},
],
slug: 'number',
},
],
type: 'blocks',
},
],
label: 'Collapsible within Block',
type: 'collapsible',
},
],
slug: prefix ? `${prefix}SubBlocks` : 'subBlocks',
},
{
fields: [
{
tabs: [
{
fields: [
{
fields: [
{
// collapsible
name: 'textInCollapsible',
type: 'text',
},
],
label: 'Collapsible within Block',
type: 'collapsible',
},
{
fields: [
{
// collapsible
name: 'textInRow',
type: 'text',
},
],
type: 'row',
},
],
label: 'Tab with Collapsible',
},
],
type: 'tabs',
},
],
slug: prefix ? `${prefix}Tabs` : 'tabs',
},
],
defaultValue: getBlocksFieldSeedData(prefix),
required: true,
type: 'blocks',
})
const BlockFields: CollectionConfig = {
fields: [
getBlocksField(),
{
...getBlocksField('localized'),
name: 'collapsedByDefaultBlocks',
admin: {
initCollapsed: true,
},
localized: true,
},
{
...getBlocksField('localized'),
name: 'localizedBlocks',
localized: true,
},
{
name: 'i18nBlocks',
blocks: [
{
fields: [
{
name: 'text',
type: 'text',
},
],
graphQL: {
singularName: 'I18nText',
},
labels: {
plural: {
en: 'Texts en',
es: 'Texts es',
},
singular: {
en: 'Text en',
es: 'Text es',
},
},
slug: 'text',
},
],
label: {
en: 'Block en',
es: 'Block es',
},
labels: {
plural: {
en: 'Blocks en',
es: 'Blocks es',
},
singular: {
en: 'Block en',
es: 'Block es',
},
},
type: 'blocks',
},
{
name: 'blocksWithSimilarConfigs',
blocks: [
{
fields: [
{
name: 'items',
fields: [
{
name: 'title',
required: true,
type: 'text',
},
],
type: 'array',
},
],
slug: 'block-a',
},
{
fields: [
{
name: 'items',
fields: [
{
name: 'title2',
required: true,
type: 'text',
},
],
type: 'array',
},
],
slug: 'block-b',
},
],
type: 'blocks',
},
{
name: 'blocksWithMinRows',
blocks: [
{
fields: [
{
name: 'blockTitle',
type: 'text',
},
],
slug: 'block',
},
],
minRows: 2,
type: 'blocks',
},
{
name: 'customBlocks',
blocks: [
{
fields: [
{
name: 'block1Title',
type: 'text',
},
],
slug: 'block-1',
},
{
fields: [
{
name: 'block2Title',
type: 'text',
},
],
slug: 'block-2',
},
],
type: 'blocks',
},
{
name: 'relationshipBlocks',
blocks: [
{
fields: [
{
name: 'relationship',
relationTo: textFieldsSlug,
type: 'relationship',
},
],
slug: 'relationships',
},
],
type: 'blocks',
},
{
name: 'ui',
admin: {
components: {
Field: AddCustomBlocks,
},
},
type: 'ui',
},
],
slug: blockFieldsSlug,
}
export default BlockFields