@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
JavaScript
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 };