Back to Payload

Collapsible Field

docs/fields/collapsible.mdx

3.84.13.1 KB
Original Source

The Collapsible Field is presentational-only and only affects the Admin Panel. By using it, you can place fields within a nice layout component that can be collapsed / expanded.

<LightDarkImage srcLight="https://payloadcms.com/images/docs/fields/collapsible.png" srcDark="https://payloadcms.com/images/docs/fields/collapsible-dark.png" alt="Shows a Collapsible field in the Payload Admin Panel" caption="Admin Panel screenshot of a Collapsible field" />

To add a Collapsible Field, set the type to collapsible in your Field Config:

ts
import type { Field } from 'payload'

export const MyCollapsibleField: Field = {
  // ...
  // highlight-start
  type: 'collapsible',
  fields: [
    // ...
  ],
  // highlight-end
}

Config Options

OptionDescription
label *A label to render within the header of the collapsible component. This can be a string, function or react component. Function/components receive ({ data, path }) as args.
fields *Array of field types to nest within this Collapsible.
adminAdmin-specific configuration. More details.
customExtension point for adding custom data (e.g. for plugins)

* An asterisk denotes that a property is required.

Admin Options

To customize the appearance and behavior of the Collapsible Field in the Admin Panel, you can use the admin option:

ts
import type { Field } from 'payload'

export const MyCollapsibleField: Field = {
  // ...
  admin: {
    // highlight-line
    // ...
  },
}

The Collapsible Field inherits all of the default admin options from the base Field Admin Config, plus the following additional options:

OptionDescription
initCollapsedSet the initial collapsed state

Example

ts
import type { CollectionConfig } from 'payload'

export const ExampleCollection: CollectionConfig = {
  slug: 'example-collection',
  fields: [
    {
      label: ({ data }) => data?.title || 'Untitled',
      type: 'collapsible', // required
      fields: [
        // required
        {
          name: 'title',
          type: 'text',
          required: true,
        },
        {
          name: 'someTextField',
          type: 'text',
          required: true,
        },
      ],
    },
  ],
}