Adds a dedicated "Custom Components" section to the docs. As users become familiar with building custom components, not all areas that support customization are well documented. Not only this, but the current pattern does not allow for deep elaboration on these concepts without their pages growing to an unmanageable size. Custom components in general is a large enough topic to merit a standalone section with subpages. This change will make navigation much more intuitive, help keep page size down, and provide room to document every single available custom component with snippets to show exactly how they are typed, etc. This is a substantial change to the docs, here is the overview: - The "Admin > Customizing Components" doc is now located at "Custom Components > overview" - The "Admin > Views" doc is now located at "Custom Components > Custom Views" - There is a new "Custom Components > Edit View" doc - There is a new "Custom Components > List View" doc - The information about root components within the "Admin > Customizing Components" doc has been moved to a new "Custom Components > Root Components" doc - The information about custom providers within the "Admin > Customizing Components" doc has been moved to a new "Custom Components > Custom Providers" doc Similar to the goals of #10743, #10742, and #10741. Fixes #10872 and initial scaffolding for #10353. Dependent on #11126. This change will require the following redirects to be set up: - `/docs/admin/hooks` → `/docs/admin/react-hooks` - `/docs/admin/components` → `/docs/custom-components/overview` - `/docs/admin/views` → `/docs/custom-components/views`
486 lines
14 KiB
Plaintext
486 lines
14 KiB
Plaintext
---
|
|
title: Root Components
|
|
label: Root Components
|
|
order: 20
|
|
desc:
|
|
keywords: admin, components, custom, documentation, Content Management System, cms, headless, javascript, node, react, nextjs
|
|
---
|
|
|
|
Root Components are those that affect the [Admin Panel](../admin/overview) at a high-level, such as the logo or the main nav. You can swap out these components with your own [Custom Components](./overview) to create a completely custom look and feel.
|
|
|
|
When combined with [Custom CSS](../admin/customizing-css), you can create a truly unique experience for your users, such as white-labeling the Admin Panel to match your brand.
|
|
|
|
To override Root Components, use the `admin.components` property at the root of your [Payload Config](../configuration/overview):
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
// ...
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
## Config Options
|
|
|
|
The following options are available:
|
|
|
|
| Path | Description |
|
|
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `actions` | An array of Custom Components to be rendered _within_ the header of the Admin Panel, providing additional interactivity and functionality. [More details](#actions). |
|
|
| `afterDashboard` | An array of Custom Components to inject into the built-in Dashboard, _after_ the default dashboard contents. [More details](#afterdashboard). |
|
|
| `afterLogin` | An array of Custom Components to inject into the built-in Login, _after_ the default login form. [More details](#afterlogin). |
|
|
| `afterNavLinks` | An array of Custom Components to inject into the built-in Nav, _after_ the links. [More details](#afternavlinks). |
|
|
| `beforeDashboard` | An array of Custom Components to inject into the built-in Dashboard, _before_ the default dashboard contents. [More details](#beforedashboard). |
|
|
| `beforeLogin` | An array of Custom Components to inject into the built-in Login, _before_ the default login form. [More details](#beforelogin). |
|
|
| `beforeNavLinks` | An array of Custom Components to inject into the built-in Nav, _before_ the links themselves. [More details](#beforenavlinks). |
|
|
| `graphics.Icon` | The simplified logo used in contexts like the the `Nav` component. [More details](#graphicsicon). |
|
|
| `graphics.Logo` | The full logo used in contexts like the `Login` view. [More details](#graphicslogo). |
|
|
| `header` | An array of Custom Components to be injected above the Payload header. [More details](#header). |
|
|
| `logout.Button` | The button displayed in the sidebar that logs the user out. [More details](#logoutbutton). |
|
|
| `Nav` | Contains the sidebar / mobile menu in its entirety. [More details](#nav). |
|
|
| `providers` | Custom [React Context](https://react.dev/learn/scaling-up-with-reducer-and-context) providers that will wrap the entire Admin Panel. [More details](./custom-providers). |
|
|
| `views` | Override or create new views within the Admin Panel. [More details](./custom-views). |
|
|
|
|
_For details on how to build Custom Components, see [Building Custom Components](./overview#building-custom-components)._
|
|
|
|
<Banner type="success">
|
|
**Note:**
|
|
You can also use set [Collection Components](../configuration/collections#custom-components) and [Global Components](../configuration/globals#custom-components) in their respective configs.
|
|
</Banner>
|
|
|
|
## Components
|
|
|
|
### actions
|
|
|
|
Actions are rendered within the header of the Admin Panel. Actions are typically used to display buttons that add additional interactivity and functionality, although they can be anything you'd like.
|
|
|
|
To add an action, use the `actions` property in your `admin.components` config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
actions: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple Action component:
|
|
|
|
```tsx
|
|
export default function MyCustomAction() {
|
|
return (
|
|
<button onClick={() => alert('Hello, world!')}>
|
|
This is a custom action component
|
|
</button>
|
|
)
|
|
}
|
|
```
|
|
|
|
<Banner type="success">
|
|
**Note:**
|
|
You can also use add Actions to the [Edit View](./edit-view) and [List View](./list-view) in their respective configs.
|
|
</Banner>
|
|
|
|
### beforeDashboard
|
|
|
|
The `beforeDashboard` property allows you to inject Custom Components into the built-in Dashboard, before the default dashboard contents.
|
|
|
|
To add `beforeDashboard` components, use the `admin.components.beforeDashboard` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
beforeDashboard: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `beforeDashboard` component:
|
|
|
|
```tsx
|
|
export default function MyBeforeDashboardComponent() {
|
|
return (
|
|
<div>
|
|
This is a custom component injected before the Dashboard.
|
|
</div>
|
|
)
|
|
}
|
|
```
|
|
|
|
### afterDashboard
|
|
|
|
Similar to `beforeDashboard`, the `afterDashboard` property allows you to inject Custom Components into the built-in Dashboard, _after_ the default dashboard contents.
|
|
|
|
To add `afterDashboard` components, use the `admin.components.afterDashboard` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
afterDashboard: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `afterDashboard` component:
|
|
|
|
```tsx
|
|
export default function MyAfterDashboardComponent() {
|
|
return (
|
|
<div>
|
|
This is a custom component injected after the Dashboard.
|
|
</div>
|
|
)
|
|
}
|
|
```
|
|
|
|
### beforeLogin
|
|
|
|
The `beforeLogin` property allows you to inject Custom Components into the built-in Login view, _before_ the default login form.
|
|
|
|
To add `beforeLogin` components, use the `admin.components.beforeLogin` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
beforeLogin: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `beforeLogin` component:
|
|
|
|
```tsx
|
|
export default function MyBeforeLoginComponent() {
|
|
return (
|
|
<div>
|
|
This is a custom component injected before the Login form.
|
|
</div>
|
|
)
|
|
}
|
|
```
|
|
|
|
### afterLogin
|
|
|
|
Similar to `beforeLogin`, the `afterLogin` property allows you to inject Custom Components into the built-in Login view, _after_ the default login form.
|
|
|
|
To add `afterLogin` components, use the `admin.components.afterLogin` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
afterLogin: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `afterLogin` component:
|
|
|
|
```tsx
|
|
export default function MyAfterLoginComponent() {
|
|
return (
|
|
<div>
|
|
This is a custom component injected after the Login form.
|
|
</div>
|
|
)
|
|
}
|
|
```
|
|
|
|
### beforeNavLinks
|
|
|
|
The `beforeNavLinks` property allows you to inject Custom Components into the built-in [Nav Component](#nav), _before_ the nav links themselves.
|
|
|
|
To add `beforeNavLinks` components, use the `admin.components.beforeNavLinks` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
beforeNavLinks: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `beforeNavLinks` component:
|
|
|
|
```tsx
|
|
export default function MyBeforeNavLinksComponent() {
|
|
return (
|
|
<div>
|
|
This is a custom component injected before the Nav links.
|
|
</div>
|
|
)
|
|
}
|
|
```
|
|
|
|
### afterNavLinks
|
|
|
|
Similar to `beforeNavLinks`, the `afterNavLinks` property allows you to inject Custom Components into the built-in Nav, _after_ the nav links.
|
|
|
|
To add `afterNavLinks` components, use the `admin.components.afterNavLinks` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
afterNavLinks: [
|
|
'/path/to/your/component',
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `afterNavLinks` component:
|
|
|
|
```tsx
|
|
export default function MyAfterNavLinksComponent() {
|
|
return (
|
|
<p>This is a custom component injected after the Nav links.</p>
|
|
)
|
|
}
|
|
```
|
|
|
|
### Nav
|
|
|
|
The `Nav` property contains the sidebar / mobile menu in its entirety. Use this property to completely replace the built-in Nav with your own custom navigation.
|
|
|
|
To add a custom nav, use the `admin.components.Nav` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
Nav: '/path/to/your/component',
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `Nav` component:
|
|
|
|
```tsx
|
|
import { Link } from '@payloadcms/ui'
|
|
|
|
export default function MyCustomNav() {
|
|
return (
|
|
<nav>
|
|
<ul>
|
|
<li>
|
|
<Link href="/dashboard">
|
|
Dashboard
|
|
</Link>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
)
|
|
}
|
|
```
|
|
|
|
### graphics.Icon
|
|
|
|
The `Icon` property is the simplified logo used in contexts like the `Nav` component. This is typically a small, square icon that represents your brand.
|
|
|
|
To add a custom icon, use the `admin.components.graphics.Icon` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
graphics: {
|
|
Icon: '/path/to/your/component',
|
|
},
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `Icon` component:
|
|
|
|
```tsx
|
|
export default function MyCustomIcon() {
|
|
return (
|
|
<img src="/path/to/your/icon.png" alt="My Custom Icon" />
|
|
)
|
|
}
|
|
```
|
|
|
|
### graphics.Logo
|
|
|
|
The `Logo` property is the full logo used in contexts like the `Login` view. This is typically a larger, more detailed representation of your brand.
|
|
|
|
To add a custom logo, use the `admin.components.graphic.Logo` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
graphics: {
|
|
Logo: '/path/to/your/component',
|
|
},
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `Logo` component:
|
|
|
|
```tsx
|
|
export default function MyCustomLogo() {
|
|
return (
|
|
<img src="/path/to/your/logo.png" alt="My Custom Logo" />
|
|
)
|
|
}
|
|
```
|
|
|
|
### Header
|
|
|
|
The `Header` property allows you to inject Custom Components above the Payload header.
|
|
|
|
Examples of a custom header components might include an announcements banner, a notifications bar, or anything else you'd like to display at the top of the Admin Panel in a prominent location.
|
|
|
|
To add `Header` components, use the `admin.components.header` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
Header: [
|
|
'/path/to/your/component'
|
|
],
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `Header` component:
|
|
|
|
```tsx
|
|
export default function MyCustomHeader() {
|
|
return (
|
|
<header>
|
|
<h1>My Custom Header</h1>
|
|
</header>
|
|
)
|
|
}
|
|
```
|
|
|
|
### logout.Button
|
|
|
|
The `logout.Button` property is the button displayed in the sidebar that should log the user out when clicked.
|
|
|
|
To add a custom logout button, use the `admin.components.logout.Button` property in your Payload Config:
|
|
|
|
```ts
|
|
import { buildConfig } from 'payload'
|
|
|
|
export default buildConfig({
|
|
// ...
|
|
admin: {
|
|
// highlight-start
|
|
components: {
|
|
logout: {
|
|
Button: '/path/to/your/component',
|
|
}
|
|
},
|
|
// highlight-end
|
|
},
|
|
})
|
|
```
|
|
|
|
Here is an example of a simple `logout.Button` component:
|
|
|
|
```tsx
|
|
export default function MyCustomLogoutButton() {
|
|
return (
|
|
<button onClick={() => alert('Logging out!')}>
|
|
Log Out
|
|
</button>
|
|
)
|
|
}
|
|
```
|