Frameworks support

Frameworks support

Historically, Next-Admin was made to provide exclusive support for Next.js. The v8 release decoupled the library for any direct Next.js dependency and allowed support for any full-stack framework, as long as it can support API routes.

Next-Admin provides adapters for Next.js, Remix and TanStack Start, which simply consists on providing a routing hook that matches a given interface. So it is in fact easy to override the behavior of how routing works if the provided ones does not fit your needs.

The built-in adapters are accessible through the following import :

import { NextAdminRouterAdapter, NextAdmin, MainLayout } from '@premieroctet/next-admin/adapters/<your-framework>'

Building your own adapter

An adapter consists of a context that will need to wrap the NextAdmin component. This context provides a hook that matches RouterInterface.

type Query = Record<string, string | string[] | number | null>;
 
type PushParams = {
  pathname: string;
  query?: Query;
};
 
type Router = {
  push: (params: PushParams) => void;
  replace: (params: PushParams) => void;
  refresh: () => void;
  setQuery: (query: Query, merge?: boolean) => void;
};
 
type RouterInterface = {
  router: Router;
  query: Record<string, string>;
  pathname: string;
};

Once you created your hook, you can use the createRouterAdapter function to create the context.

import { createRouterAdapter } from "@premieroctet/next-admin/adapters/context";
import { createNextAdminComponents } from "@premieroctet/next-admin/adapters/components";
import type { RouterInterface } from '@premieroctet/next-admin/adapters/types'
 
const useMyRouterHook = (): RouterInterface => {
  // My router
}
 
export const MyCustomNextAdminRouterAdapter = createRouterAdapter(useMyRouterHook)
 
const { NextAdmin, MainLayout } = createNextAdminComponents(
  NextAdminRouterAdapter
);
 
export { NextAdmin, MainLayout };

You can now use NextAdmin in your admin page. MainLayout can be used in custom pages.