101 lines
4.8 KiB
Plaintext
101 lines
4.8 KiB
Plaintext
---
|
|
title: Tabs Field
|
|
label: Tabs
|
|
order: 170
|
|
desc: The Tabs field is a great way to organize complex editing experiences into specific tab-based areas.
|
|
keywords: tabs, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, nextjs
|
|
---
|
|
|
|
The Tabs Field is presentational-only and only affects the [Admin Panel](../admin/overview) (unless a tab is named). By using it, you can place fields within a nice layout component that separates certain sub-fields by a tabbed interface.
|
|
|
|
<LightDarkImage
|
|
srcLight="https://payloadcms.com/images/docs/fields/tabs.png"
|
|
srcDark="https://payloadcms.com/images/docs/fields/tabs-dark.png"
|
|
alt="Shows a tabs field used to separate Hero and Page layout in the Payload Admin Panel"
|
|
caption="Tabs field type used to separate Hero fields from Page Layout"
|
|
/>
|
|
|
|
To add a Tabs Field, set the `type` to `tabs` in your [Field Config](./overview):
|
|
|
|
```ts
|
|
import type { Field } from 'payload'
|
|
|
|
export const MyTabsField: Field = {
|
|
// ...
|
|
// highlight-start
|
|
type: 'tabs',
|
|
tabs: [
|
|
// ...
|
|
]
|
|
// highlight-end
|
|
}
|
|
```
|
|
|
|
## Config Options
|
|
|
|
| Option | Description |
|
|
| ------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
| **`tabs`** * | Array of tabs to render within this Tabs field. |
|
|
| **`admin`** | Admin-specific configuration. [More details](../admin/fields#admin-options). |
|
|
| **`custom`** | Extension point for adding custom data (e.g. for plugins) |
|
|
|
|
### Tab-specific Config
|
|
|
|
Each tab must have either a `name` or `label` and the required `fields` array. You can also optionally pass a `description` to render within each individual tab.
|
|
|
|
| Option | Description |
|
|
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
| **`name`** | Groups field data into an object when stored and retrieved from the database. [More](/docs/fields/overview#field-names) |
|
|
| **`label`** | The label to render on the tab itself. Required when name is undefined, defaults to name converted to words. |
|
|
| **`fields`** * | The fields to render within this tab. |
|
|
| **`description`** | Optionally render a description within this tab to describe the contents of the tab itself. |
|
|
| **`interfaceName`** | Create a top level, reusable [Typescript interface](/docs/typescript/generating-types#custom-field-interfaces) & [GraphQL type](/docs/graphql/graphql-schema#custom-field-schemas). (`name` must be present) |
|
|
| **`virtual`** | Provide `true` to disable field in the database (`name` must be present). See [Virtual Fields](https://payloadcms.com/blog/learn-how-virtual-fields-can-help-solve-common-cms-challenges) |
|
|
|
|
_* An asterisk denotes that a property is required._
|
|
|
|
## Example
|
|
|
|
`collections/ExampleCollection.ts`
|
|
|
|
```ts
|
|
import type { CollectionConfig } from 'payload'
|
|
|
|
export const ExampleCollection: CollectionConfig = {
|
|
slug: 'example-collection',
|
|
fields: [
|
|
{
|
|
type: 'tabs', // required
|
|
tabs: [
|
|
// required
|
|
{
|
|
label: 'Tab One Label', // required
|
|
description: 'This will appear within the tab above the fields.',
|
|
fields: [
|
|
// required
|
|
{
|
|
name: 'someTextField',
|
|
type: 'text',
|
|
required: true,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: 'tabTwo',
|
|
label: 'Tab Two Label', // required
|
|
interfaceName: 'TabTwo', // optional (`name` must be present)
|
|
fields: [
|
|
// required
|
|
{
|
|
name: 'numberField', // accessible via tabTwo.numberField
|
|
type: 'number',
|
|
required: true,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
```
|