@exabytellc/app
Version:
EB react app to make everything a little easier!
56 lines • 1.78 kB
JavaScript
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
};