Get Started
Install dependencies
npm i @chakra-ui/react @emotion/react @adminext/core zod
Setup Chakra UI provider
AdmiNext utilizes Chakra UI as its design system. You need to set up the Chakra UI provider.
Note
Ship this step if you already have Chakra UI provider in your project.
Set up Chakra UI provider in your project following instructions .
Setup Toaster component for notifications
To display notifications, you need to set up the Toaster component from the @adminext/core package in your project. Add the following code to your layout.tsx file.
app/layout.tsx
import { Provider } from '@/components/ui/provider';
import { Toaster } from '@adminext/core/client';
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" suppressHydrationWarning>
<body>
<Provider>
<Toaster />
{children}
</Provider>
</body>
</html>
);
}
Declare resources
Declare you resources in TS file
app/admin/resources.ts
import z from 'zod';
import { resource } from '@adminext/core';
export const resources = {
posts: resource({
group: 'Content',
title: 'Posts',
identityBy: 'id',
pages: {
list: {
loader: async () => {
const posts = await fetchPosts(); // Put your fetch logic here
return { data: posts };
},
columns: [
{ accessorKey: 'id', header: 'ID', enableColumnFilter: false },
{ accessorKey: 'title', header: 'Title', filterFn: 'includesString' },
],
},
new: {
schema: z.object({
title: z.string(),
}),
actions: {
submit: async (data) => {
await createPost(data); // Put your create logic here
},
},
},
edit: {
schema: z.object({
title: z.string(),
}),
actions: {
submit: async (data) => {
await updatePost(data); // Put your update logic here
},
},
},
},
}),
};
AdmiNext can works with any backends. You can just declare your fetch, create, update, delete server actions.
💡
Tip
To see a working example of how AdmiNext integrates with Prizma ORM or Drizzle ORM, check out demo code: AdmiNext Demo
Create admin panels pages
Create admin panels pages in your project
app/admin/[[...resource]]/admin.page.tsx
import { DataProvider } from '@adminext/core/server';
import { RouteProps } from '@adminext/core';
import { resources } from '../resources.ts';
import { AdmiNext } from '@adminext/core/client';
export default async function Home(props: RouteProps) {
return (
<DataProvider resources={resources} routeProps={props}>
{(data) => (
<AdmiNext
resourcesDefinition={resources}
routePrefix="admin"
{...data}
/>
)}
</DataProvider>
);
}
Run your project
npm run dev
Last updated on