UNPKG

@premieroctet/next-admin

Version:

Next-Admin provides a customizable and turnkey admin dashboard for applications built with Next.js and powered by the Prisma ORM. It aims to simplify the development process by providing a turnkey admin system that can be easily integrated into your proje

61 lines (60 loc) 2.02 kB
import { useLocation, useNavigate, useRouter } from "@tanstack/react-router"; import { useMemo } from "react"; import { useConfig } from "../context/ConfigContext.mjs"; import { createNextAdminComponents } from "./components.mjs"; import { createRouterAdapter } from "./context.mjs"; const useTanstackRouterAdapter = ()=>{ const location = useLocation(); const navigate = useNavigate(); const router = useRouter(); const { basePath } = useConfig(); const pathname = location.pathname; const query = useMemo(()=>new URLSearchParams(location.searchStr), [ location.searchStr ]); const push = (params)=>{ navigate({ to: ".", params: { _splat: params.pathname.replace(basePath, "") }, search: params.query }); }; const replace = (params)=>{ navigate({ to: ".", params: { _splat: params.pathname.replace(basePath, "") }, search: params.query, replace: true }); }; const refresh = ()=>{ router.invalidate(); }; const setQuery = (queryArg, merge = false)=>{ const currentQuery = Object.fromEntries(query); const newQuery = merge ? { ...currentQuery, ...queryArg } : queryArg; const searchParams = new URLSearchParams(); for (const [key, value] of Object.entries(newQuery))if (value) searchParams.set(key, value); window.location.search = searchParams.toString(); }; return { router: { push, replace, refresh, setQuery }, pathname, query: Object.fromEntries(query) }; }; const NextAdminRouterAdapter = createRouterAdapter(useTanstackRouterAdapter); const { NextAdmin, MainLayout } = createNextAdminComponents(NextAdminRouterAdapter); export { MainLayout, NextAdmin, NextAdminRouterAdapter, useTanstackRouterAdapter };