import { Suspense, type ReactNode } from 'react'; import { createBrowserRouter, type RouteObject } from 'react-router-dom'; import { appRoutes, type RouteConfig } from './config'; /** * A recursive function to map our custom route config to the format * that react-router-dom expects, applying layouts and guards. */ function mapRoutes(routes: RouteConfig[]): RouteObject[] { return routes.map((route) => { // Start with the base element, wrapped in Suspense for lazy loading let element: ReactNode = ( Loading...}>{route.element} ); // Conditionally wrap the element in the specified layout // if (route.layout) { // element = {element}; // } // Conditionally wrap the element in the authentication guard // if (route.authRequired) { // element = {element}; // } return { path: route.path, element: element, ...(route.children && { children: mapRoutes(route.children) }), }; }); } export const router = createBrowserRouter(mapRoutes(appRoutes));