Next Admin options parameter
This documentation covers an older version of Next Admin. If you are using the
latest version (>=5.0.0
and above), please refer to the current
documentation.
Next Admin options
is a parameter that allows you to configure your admin panel to your needs.
Refers to this documentation to see where you should use the options parameters. Wether you’re using the App Router or the Pages Router, the options object is the same. But the way you pass it to <NextAdmin/>
is different.
Example:
import { NextAdminOptions } from "@premieroctet/next-admin";
export const options: NextAdminOptions = {
basePath: "/admin",
title: "⚡️ My Admin Page",
model: {
/* Your model configuration here */
},
pages: {
"/custom": {
title: "Custom page",
icon: "AdjustmentsHorizontalIcon",
},
},
externalLinks: [
{
label: "App Router",
url: "/ ",
},
],
sidebar: {
groups: [
{
title: "Users",
models: ["User"],
},
{
title: "Categories",
models: ["Category"],
},
],
},
};
The NextAdminOptions
type is an object that can have the following properties:
title
The title of the admin panel. It is displayed in the browser tab and in the sidebar menu.
basePath
basePath
is a string that represents the base path of your admin. (e.g. /admin
) - optional.
model
model
is a property that allows you to configure everything about how your models, their fields, their relations are displayed and edited. It’s highly configurable you can learn more about it here.
pages
pages
is an object that allows you to add your own sub-pages as a sidebar menu entry. It is an object where the key is the path (without the base path) and the value is an object with the following properties:
Name | Type | Description |
---|---|---|
title | String | The title of the page displayed on the sidebar |
icon | String | The outline HeroIcon name of the page displayed on the sidebar |
sidebar
The sidebar
property allows you to customize the aspect of the sidebar menu. It is an object that can have the following properties:
Name | Type | Description |
---|---|---|
groups | Array | an array of objects that creates groups for specific resources |
groups[].title | String | the name of the group |
groups[].models | Array | the model names to display in the group |
externalLinks
The externalLinks
property allows you to add external links to the sidebar menu. It is an array of objects that can have the following properties:
Name | Type | Description |
---|---|---|
label | String | the label of the link displayed on the sidebar. This is mandatory |
url | String | the URL of the link. This is mandatory |
defaultColorScheme
The defaultColorScheme
property defines a default color palette between light
, dark
and system
, but allows the user to modify it. Default to system
.
forceColorScheme
Identical to defaultColorScheme
but does not allow the user to change it.
Here is an example of using NextAdminOptions
for the following schema :
enum Role {
USER
ADMIN
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
password String @default("")
posts Post[] @relation("author") // One-to-many relation
profile Profile? @relation("profile") // One-to-one relation
birthDate DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
role Role @default(USER)
}
const options: NextAdminOptions = {
basePath: "/admin",
model: {
User: {
toString: (user) => `${user.name} (${user.email})`,
list: {
display: ["id", "name", "email", "posts", "role", "birthDate"],
search: ["name", "email"],
fields: {
role: {
formatter: (role) => {
return <strong>{role.toString()}</strong>;
},
},
birthDate: {
formatter: (date) => {
return new Date(date as unknown as string)
?.toLocaleString()
.split(" ")[0];
},
},
},
},
edit: {
display: ["id", "name", "email", "posts", "role", "birthDate"],
fields: {
email: {
validate: (email) => email.includes("@") || "Invalid email",
},
birthDate: {
format: "date",
},
avatar: {
format: "file",
handler: {
upload: async (buffer, infos) => {
return "https://www.gravatar.com/avatar/00000000000000000000000000000000";
},
},
},
},
},
},
},
};
const adminRouter = await nextAdminRouter(prisma, schema, options);