Getting Started
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 is a tool that works only with Prisma (for now) so in this guide we will assume you already have a Next.js app with Prisma set up.
To get started with next-admin follow the steps below.
Install next-admin and prisma-json-schema-generator
yarn add @premieroctet/next-admin prisma-json-schema-generator
Setup TailwindCSS
Next-Admin relies on TailwindCSS for the style. If you do not have it, you can install TailwindCSS with the following config :
module.exports = {
content: [
"./node_modules/@premieroctet/next-admin/dist/**/*.{js,ts,jsx,tsx}",
],
darkMode: "class",
presets: [require("@premieroctet/next-admin/dist/preset")],
};
Setup SuperJson
SuperJson is required to avoid errors related to invalid serialization properties that can occur when passing data from server to client.
With Babel
yarn add -D babel-plugin-superjson-next superjson@^1
Add the babel-plugin-superjson-next
plugin to your .babelrc
file:
{
"presets": ["next/babel"],
"plugins": ["superjson-next"]
}
With SWC (Experimental)
yarn add -E -D next-superjson-plugin@0.6.1 superjson
Add the next-superjson-plugin
plugin to your next.config.js
file:
module.exports = {
// your current config
experimental: {
swcPlugins: [
[
"next-superjson-plugin",
{
excluded: [],
},
],
],
},
};
Generate Prisma JSON schema
Next-Admin relies on Prisma. If you do not have it, you can install Prisma.
Add the prisma-json-schema-generator
generator to your schema.prisma
file:
generator jsonSchema {
provider = "prisma-json-schema-generator"
includeRequiredFields = "true"
}
Then run the following command :
yarn run prisma generate
This will create a json-schema.json
file in the prisma/json-schema
directory.
Create the Next-Admin page
First, create an options.ts
file (see Options parameter for more details):
import { NextAdminOptions } from "@premieroctet/next-admin";
export const options: NextAdminOptions = {
basePath: "/admin",
title: "⚡️ My Admin",
}
Then create an nextadmin.ts
action file:
import { ActionParams, ModelName } from "@premieroctet/next-admin";
import {
SearchPaginatedResourceParams,
deleteResourceItems,
searchPaginatedResource,
submitForm,
} from "@premieroctet/next-admin/dist/actions";
import { options } from "path/to/options";
import { prisma } from "path/to/prisma";
const delay = (ms: number) => new Promise((res) => setTimeout(res, ms));
export const submitFormAction = async (
params: ActionParams,
formData: FormData
) => {
return submitForm({ ...params, options, prisma }, formData);
};
export const deleteItem = async (
model: ModelName,
ids: string[] | number[]
) => {
return deleteResourceItems(prisma, model, ids);
};
export const searchResource = async (
actionParams: ActionParams,
params: SearchPaginatedResourceParams
) => {
return searchPaginatedResource({ ...actionParams, options, prisma }, params);
};
Finally, create the page.tsx
file:
import { NextAdmin } from "@premieroctet/next-admin";
import { getPropsFromParams } from "@premieroctet/next-admin/dist/appRouter";
import { prisma } from "path/to/prisma";
import schema from "path/to/prisma/json-schema/json-schema.json";
import { submitFormAction, deleteItem, searchResource } from "path/to/actions/nextadmin";
import "path/to/styles.css"; // .css file containing tailiwnd rules
import { options } from "path/to/options";
export default async function AdminPage({
params,
searchParams,
}: {
params: { [key: string]: string[] };
searchParams: { [key: string]: string | string[] | undefined } | undefined;
}) {
const props = await getPropsFromParams({
params: params.nextadmin,
searchParams,
options,
prisma,
schema,
action: submitFormAction,
deleteAction: deleteItem,
searchPaginatedResourceAction: searchResource,
});
return <NextAdmin {...props} />;
}
Make sure to not use "use client"
in the page.
Run the app
Once done, you can navigate to the /admin
route.
You should be able to see the admin dashboard.