import React, { useContext } from 'react'; // The upper alias react-router-dom$ into this file avoids the loop import * as ReactRouterDom from 'react-router-dom/'; import { RouterContext } from './context'; import { LoggerInstance } from './utils'; function WrapperRouter( props: | Parameters[0] | Parameters[0], ) { const { basename, ...propsRes } = props; const routerContextProps = useContext(RouterContext) || {}; LoggerInstance.log(`WrapperRouter info >>>`, { ...routerContextProps, routerContextProps, WrapperRouterProps: props, }); if (routerContextProps?.memoryRoute) { return ( ); } return ( ); } function WrapperRouterProvider( props: Parameters[0], ) { const { router, ...propsRes } = props; const routerContextProps = useContext(RouterContext) || {}; const routers = router.routes; LoggerInstance.log(`WrapperRouterProvider info >>>`, { ...routerContextProps, routerContextProps, WrapperRouterProviderProps: props, router, }); const RouterProvider = (ReactRouterDom as any)['Router' + 'Provider']; const createMemoryRouter = (ReactRouterDom as any)['create' + 'MemoryRouter']; const createBrowserRouter = (ReactRouterDom as any)[ 'create' + 'BrowserRouter' ]; if (routerContextProps.memoryRoute) { const MemeoryRouterInstance = createMemoryRouter(routers, { initialEntries: [routerContextProps?.memoryRoute.entryPath], }); return ; } else { const BrowserRouterInstance = createBrowserRouter(routers, { basename: routerContextProps.basename || router?.basename, future: router.future, window: router.window, }); return ; } } export * from 'react-router-dom/'; export { WrapperRouter as BrowserRouter }; export { WrapperRouterProvider as RouterProvider };