import React, { useContext } from 'react'; // The upper alias react-router-dom$ into this file avoids the loop import * as ReactRouterDom from 'react-router-dom/dist/index.js'; import { RouterContext } from './context'; import { LoggerInstance } from './utils'; function WraperRouter( props: | Parameters[0] | Parameters[0], ) { const { basename, ...propsRes } = props; const routerContextProps = useContext(RouterContext) || {}; LoggerInstance.log(`WraperRouter info >>>`, { ...routerContextProps, routerContextProps, WraperRouterProps: props, }); if (routerContextProps?.memoryRoute) { return ( ); } return ( ); } function WraperRouterProvider( props: Parameters[0], ) { const { router, ...propsRes } = props; const routerContextProps = useContext(RouterContext) || {}; const routers = router.routes; LoggerInstance.log(`WraperRouterProvider info >>>`, { ...routerContextProps, routerContextProps, WraperRouterProviderProps: 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, { // In host app, the routerContextProps is {}, so we should use router.basename as fallback basename: routerContextProps.basename || router.basename, future: router.future, window: router.window, }); return ; } } // export * from 'react-router-dom/dist/index.js'; export * from 'react-router-dom/'; export { WraperRouter as BrowserRouter }; export { WraperRouterProvider as RouterProvider };