@@ -7,9 +7,14 @@ import React from 'react';
77// import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
88import { LocalizationProvider } from '@mui/x-date-pickers' ;
99import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3' ;
10+ import type { Router } from '@remix-run/router' ;
1011import { AxiosError } from 'axios' ;
1112import { enGB } from 'date-fns/locale/en-GB' ;
12- import { RouterProvider , createBrowserRouter } from 'react-router-dom' ;
13+ import {
14+ RouterProvider ,
15+ createBrowserRouter ,
16+ type RouteObject ,
17+ } from 'react-router-dom' ;
1318import AdminPage from './admin/admin.component' ;
1419import {
1520 clearFailedAuthRequestsQueue ,
@@ -18,15 +23,18 @@ import {
1823import { MicroFrontendId } from './app.types' ;
1924import Catalogue from './catalogue/catalogue.component' ;
2025import CatalogueItemsLandingPage from './catalogue/items/catalogueItemsLandingPage.component' ;
21- import ErrorPage from './common/errorPage.component' ;
2226import ConfigProvider from './configProvider.component' ;
2327import handleIMS_APIError from './handleIMS_APIError' ;
2428import { HomePage } from './homePage/homePage.component' ;
2529import IMSThemeProvider from './imsThemeProvider.component' ;
2630import Items from './items/items.component' ;
2731import ItemsLandingPage from './items/itemsLandingPage.component' ;
2832import ManufacturerLandingPage from './manufacturer/manufacturerLandingPage.component' ;
29- import ManufacturerLayout from './manufacturer/manufacturerLayout.component' ;
33+ import ManufacturerLayout , {
34+ ManufacturerErrorComponent ,
35+ ManufacturerLayoutErrorComponent ,
36+ manufacturerLayoutLoader ,
37+ } from './manufacturer/manufacturerLayout.component' ;
3038import ManufacturerTable from './manufacturer/manufacturerTable.component' ;
3139import Preloader from './preloader/preloader.component' ;
3240import retryIMS_APIErrors from './retryIMS_APIErrors' ;
@@ -71,7 +79,7 @@ const queryClient = new QueryClient({
7179 } ,
7280} ) ;
7381
74- const router = createBrowserRouter ( [
82+ const routeObject : RouteObject [ ] = [
7583 {
7684 Component : Layout ,
7785 children : [
@@ -92,25 +100,34 @@ const router = createBrowserRouter([
92100 {
93101 path : paths . manufacturers ,
94102 Component : ManufacturerLayout ,
103+ loader : manufacturerLayoutLoader ( queryClient ) ,
104+ ErrorBoundary : ManufacturerLayoutErrorComponent ,
95105 children : [
96106 { index : true , Component : ManufacturerTable } ,
97107 { path : paths . manufacturer , Component : ManufacturerLandingPage } ,
98108 {
99109 path : '*' ,
100- Component : ( ) => (
101- < ErrorPage
102- boldErrorText = "Invalid Manufacturer Route"
103- errorText = "The manufacturer route you are trying to access doesn't exist. Please click the Home button to navigate back to the Manufacturer Home page."
104- />
105- ) ,
110+ Component : ManufacturerErrorComponent ,
106111 } ,
107112 ] ,
108113 } ,
109114 ] ,
110115 } ,
111- ] ) ;
116+ ] ;
117+
118+ let router : Router ;
119+ const isUsingMSW =
120+ import . meta. env . DEV || import . meta. env . VITE_APP_INCLUDE_MSW === 'true' ;
121+
122+ if ( ! isUsingMSW ) router = createBrowserRouter ( routeObject ) ;
123+
124+ // If the application is using MSW (Mock Service Worker),
125+ // it creates the router using `createBrowserRouter` within the App so it can wait for MSW to load. This is necessary
126+ // because MSW needs to be running before the router is created to handle requests properly in the loader. In a production
127+ // environment, this is not needed.
112128
113129export default function App ( ) {
130+ if ( isUsingMSW ) router = createBrowserRouter ( routeObject ) ;
114131 return < RouterProvider router = { router } /> ;
115132}
116133
0 commit comments