import React, { useMemo, useState } from 'react'; import { Route, RouteProps, Router, Routes as ReactRouters, useNavigate, } from 'react-router-dom'; import { useWixPatternsContainer } from '@wix/bex-core/react'; import { WixPatternsRouterContext } from '../../providers/WixPatternsRouterProvider'; import { PatternsReactRoute } from './PatternsReactRoute'; import { createPlatformizedNavigator } from './createPlatformizedNavigator'; import { WixPatternsRouterState } from '../../state/WixPatternsRouterState'; const convertToRoute = (child: React.ReactNode) => { if (React.isValidElement(child) && child.type === PatternsReactRoute) { const routeProps = child.props as RouteProps; return ; } return child; }; const Routers = ({ children }: { children: React.ReactNode }) => { const navigate = useNavigate(); const container = useWixPatternsContainer(); const [routerState] = useState( () => new WixPatternsRouterState({ container, navigate }), ); return ( {React.Children.map(children, convertToRoute)} ); }; export const PatternsReactRouter = ({ children, }: { children: React.ReactNode; }) => { const container = useWixPatternsContainer(); const pageLocation = container.usePageLocation?.(); if (!pageLocation) { throw new Error( 'It appears that `PatternsReactRouter` is being used incorrectly. Please refer to the documentation to ensure proper implementation.', ); } const navigator = useMemo( () => createPlatformizedNavigator({ pageLocation, container }), [pageLocation], ); return ( {children} ); };