openpanel/packages/react-router-v6/src/legacy/index.ts
Stefan Pejcic 09f9f9502d packages
2024-11-07 19:03:37 +01:00

68 lines
1.7 KiB
TypeScript

import React from "react";
import { handleUseParams, type IRouterProvider } from "@refinedev/core";
import {
useLocation,
useParams,
Link,
type RouteProps,
type BrowserRouterProps,
useNavigate,
} from "react-router-dom";
import {
BrowserRouterComponent,
MemoryRouterComponent,
HashRouterComponent,
} from "./routerComponent.js";
import { Prompt } from "./prompt.js";
export type RefineRouteProps = RouteProps & {
layout?: boolean;
};
interface IReactRouterProvider extends IRouterProvider {
useLocation: typeof useLocation;
Link: typeof Link;
useParams: <Params extends { [K in keyof Params]?: string } = {}>() => Params;
RouterComponent: React.FC<BrowserRouterProps>;
routes?: RefineRouteProps[];
}
const RouterProvider: IReactRouterProvider = {
useHistory: () => {
const navigate = useNavigate();
return {
push: navigate,
replace: (path: string) => {
navigate(path, { replace: true });
},
goBack: () => {
navigate(-1);
},
};
},
useLocation,
useParams: () => {
const params = useParams();
const { pathname } = useLocation();
const paramsString = `/${Object.values(params).join("/")}`;
return handleUseParams({
...params,
resource:
Object.keys(params).length === 0
? pathname.substring(1)
: decodeURIComponent(pathname.substring(1)).replace(paramsString, ""),
});
},
Prompt: Prompt as any,
Link,
RouterComponent: BrowserRouterComponent,
};
// External dependencies are no longer exported
// export * from "react-router-dom";
export default RouterProvider;
export { MemoryRouterComponent, HashRouterComponent, BrowserRouterComponent };