UNPKG

@exabytellc/app

Version:

EB react app to make everything a little easier!

56 lines 1.78 kB
import React, { useMemo, useCallback } from "react"; import { RouterProvider, createBrowserRouter, createHashRouter } from "react-router-dom"; // Corrected import import lazyImport from "./components/lazyImport"; import PropTypes from "prop-types"; import { jsx as _jsx } from "react/jsx-runtime"; export default function Router(_ref) { let { routes, hash, basename, Fallback, Fallback404, FallbackError } = _ref; const processRoutes = useCallback(routes => { return routes.map(route => { if (route.children) { route.children = processRoutes(route.children); } if (route.lazyImport) { const Component = lazyImport(route.lazyImport, route.lazyImportProps ?? {}, FallbackError); route.element = /*#__PURE__*/_jsx(Component, {}); delete route.lazyImport; } if (!route.errorElement) { route.errorElement = /*#__PURE__*/_jsx(FallbackError, {}); } return route; }); }, [FallbackError]); const processedRoutes = useMemo(() => { return processRoutes(Fallback404 ? [...routes, { path: "*", element: /*#__PURE__*/_jsx(Fallback404, {}) }] : [...routes]); }, [processRoutes, Fallback404, routes]); const router = useMemo(() => { return hash ? createHashRouter(processedRoutes, { basename }) : createBrowserRouter(processedRoutes, { basename }); }, [hash, basename, processedRoutes]); return /*#__PURE__*/_jsx(RouterProvider, { router: router, fallbackElement: /*#__PURE__*/_jsx(Fallback, {}) }); } Router.propTypes = { routes: PropTypes.array.isRequired, hash: PropTypes.bool, basename: PropTypes.string, Fallback: PropTypes.func, Fallback404: PropTypes.func, FallbackError: PropTypes.func };