All files / src/components/LazyRoute LazyRoute.tsx

0% Statements 0/2
100% Branches 0/0
0% Functions 0/1
0% Lines 0/2

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33                                                                 
import { FunctionComponent, LazyExoticComponent, Suspense } from "react";
import { Route, RouteProps } from "react-router-dom";
import { PageLoader } from "../PageLoader";
 
export interface LazyRouteProps extends RouteProps {
  component: LazyExoticComponent<FunctionComponent>;
}
 
/**
 * A wrapper around the react-router-dom <Route /> which takes in a lazy loaded component
 * and wraps it with <Suspense /> and a generic <PageLoader /> fallback
 *
 * Usage:
 * ```tsx
 * import { lazy } from "react";
 *
 * const MyComponent = lazy(() => import("./path/to/MyComponent"));
 *
 * <LazyRoute path="/" component={MyComponent} />
 *
 * ```
 */
export const LazyRoute: FunctionComponent<LazyRouteProps> = ({
  component: Component,
  ...routeProps
}) => (
  <Route {...routeProps}>
    <Suspense fallback={<PageLoader />}>
      <Component />
    </Suspense>
  </Route>
);