ra-core
Version:
Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React
46 lines • 1.83 kB
JavaScript
import * as React from 'react';
import { createMemoryRouter, RouterProvider, useLocation, useNavigate, } from 'react-router-dom';
const UseLocation = ({ locationCallback, }) => {
const location = useLocation();
locationCallback(location);
return null;
};
const UseNavigate = ({ navigateCallback, }) => {
const navigate = useNavigate();
navigateCallback(navigate);
return null;
};
/**
* Wrapper around react-router's `createMemoryRouter` to be used in test components.
*
* It is similar to `MemoryRouter` but it supports
* [data APIs](https://reactrouter.com/en/main/routers/picking-a-router#data-apis).
*
* Additionally, it provides
* - a `locationCallback` prop to get the location in the test
* - a `navigateCallback` prop to be able to navigate in the test
*/
export const TestMemoryRouter = ({ children, locationCallback, navigateCallback, ...rest }) => {
const router = createMemoryRouter([
{
path: '*',
element: (React.createElement(React.Fragment, null,
children,
locationCallback && (React.createElement(UseLocation, { locationCallback: locationCallback })),
navigateCallback && (React.createElement(UseNavigate, { navigateCallback: navigateCallback })))),
},
], {
future: {
v7_fetcherPersist: false,
v7_normalizeFormMethod: false,
v7_partialHydration: false,
v7_relativeSplatPath: false,
v7_skipActionErrorRevalidation: false,
},
...rest,
});
return (React.createElement(RouterProvider, { router: router,
// @ts-expect-error react-router types are not up-to-date
future: { v7_startTransition: false, v7_relativeSplatPath: false } }));
};
//# sourceMappingURL=TestMemoryRouter.js.map